NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

ajaxwriter.py (3093B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\script\util\ajaxwriter.py
      2 import json
      3 from carbon.common.script.util import htmlwriter
      4 from carbon.common.script.util.format import EscapeSQL
      5 
      6 class AjaxWriter(htmlwriter.HtmlWriter):
      7     __dependencies__ = []
      8 
      9     def __init__(self, ajaxfilter, neededRoles, session):
     10         htmlwriter.HtmlWriter.__init__(self, template='script:/wwwroot/lib/template/empty.html')
     11         self.ajaxfilter = ajaxfilter
     12         self.neededRoles = neededRoles
     13         self.session = session
     14         try:
     15             self.DB2 = sm.services['DB2']
     16         except:
     17             pass
     18 
     19     def WriteJsonGridList(self, columns, data, pageNumber, numberOfPages):
     20         colFunc = lambda row: '{"id":"%(id)s","cell":%(cell)s}' % {'id': unicode(getattr(row, columns[0], None)()),
     21          'cell': unicode([ unicode(getattr(row, c1, None)()) for c1 in columns ]).replace("'", '"')}
     22         self.Write('{"page":"%(page)s","total":%(total)s,"records":"%(records)s","rows":[%(rows)s]}' % {'page': str(pageNumber),
     23          'total': str(numberOfPages),
     24          'records': str(len(data)),
     25          'rows': str(','.join(map(colFunc, data)))})
     26 
     27     def WriteJsonList(self, valueId, captionId, data):
     28         buff = []
     29         for row in data:
     30             val = getattr(row, valueId, None)
     31             if hasattr(val, '__call__'):
     32                 val = val()
     33             label = getattr(row, captionId, None)
     34             if hasattr(label, '__call__'):
     35                 label = label()
     36             buff.append({'id': val,
     37              'label': label})
     38 
     39         self.Write(json.dumps(buff, separators=(',', ':')))
     40 
     41     def ToJson(self, kpart, labelpart):
     42         return json.dumps({'id': kpart,
     43          'label': labelpart})
     44 
     45     def HasAccess(self):
     46         return session.userid and session.role & self.neededRoles
     47 
     48     def Lookup(self, table, key_field, value_field):
     49         if not self.HasAccess:
     50             return self.Write('[]')
     51         rs = self.DB2.GetSchema('zsystem').Lookup(table, key_field, value_field, None, None, None, EscapeSQL(unicode(self.ajaxfilter)), 0)
     52         return self.WriteJsonList(key_field, value_field, rs)
     53 
     54     def MediaTypeBin(self):
     55         self.response.contentType = 'application/octet-stream'
     56 
     57     def MediaTypeJson(self):
     58         self.response.contentType = 'application/json; charset=utf-8'
     59 
     60     def MediaTypeXml(self):
     61         self.response.contentType = 'application/xhtml+xml'
     62 
     63     def MediaTypeAtom(self):
     64         self.response.contentType = 'application/atom+xml'
     65 
     66     def HandleAction(self, action, request, response):
     67         self.request = request
     68         self.response = response
     69         argstuple = self.GetActionArgs(request, action)
     70         if argstuple:
     71             args, kwargs = argstuple
     72             try:
     73                 getattr(self, action)(*args, **kwargs)
     74             except TypeError as e:
     75                 sm.services['http'].LogError('Bad params (', kwargs, ') sent to ', action, ', resulting in exception: ', e)
     76                 raise
     77 
     78         else:
     79             self.Write('[]')