in src/google/appengine/datastore/datastore_pbs.py [0:0]
def v4_to_v3_property(self, property_name, is_multi, is_projection,
v4_value, v3_property):
"""Converts info from a v4 Property to a v3 Property.
`v4_value` must not have a `list_value`.
Args:
property_name: The name of the property.
is_multi: Whether the property contains multiple values.
is_projection: Whether the property is projected.
v4_value: An `entity_v4_pb2.Value`.
v3_property: An `entity_pb2.Property` to populate.
"""
assert not v4_value.list_value, 'v4 list_value not convertable to v3'
v3_property.Clear()
v3_property.name = property_name
if v4_value.HasField('meaning') and v4_value.meaning == MEANING_EMPTY_LIST:
v3_property.meaning = MEANING_EMPTY_LIST
v3_property.multiple = False
v3_property.value.Clear()
return
v3_property.multiple = is_multi
self.v4_value_to_v3_property_value(v4_value, v3_property.value)
v4_meaning = None
if v4_value.HasField('meaning'):
v4_meaning = v4_value.meaning
if v4_value.HasField('timestamp_microseconds_value'):
v3_property.meaning = entity_pb2.Property.GD_WHEN
elif v4_value.HasField('blob_key_value'):
v3_property.meaning = entity_pb2.Property.BLOBKEY
elif v4_value.HasField('blob_value'):
if v4_meaning == MEANING_ZLIB:
v3_property.meaning_uri = URI_MEANING_ZLIB
if v4_meaning == entity_pb2.Property.BYTESTRING:
if v4_value.indexed:
pass
else:
if v4_value.indexed:
v3_property.meaning = entity_pb2.Property.BYTESTRING
else:
v3_property.meaning = entity_pb2.Property.BLOB
v4_meaning = None
elif v4_value.HasField('entity_value'):
if v4_meaning != MEANING_GEORSS_POINT:
if (v4_meaning != MEANING_PREDEFINED_ENTITY_POINT
and v4_meaning != MEANING_PREDEFINED_ENTITY_USER):
v3_property.meaning = entity_pb2.Property.ENTITY_PROTO
v4_meaning = None
elif v4_value.HasField('geo_point_value'):
v3_property.meaning = MEANING_GEORSS_POINT
else:
pass
if v4_meaning is not None:
v3_property.meaning = v4_meaning
if is_projection:
v3_property.meaning = entity_pb2.Property.INDEX_VALUE