📄 hdfhelp.py
字号:
#!/neo/opt/bin/python## Copyright (C) 2001 by Neotonic Software Corporation# All Rights Reserved.## hdfhelp.py## This code makes using odb with Clearsilver as "easy as stealing candy# from a baby". - jeske## How to use:## rows = tbl.fetchAllRows()# rows.hdfExport("CGI.rows", hdf_dataset)## row = tbl.fetchRow( ('primary_key', value) )# row.hdfExport("CGI.row", hdf_dataset)## How to setup:# # # define table# class AgentsTable(odb.Table):# def _defineRows(self):# self.d_addColumn("agent_id",kInteger,None,primarykey = 1,autoincrement = 1)# self.d_addColumn("login",kVarString,200,notnull=1)# self.d_addColumn("ticket_count",kIncInteger,None)## # make sure you return a subclass of hdfhelp.HdfRow## def defaultRowClass(self):# return hdfhelp.HdfRow# def defaultRowListClass(self):# return hdfhelp.HdfItemList#import string, osimport neo_cgiimport neo_csimport neo_utilimport odbimport timeimport UserListSECS_IN_MIN = 60SECS_IN_HOUR = (SECS_IN_MIN * 60)SECS_IN_DAY = (SECS_IN_HOUR * 24)SECS_IN_WEEK = (SECS_IN_DAY * 7)SECS_IN_MONTH = (SECS_IN_DAY * 30)kYearPos = 0kMonthPos = 1kDayPos = 2kHourPos = 3kMinutePos = 4kSecondPos = 5kWeekdayPos = 6kJulianDayPos = 7kDSTPos = 8def renderDate(then_time,day=0): if then_time is None: then_time = 0 then_time = int(then_time) if then_time == 0 or then_time == -1: return "" then_tuple = time.localtime(then_time) now_tuple = time.localtime(time.time()) if day or (then_tuple[kHourPos]==0 and then_tuple[kMinutePos]==0 and then_tuple[kSecondPos]==0): # it's just a date if then_tuple[kYearPos] == now_tuple[kYearPos]: # no year return time.strftime("%m/%d",then_tuple) else: # add year return time.strftime("%m/%d/%Y",then_tuple) else: # it's a full time/date return time.strftime("%m/%d/%Y %I:%M%p",then_tuple)class HdfRow(odb.Row): def hdfExport(self, prefix, hdf_dataset, *extra, **extranamed): skip_fields = extranamed.get("skip_fields", None) translate_dict = extranamed.get("translate_dict", None) tz = extranamed.get("tz", "US/Pacific") for col_name,value in self.items(): if skip_fields and (col_name in skip_fields): continue try: name,col_type,col_options = self._table.getColumnDef(col_name) except: col_type = odb.kVarString col_options = {} if (value is not None): if col_options.get("no_export",0): continue if type(value) in [ type(0), type(0L) ]: hdf_dataset.setValue(prefix + "." + col_name,"%d" % value) elif type(value) == type(1.0): if int(value) == value: hdf_dataset.setValue(prefix + "." + col_name,"%d" % value) else: hdf_dataset.setValue(prefix + "." + col_name,"%0.2f" % value) else: if col_type == odb.kReal: log("why are we here with this value: %s" % value) if translate_dict: for k,v in translate_dict.items(): value = string.replace(value,k,v) hdf_dataset.setValue(prefix + "." + col_name,neo_cgi.htmlEscape(str(value))) if col_options.get("int_date",0): hdf_dataset.setValue(prefix + "." + col_name + ".string",renderDate(value)) hdf_dataset.setValue(prefix + "." + col_name + ".day_string",renderDate(value,day=1)) if value: neo_cgi.exportDate(hdf_dataset, "%s.%s" % (prefix, col_name), tz, value) if col_options.has_key("enum_values"): enum = col_options["enum_values"] hdf_dataset.setValue(prefix + "." + col_name + ".enum", str(enum.get(value,'')))class HdfItemList(UserList.UserList): def hdfExport(self,prefix,hdf_dataset,*extra,**extranamed): export_by = extranamed.get("export_by", None) n = 0 for row in self: if export_by is not None: n = row[export_by] row.hdfExport("%s.%d" % (prefix,n),hdf_dataset,*extra,**extranamed) n = n + 1def setList(hdf, prefix, lst): hdf.setValue(prefix+".0", str(len(lst))) for n in range(len(lst)): hdf.setValue(prefix+".%d" %(n+1), lst[n]);def getList(hdf, name): lst = [] for n in range(hdf.getIntValue(name,0)): lst.append(hdf.getValue(name+".%d" %(n+1), "")) return lstdef eval_cs(hdf,a_cs_string): cs = neo_cs.CS(hdf) try: cs.parseStr(a_cs_string) return cs.render() except: return "Error in CS tags: %s" % neo_cgi.htmlEscape(repr(a_cs_string))def childloop(hdf): children = [] if hdf: hdf = hdf.child() while hdf: children.append(hdf) hdf = hdf.next() return children# ----------------------------class HDF_Database(odb.Database): def defaultRowClass(self): return HdfRow def defaultRowListClass(self): return HdfItemList# ----------------------------def loopHDF(hdf, name=None): results = [] if name: o = hdf.getObj(name) else: o = hdf if o: o = o.child() while o: results.append(o) o = o.next() return resultsdef loopKVHDF(hdf, name=None): results = [] if name: o = hdf.getObj(name) else: o = hdf if o: o = o.child() while o: results.append((o.name(), o.value())) o = o.next() return resultsclass hdf_iterator: def __init__(self, hdf): self.hdf = hdf self.node = None if self.hdf: self.node = self.hdf.child() def __iter__(self): return self def next(self): if not self.node: raise StopIteration ret = self.node self.node = self.node.next() return retclass hdf_kv_iterator(hdf_iterator): def next(self): if not self.node: raise StopIteration ret = (self.node.name(), self.node.value()) self.node = self.node.next() return retclass hdf_key_iterator(hdf_iterator): def next(self): if not self.node: raise StopIteration ret = self.node.name() self.node = self.node.next() return retclass hdf_ko_iterator(hdf_iterator): def next(self): if not self.node: raise StopIteration ret = (self.node.name(), self.node) self.node = self.node.next() return ret # ----------------------------def test(): import neo_util hdf = neo_util.HDF() hdf.setValue("foo","1") print eval_cs(hdf,"this should say 1 ===> <?cs var:foo ?>") if __name__ == "__main__": test()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -