in src/google/appengine/ext/ndb/model.py [0:0]
def _db_get_value(self, v, p):
if v.HasField('stringValue'):
sval = v.stringValue
meaning = p.meaning
if meaning == entity_pb2.Property.BLOBKEY:
sval = BlobKey(sval)
elif meaning == entity_pb2.Property.BLOB:
if p.meaning_uri == _MEANING_URI_COMPRESSED:
sval = _CompressedValue(sval)
elif meaning == entity_pb2.Property.ENTITY_PROTO:
pb = entity_pb2.EntityProto()
pb.MergeFromString(sval)
modelclass = Expando
if len(pb.key.path.element):
kind = six.ensure_str(pb.key.path.element[-1].type)
modelclass = Model._kind_map.get(kind, modelclass)
sval = modelclass._from_pb(pb)
elif meaning != entity_pb2.Property.BYTESTRING:
try:
sval.decode('ascii')
except UnicodeDecodeError:
try:
sval = six.text_type(sval.decode('utf-8'))
except UnicodeDecodeError:
pass
return sval
elif v.HasField('int64Value'):
ival = v.int64Value
if p.meaning == entity_pb2.Property.GD_WHEN:
return _EPOCH + datetime.timedelta(microseconds=ival)
return ival
elif v.HasField('booleanValue'):
return bool(v.booleanValue)
elif v.HasField('doubleValue'):
return v.doubleValue
elif v.HasField('referencevalue'):
rv = v.referencevalue
app = rv.app
namespace = rv.name_space
pairs = [(elem.type, elem.id or elem.name) for elem in rv.pathelement]
return Key(pairs=pairs, app=app, namespace=namespace)
elif v.HasField('pointvalue'):
pv = v.pointvalue
return GeoPt(pv.x, pv.y)
elif v.HasField('uservalue'):
return _unpack_user(v)
else:
return None