示例#1
0
文件: type.py 项目: aducode/Gaeapy
 def deserialize(cls, ctx):
     (type_id, is_ref, hash_code, ) = struct.unpack('<i?i', ctx.read(9))
     if type_id == 0:
         return None
     if is_ref:
         return ctx.ref(hash_code)
     (key_type_id, ) = struct.unpack('<i', ctx.read(4))
     key = register.get(key_type_id).deserialize(ctx)
     (value_type_id, ) = struct.unpack('<i', ctx.read(4))
     value = register.get(value_type_id).deserialize(ctx)
     obj = key, value
     ctx.ref(hash_code, obj)
     return obj
示例#2
0
    def as_dict(self, include_class_info=True, span_keys=None):
        from register import register

        ret = {}
        keys_to_span = span_keys or self._span_keys

        for prop in self:
            p = self.model._properties[prop]

            # If this property should be spanned try to.
            if keys_to_span and prop in keys_to_span and isinstance(p, ndb.KeyProperty):
                key = getattr(self.instance, prop)
                related = key.get()

                # Use custom resource class if registered, fallback to defaults
                # if not.
                if register.is_registered(related.__class__):
                    ResourceHandler = register.get(related.__class__)[1]

                    if ResourceHandler is not None:
                        ResourceClass = ResourceHandler.resource_class
                    else:
                        ResourceClass = resource_for_model(related.__class__)

                    ret[prop] = ResourceClass(related).as_dict(include_class_info=include_class_info)
                    continue

            ret[prop] = val_to_str(p, getattr(self.instance, prop))

        ret['id'] = self.instance.key.id()

        if include_class_info:
            ret['model'] = self.instance.__class__.__name__

        return ret
示例#3
0
文件: type.py 项目: aducode/Gaeapy
 def deserialize(cls, ctx):
     (type_id, is_ref, hash_code, ) = struct.unpack('<i?i', ctx.read(9))
     if type_id == 0:
         return None
     if is_ref:
         return ctx.ref(hash_code)
     length = struct.pack('<i', ctx.read(4))
     _type = register.get(type_id)
     obj = dict()
     for i in xrange(length):
         (key_type_id, ) = struct.unpack('<i', ctx.read(4))
         key_type = register.get(key_type_id)
         key = key_type.deserialize(ctx)
         (value_type_id,) = struct.unpack('<i', ctx.read(4))
         value_type = register.get(value_type_id)
         value = value_type.deserialize(ctx)
         obj[key] = value
     ctx.ref(hash_code, obj)
     return obj
示例#4
0
文件: type.py 项目: aducode/Gaeapy
 def deserialize(cls, ctx):
     (type_id, is_ref, hash_code, ) = struct.unpack('<i?i', ctx.read(9))
     if type_id == 0:
         return None
     if is_ref:
         return ctx.ref(hash_code)
     (length, ) = struct.unpack('<i', ctx.read(4))
     _type = register.get(type_id)
     obj = list()
     if issubclass(_type, BaseType):
         # 如果是基本类型(Serializable,容器以外的类型)
         # 则使用_type
         for i in xrange(length):
             obj.append(_type.deserialize(ctx))
     else:
         # 否则使用数据中的type
         for i in xrange(length):
             (item_type_id, ) = struct.unpack('<i', ctx.read(4))
             obj.append(register.get(item_type_id).deserialize(ctx))
     ctx.ref(hash_code, obj)
     return obj
示例#5
0
文件: type.py 项目: aducode/Gaeapy
 def deserialize(cls, ctx):
     (type_id, is_ref, hash_code, ) = struct.unpack('<i?i', ctx.read(9))
     if type_id == 0:
         return None
     if is_ref:
         return ctx.ref(hash_code)
     length = struct.pack('<i', ctx.read(4))
     obj = set()
     for i in xrange(length):
         (item_type_id, ) = struct.unpack('<i', ctx.read(4))
         obj.add(register.get(item_type_id).deserialize(ctx))
     ctx.ref(hash_code, obj)
     return obj
示例#6
0
文件: type.py 项目: aducode/Gaeapy
 def checked_type(cls, type_id, type_cls):
     excepted = register.get(type_id)
     real = type_cls
     if excepted != Null and not issubclass(excepted, real):
         raise RuntimeError('Excepted type is [{excepted}], but real type is [{real}]'.format(excepted=excepted, real=real))
     return excepted