コード例 #1
0
    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
コード例 #2
0
    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
コード例 #3
0
ファイル: test_utils.py プロジェクト: comlorda/nive
    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")
コード例 #4
0
ファイル: views.py プロジェクト: adroullier/nive
 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")
コード例 #5
0
ファイル: views.py プロジェクト: adroullier/nive
 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")
コード例 #6
0
 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")
コード例 #7
0
 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")
コード例 #8
0
ファイル: views.py プロジェクト: nive/nive
    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
コード例 #9
0
    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
コード例 #10
0
ファイル: dbManager.py プロジェクト: adroullier/nive
 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")
コード例 #11
0
    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
コード例 #12
0
 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")
コード例 #13
0
ファイル: structure.py プロジェクト: comlorda/nive
    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
コード例 #14
0
    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