Exemplo n.º 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
Exemplo n.º 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
Exemplo n.º 3
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
Exemplo n.º 4
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