def _de(self, value, fieldtype, field): if not fieldtype: # no datatype information set if isinstance(value, basestring) and value.startswith(u"_json_"): value = json.loads(value[len(u"_json_"):]) if isinstance(value, bytes): value = unicode(value, self.codepage) return value if isinstance(fieldtype, dict): fieldtype = fieldtype[u"datatype"] # call serialize callback function if fieldtype in self.deserializeCallbacks: return self.deserializeCallbacks[fieldtype](value, field) if fieldtype in ("date", "datetime"): # -> to datatime if isinstance(value, basestring): value = ConvertToDateTime(value) elif isinstance(value, (float,int,long)): value = datetime.fromtimestamp(value) elif fieldtype == "timestamp": if isinstance(value, basestring): value = float(value) elif fieldtype in ("mselection", "mcheckboxes", "urllist", "unitlist"): # -> to string tuple # unitlist -> to number tuple if not value: value = u"" elif value[0]!="[": # bw 0.9.5b: changed storage format to json. Previous versions used lines # with \n for entries. if isinstance(value, basestring): if value.startswith(u"_json_"): value = json.loads(value[len(u"_json_"):]) else: value = tuple(value.split(u"\n")) elif isinstance(value, list): value = tuple(value) if fieldtype == "unitlist": value = [long(v) for v in value] else: value = json.loads(value) elif fieldtype == "json": # -> to python type if not value: value = None elif isinstance(value, basestring): value = json.loads(value) return value
def _de(self, value, fieldtype, field): if not fieldtype: # no datatype information set if isinstance(value, basestring) and value.startswith(u"_json_"): value = json.loads(value[len(u"_json_") :]) if isinstance(value, bytes): value = unicode(value, self.codepage) return value if isinstance(fieldtype, dict): fieldtype = fieldtype[u"datatype"] # call serialize callback function if fieldtype in self.deserializeCallbacks: return self.deserializeCallbacks[fieldtype](value, field) if fieldtype in ("date", "datetime"): # -> to datatime if isinstance(value, basestring): value = ConvertToDateTime(value) elif isinstance(value, (float, int, long)): value = datetime.fromtimestamp(value) elif fieldtype == "timestamp": if isinstance(value, basestring): value = float(value) elif fieldtype in ("mselection", "mcheckboxes", "urllist", "unitlist"): # -> to string tuple # unitlist -> to number tuple if not value: value = u"" elif value[0] != "[": # bw 0.9.5b: changed storage format to json. Previous versions used lines # with \n for entries. if isinstance(value, basestring): if value.startswith(u"_json_"): value = json.loads(value[len(u"_json_") :]) else: value = tuple(value.split(u"\n")) elif isinstance(value, list): value = tuple(value) if fieldtype == "unitlist": value = [long(v) for v in value] else: value = json.loads(value) elif fieldtype == "json": # -> to python type if not value: value = None elif isinstance(value, basestring): value = json.loads(value) return value
def test_todatetime(self): import datetime dt = datetime.datetime.now() self.assert_(ConvertToDateTime(dt) == dt) import time self.assert_(ConvertToDateTime(time.time())) self.assert_(ConvertToDateTime(0) == None) self.assert_(ConvertToDateTime(None) == None) self.assert_( ConvertToDateTime(str(dt)).strftime("%Y-%m-%d %H:%M:%S") == dt.strftime("%Y-%m-%d %H:%M:%S")) self.assert_( ConvertToDateTime("2015-01-02").strftime("%Y-%m-%d") == "2015-01-02") self.assert_( ConvertToDateTime("2015/01/02").strftime("%Y-%m-%d") == "2015-01-02") self.assert_( ConvertToDateTime("2015/01/02 12:23").strftime("%Y-%m-%d %H:%M") == "2015-01-02 12:23") self.assert_( ConvertToDateTime("2015/01/02 12:23:43").strftime( "%Y-%m-%d %H:%M:%S") == "2015-01-02 12:23:43")
def FmtDateNumbers(self, date, language=None): """ Formats dates as numbers e.g 13.12.2011. returns string """ if not date: return u"" if not isinstance(date, datetime): date = ConvertToDateTime(date) return date.strftime(u"%x")
def FmtDateText(self, date, language=None): """ Formats dates as readable text in conventional format. returns string """ if not date: return u"" if not isinstance(date, datetime): date = ConvertToDateTime(date) return date.strftime(u"%c")
def Modified(self, response, user=None): """ Adds a last modified header to the response. meta.pool_change is used as date. returns response """ if user: response.last_modified = formatdate(timeval=None, localtime=True, usegmt=True) else: t = self.context.meta.get("pool_change") if t and isinstance(t, basestring): t = ConvertToDateTime(t).timetuple() t = time.mktime(t) elif t: t = time.mktime(t.timetuple()) else: t = None response.last_modified = formatdate(timeval=t, localtime=True, usegmt=True) response.etag = '%s-%s-%s' % (response.last_modified, response.content_length, str(self.context.id)) return response
def Modified(self, response, user=None): """ Adds a last modified header to the response. meta.pool_change is used as date. returns response """ if user: response.last_modified = formatdate(timeval=None, localtime=True, usegmt=True) else: if self.context.meta.get("pool_change"): t = ConvertToDateTime( self.context.meta.get("pool_change")).timetuple() t = time.mktime(t) else: t = None response.last_modified = formatdate(timeval=t, localtime=True, usegmt=True) response.etag = '%s-%s-%s' % (response.last_modified, response.content_length, str(self.context.id)) return response
def ConvertDate(self, date): if not isinstance(date, datetime): date = ConvertToDateTime(date) if not date: return u"" return date.strftime(u"%Y-%m-%d %H:%M:%S")
def Render(self, fieldConf, value, useDefault=False, listItems=None, context=None, **kw): """ fieldConf = FieldConf of field to be rendered value = the value to be rendered useDefault = use default values from fieldConf if not found in value listItems = used for list lookup key -> name context = context object the field is rendered for. Required if listItems=None. **kw: static = static root path for images """ data = "" if useDefault: data = fieldConf["default"] if value != None: data = value if fieldConf.id in self.skipRender: return data def loadListItems(fld, context): if not context: return [] pool_type = context.GetTypeID() return context.root().LoadListItems(fld, obj=context, pool_type=pool_type) # format for output fType = fieldConf["datatype"] # fomat settings fmt = fieldConf.settings.get("format") if fmt: if fmt == "bytesize": data = FormatBytesForDisplay(data) return data elif fmt == "image": tmpl = fieldConf.settings.get("path", u"") path = tmpl % {"data": data, "static": kw.get("static", u"")} data = """<img src="%(path)s" title="%(name)s" />""" % { "path": path, "name": fieldConf.name } return data if fType == "bool": if data: data = _(u"Yes") else: data = _(u"No") elif fType == "string": if fieldConf.settings.get("relation") == u"userid": # load user name from database try: udb = context.app.portal.userdb.root() user = udb.GetUser(data, activeOnly=0) if user: data = user.GetTitle() except AttributeError: pass elif fType == "text": data = data.replace(u"\r\n", u"\r\n<br />") elif fType == "date": if not isinstance(data, datetime): if not data: return u"" data = ConvertToDateTime(data) fmt = fieldConf.settings.get("strftime", u"%x") return data.strftime(fmt) elif fType in ("datetime", "timestamp"): fmt = fieldConf.settings.get("format") if not isinstance(data, datetime): if not data: return u"" data = ConvertToDateTime(data) # defaults fmt = fieldConf.settings.get("strftime") if not fmt: fmt = u"%x %H:%M" # hide hour and minutes if zero if data.hour == 0 and data.minute == 0 and data.second == 0: fmt = u"%x" elif fieldConf.settings.get("seconds"): fmt = u"%x %X" return data.strftime(fmt) elif fType == "unit": if data == 0 or data == "0": return "" return data elif fType == "unitlist": if (type(data) == ListType): return ConvertListToStr(data) return str(data) elif fType == "list" or fType == "radio": options = listItems or loadListItems(fieldConf, context) if not options: options = fieldConf.get("listItems") if hasattr(options, "__call__"): options = options(fieldConf, self.context) if options: for item in options: if item["id"] == data: data = item["name"] break elif fType == "mselection" or fType == "mcheckboxes": values = [] options = listItems or loadListItems(fieldConf, context) if not options: options = fieldConf.get("listItems") if hasattr(options, "__call__"): options = options(fieldConf, self.context) if isinstance(data, basestring): data = tuple(value.split(u"\n")) for ref in data: if options: for item in options: if item["id"] == ref: values.append(item["name"]) else: values.append(ref) data = u", ".join(values) elif fType == "url": if render: if data != u"" and data.find(u"http://") == -1: data = u"http://" + data l = data[7:50] if len(data) > 50: l += u"..." data = u"<a alt='%s' href='%s' target='_blank'>%s</a>" % ( data, data, l) elif fType == "urllist": urllist = data data = [] if len(urllist) and urllist[0] == u"[": urllist = urllist[1:-1] ul = urllist.split(u"', u'") ul[0] = ul[0][1:] ul[len(ul) - 1] = ul[len(ul) - 1][:-1] else: ul = urllist.replace(u"\r", u"") ul = ul.split(u"\n") links = [] for l in ul: t = l.split(u"|||") title = u"" url = t[0] if len(t) > 1: title = t[1] if title != u"": title = u'%s (%s)' % (title, url) else: title = url links.append({"id": l, "name": title}) data.append( u"<a alt='%s' title='%s' href='%s' target='_blank'>%s</a><br/>" % (title, title, url, title)) data = u"".join(data) elif fType == "password": data = u"*****" return data
def _de(self, value, fieldtype, field): if not fieldtype: # no datatype information set if isinstance(value, basestring) and value.startswith(u"_json_"): value = json.loads(value[len(u"_json_"):]) if isinstance(value, bytes): value = unicode(value, self.codepage) return value if isinstance(fieldtype, dict): fieldtype = fieldtype[u"datatype"] # call serialize callback function if fieldtype in self.deserializeCallbacks: return self.deserializeCallbacks[fieldtype](value, field) if fieldtype in ("date", "datetime"): # -> to datetime if isinstance(value, basestring): value = ConvertToDateTime(value) elif isinstance(value, (float,int,long)): value = datetime.fromtimestamp(value) elif fieldtype == "time": # -> to datetime.time if isinstance(value, basestring): # misuse datetime parser value2 = ConvertToDateTime(u"2015-01-01 "+unicode(value)) if value2: value = datetime_time(value2.hour,value2.minute,value2.second,value2.microsecond) elif isinstance(value, (float,int,long)): value = datetime.fromtimestamp(value) value = datetime_time(value.hour,value.minute,value.second,value.microsecond) elif fieldtype == "timestamp": if isinstance(value, basestring): value = float(value) elif fieldtype in ("multilist", "checkbox", "mselection", "mcheckboxes", "urllist", "unitlist"): # -> to string tuple # unitlist -> to number tuple if not value: value = u"" elif isinstance(value, basestring): try: value = tuple(json.loads(value)) except ValueError: # bw 0.9.12 convert line based values if "\r\n" in value: value = value.split("\r\n") else: value = (value,) elif isinstance(value, list): value = tuple(value) if fieldtype == "unitlist": value = tuple([long(v) for v in value]) elif fieldtype == "json": # -> to python type if not value: value = None elif isinstance(value, basestring): value = json.loads(value) return value
def _de(self, value, fieldtype, field): if not fieldtype: # no datatype information set if isinstance(value, basestring) and value.startswith(u"_json_"): value = json.loads(value[len(u"_json_"):]) if isinstance(value, bytes): value = unicode(value, self.codepage) return value if isinstance(fieldtype, dict): fieldtype = fieldtype[u"datatype"] # call serialize callback function if fieldtype in self.deserializeCallbacks: return self.deserializeCallbacks[fieldtype](value, field) if fieldtype in ("date", "datetime"): # -> to datetime if isinstance(value, basestring): value = ConvertToDateTime(value) elif isinstance(value, (float, int, long)): value = datetime.fromtimestamp(value) elif fieldtype == "time": # -> to datetime.time if isinstance(value, basestring): # misuse datetime parser value2 = ConvertToDateTime(u"2015-01-01 " + unicode(value)) if value2: value = datetime_time(value2.hour, value2.minute, value2.second, value2.microsecond) elif isinstance(value, (float, int, long)): value = datetime.fromtimestamp(value) value = datetime_time(value.hour, value.minute, value.second, value.microsecond) elif fieldtype == "timestamp": if isinstance(value, basestring): value = float(value) elif fieldtype in ("multilist", "checkbox", "mselection", "mcheckboxes", "urllist", "unitlist"): # -> to string tuple # unitlist -> to number tuple if not value: value = u"" elif isinstance(value, basestring): try: value = tuple(json.loads(value)) except ValueError: # bw 0.9.12 convert line based values if "\r\n" in value: value = value.split("\r\n") else: value = (value, ) elif isinstance(value, list): value = tuple(value) if fieldtype == "unitlist": value = tuple([long(v) for v in value]) elif fieldtype == "json": # -> to python type if not value: value = None elif isinstance(value, basestring): value = json.loads(value) return value