def v3_property_to_v1_value()

in src/google/appengine/datastore/datastore_pbs.py [0:0]


  def v3_property_to_v1_value(self, v3_property, indexed, v1_value):
    """Converts a v3 Property to a v1 Value.

    Args:
      v3_property: An `entity_pb2.Property`.
      indexed: Whether the v3 property is indexed.
      v1_value: An `googledatastore.Value` to populate.
    """
    v1_value.Clear()
    v3_property_value = v3_property.value
    v3_meaning = v3_property.meaning
    v3_uri_meaning = None
    if v3_property.meaning_uri:
      v3_uri_meaning = v3_property.meaning_uri

    if not self.__is_v3_property_value_union_valid(v3_property_value):


      v3_meaning = None
      v3_uri_meaning = None
    elif v3_meaning == entity_pb2.Property.NO_MEANING:
      v3_meaning = None
    elif not self.__is_v3_property_value_meaning_valid(v3_property_value,
                                                       v3_meaning):

      v3_meaning = None

    is_zlib_value = False
    if v3_uri_meaning:
      if v3_uri_meaning == URI_MEANING_ZLIB:
        if v3_property_value.HasField('stringValue'):
          is_zlib_value = True
          if v3_meaning != entity_pb2.Property.BLOB:

            v3_meaning = entity_pb2.Property.BLOB
        else:
          pass
      else:
        pass


    if v3_property.meaning == entity_pb2.Property.EMPTY_LIST:
      v1_value.array_value.values.extend([])
      v3_meaning = None
    elif v3_property_value.HasField('booleanValue'):
      v1_value.boolean_value = v3_property_value.booleanValue
    elif v3_property_value.HasField('int64Value'):
      if (v3_meaning == entity_pb2.Property.GD_WHEN and
          is_in_rfc_3339_bounds(v3_property_value.int64Value)):
        googledatastore.helper.micros_to_timestamp(v3_property_value.int64Value,
                                                   v1_value.timestamp_value)
        v3_meaning = None
      else:
        v1_value.integer_value = v3_property_value.int64Value
    elif v3_property_value.HasField('doubleValue'):
      v1_value.double_value = v3_property_value.doubleValue
    elif v3_property_value.HasField('referencevalue'):
      v3_ref = entity_pb2.Reference()
      self.__v3_reference_value_to_v3_reference(
          v3_property_value.referencevalue, v3_ref)
      self.v3_to_v1_key(v3_ref, v1_value.key_value)
    elif v3_property_value.HasField('stringValue'):
      if v3_meaning == entity_pb2.Property.ENTITY_PROTO:
        serialized_entity_v3 = v3_property_value.stringValue
        v3_entity = entity_pb2.EntityProto()
        v3_entity.ParseFromString(serialized_entity_v3)
        self.v3_to_v1_entity(v3_entity, v1_value.entity_value)
        v3_meaning = None
      elif (v3_meaning == entity_pb2.Property.BLOB or
            v3_meaning == entity_pb2.Property.BYTESTRING):
        v1_value.blob_value = v3_property_value.stringValue

        if indexed or v3_meaning == entity_pb2.Property.BLOB:
          v3_meaning = None
      else:
        string_value = v3_property_value.stringValue
        if is_valid_utf8(string_value):
          v1_value.string_value = string_value
        else:

          v1_value.blob_value = string_value

          if v3_meaning != entity_pb2.Property.INDEX_VALUE:
            v3_meaning = None


    elif v3_property_value.HasField('pointvalue'):
      if v3_meaning != MEANING_GEORSS_POINT:
        v1_value.meaning = MEANING_POINT_WITHOUT_V3_MEANING

      point_value = v3_property_value.pointvalue
      v1_value.geo_point_value.latitude = point_value.x
      v1_value.geo_point_value.longitude = point_value.y
      v3_meaning = None
    elif v3_property_value.HasField('uservalue'):
      self.v3_user_value_to_v1_entity(v3_property_value.uservalue,
                                      v1_value.entity_value)
      v1_value.meaning = MEANING_PREDEFINED_ENTITY_USER
      v3_meaning = None
    else:

      v1_value.null_value = googledatastore.NULL_VALUE

    if is_zlib_value:
      v1_value.meaning = MEANING_ZLIB
    elif v3_meaning:
      v1_value.meaning = v3_meaning


    if indexed == v1_value.exclude_from_indexes:
      v1_value.exclude_from_indexes = not indexed