2323import six
2424
2525from gcloud ._helpers import _datetime_from_microseconds
26+ from gcloud ._helpers import _has_field
2627from gcloud ._helpers import _microseconds_from_datetime
2728from gcloud .datastore import _entity_pb2
2829from gcloud .datastore .entity import Entity
@@ -109,7 +110,7 @@ def _get_meaning(value_pb, is_list=False):
109110 if all_meanings :
110111 raise ValueError ('Different meanings set on values '
111112 'within a list_value' )
112- elif value_pb . HasField ( 'meaning' ):
113+ elif _has_field ( value_pb , 'meaning' ):
113114 meaning = value_pb .meaning
114115
115116 return meaning
@@ -128,7 +129,7 @@ def entity_from_protobuf(pb):
128129 :returns: The entity derived from the protobuf.
129130 """
130131 key = None
131- if pb . HasField ( 'key' ):
132+ if _has_field ( pb , 'key' ):
132133 key = key_from_protobuf (pb .key )
133134
134135 entity_props = {}
@@ -232,18 +233,18 @@ def key_from_protobuf(pb):
232233 path_args = []
233234 for element in pb .path_element :
234235 path_args .append (element .kind )
235- if element . HasField ( 'id' ):
236+ if _has_field ( element , 'id' ):
236237 path_args .append (element .id )
237238 # This is safe: we expect proto objects returned will only have
238239 # one of `name` or `id` set.
239- if element . HasField ( 'name' ):
240+ if _has_field ( element , 'name' ):
240241 path_args .append (element .name )
241242
242243 dataset_id = None
243- if pb .partition_id . HasField ( 'dataset_id' ):
244+ if _has_field ( pb .partition_id , 'dataset_id' ):
244245 dataset_id = pb .partition_id .dataset_id
245246 namespace = None
246- if pb .partition_id . HasField ( 'namespace' ):
247+ if _has_field ( pb .partition_id , 'namespace' ):
247248 namespace = pb .partition_id .namespace
248249
249250 return Key (* path_args , namespace = namespace , dataset_id = dataset_id )
@@ -323,29 +324,29 @@ def _get_value_from_value_pb(value_pb):
323324 :returns: The value provided by the Protobuf.
324325 """
325326 result = None
326- if value_pb . HasField ( 'timestamp_microseconds_value' ):
327+ if _has_field ( value_pb , 'timestamp_microseconds_value' ):
327328 microseconds = value_pb .timestamp_microseconds_value
328329 result = _datetime_from_microseconds (microseconds )
329330
330- elif value_pb . HasField ( 'key_value' ):
331+ elif _has_field ( value_pb , 'key_value' ):
331332 result = key_from_protobuf (value_pb .key_value )
332333
333- elif value_pb . HasField ( 'boolean_value' ):
334+ elif _has_field ( value_pb , 'boolean_value' ):
334335 result = value_pb .boolean_value
335336
336- elif value_pb . HasField ( 'double_value' ):
337+ elif _has_field ( value_pb , 'double_value' ):
337338 result = value_pb .double_value
338339
339- elif value_pb . HasField ( 'integer_value' ):
340+ elif _has_field ( value_pb , 'integer_value' ):
340341 result = value_pb .integer_value
341342
342- elif value_pb . HasField ( 'string_value' ):
343+ elif _has_field ( value_pb , 'string_value' ):
343344 result = value_pb .string_value
344345
345- elif value_pb . HasField ( 'blob_value' ):
346+ elif _has_field ( value_pb , 'blob_value' ):
346347 result = value_pb .blob_value
347348
348- elif value_pb . HasField ( 'entity_value' ):
349+ elif _has_field ( value_pb , 'entity_value' ):
349350 result = entity_from_protobuf (value_pb .entity_value )
350351
351352 elif value_pb .list_value :
@@ -401,7 +402,7 @@ def _prepare_key_for_request(key_pb):
401402 :returns: A key which will be added to a request. It will be the
402403 original if nothing needs to be changed.
403404 """
404- if key_pb .partition_id . HasField ( 'dataset_id' ):
405+ if _has_field ( key_pb .partition_id , 'dataset_id' ):
405406 # We remove the dataset_id from the protobuf. This is because
406407 # the backend fails a request if the key contains un-prefixed
407408 # dataset ID. The backend fails because requests to
0 commit comments