Source code for gclouddatastore.helpers
from datetime import datetime
import pytz
from gclouddatastore.key import Key
[docs]def get_protobuf_attribute_and_value(val):
"""Given a value, return the protobuf attribute name and proper value."""
if isinstance(val, datetime):
name, value = 'timestamp_microseconds', time.mktime(val.timetuple())
elif isinstance(val, Key):
name, value = 'key', val.to_protobuf()
elif isinstance(val, bool):
name, value = 'boolean', val
elif isinstance(val, float):
name, value = 'double', val
elif isinstance(val, (int, long)):
name, value = 'integer', val
elif isinstance(val, basestring):
name, value = 'string', val
return name + '_value', value
[docs]def get_value_from_protobuf(pb):
"""Given a protobuf for a Property, get the value we care about."""
if pb.value.HasField('timestamp_microseconds_value'):
timestamp = pb.value.timestamp_microseconds_value / 1e6
return datetime.fromtimestamp(timestamp).replace(tzinfo=pytz.utc)
elif pb.value.HasField('key_value'):
return Key.from_protobuf(pb.value.key_value)
elif pb.value.HasField('boolean_value'):
return pb.value.boolean_value
elif pb.value.HasField('double_value'):
return pb.value.double_value
elif pb.value.HasField('integer_value'):
return pb.value.integer_value
elif pb.value.HasField('string_value'):
return pb.value.string_value
else:
# TODO(jjg): Should we raise a ValueError here?
return None