1919from gcloud import connection
2020from gcloud .exceptions import make_exception
2121from gcloud .datastore import _datastore_v1_pb2 as datastore_pb
22- from gcloud .datastore import helpers
2322
2423
2524_GCD_HOST_ENV_VAR_NAME = 'DATASTORE_HOST'
@@ -183,7 +182,7 @@ def lookup(self, dataset_id, key_pbs,
183182 """
184183 lookup_request = datastore_pb .LookupRequest ()
185184 _set_read_options (lookup_request , eventual , transaction_id )
186- helpers . _add_keys_to_request (lookup_request .key , key_pbs )
185+ _add_keys_to_request (lookup_request .key , key_pbs )
187186
188187 lookup_response = self ._rpc (dataset_id , 'lookup' , lookup_request ,
189188 datastore_pb .LookupResponse )
@@ -363,7 +362,7 @@ def allocate_ids(self, dataset_id, key_pbs):
363362 :returns: An equal number of keys, with IDs filled in by the backend.
364363 """
365364 request = datastore_pb .AllocateIdsRequest ()
366- helpers . _add_keys_to_request (request .key , key_pbs )
365+ _add_keys_to_request (request .key , key_pbs )
367366 # Nothing to do with this response, so just execute the method.
368367 response = self ._rpc (dataset_id , 'allocateIds' , request ,
369368 datastore_pb .AllocateIdsResponse )
@@ -386,3 +385,39 @@ def _set_read_options(request, eventual, transaction_id):
386385 opts .read_consistency = datastore_pb .ReadOptions .EVENTUAL
387386 elif transaction_id :
388387 opts .transaction = transaction_id
388+
389+
390+ def _prepare_key_for_request (key_pb ): # pragma: NO COVER copied from helpers
391+ """Add protobuf keys to a request object.
392+
393+ .. note::
394+ This is copied from `helpers` to avoid a cycle:
395+ _implicit_environ -> connection -> helpers -> key -> _implicit_environ
396+
397+ :type key_pb: :class:`gcloud.datastore._datastore_v1_pb2.Key`
398+ :param key_pb: A key to be added to a request.
399+
400+ :rtype: :class:`gcloud.datastore._datastore_v1_pb2.Key`
401+ :returns: A key which will be added to a request. It will be the
402+ original if nothing needs to be changed.
403+ """
404+ if key_pb .partition_id .HasField ('dataset_id' ):
405+ new_key_pb = datastore_pb .Key ()
406+ new_key_pb .CopyFrom (key_pb )
407+ new_key_pb .partition_id .ClearField ('dataset_id' )
408+ key_pb = new_key_pb
409+ return key_pb
410+
411+
412+ def _add_keys_to_request (request_field_pb , key_pbs ):
413+ """Add protobuf keys to a request object.
414+
415+ :type request_field_pb: `RepeatedCompositeFieldContainer`
416+ :param request_field_pb: A repeated proto field that contains keys.
417+
418+ :type key_pbs: list of :class:`gcloud.datastore._datastore_v1_pb2.Key`
419+ :param key_pbs: The keys to add to a request.
420+ """
421+ for key_pb in key_pbs :
422+ key_pb = _prepare_key_for_request (key_pb )
423+ request_field_pb .add ().CopyFrom (key_pb )
0 commit comments