def _db_get_value()

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