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('[]')