def put(self, entity_pb): """Add an entity to batch to be stored. Args: entity_pb (datastore_v1.types.Entity): The entity to be stored. Returns: tasklets.Future: Result will be completed datastore key (entity_pb2.Key) for the entity. """ future = tasklets.Future("put({})".format(entity_pb)) self.futures.append(future) mutation = datastore_pb2.Mutation(upsert=entity_pb) self.mutations.append(mutation) # If we have an incomplete key, add the incomplete key to a batch for a # call to AllocateIds if not _complete(entity_pb.key): # If this is the first key in the batch, we also need to # schedule our idle handler to get called if not self.incomplete_mutations: _eventloop.add_idle(self.idle_callback) self.incomplete_mutations.append(mutation) self.incomplete_futures.append(future) # Complete keys get passed back None else: future.set_result(None) return future
def _add_delete_key_pb(self): """Adds a new mutation for a key to be deleted. :rtype: :class:`.entity_pb2.Key` :returns: The newly created key protobuf that will be deleted when sent with a commit. """ new_mutation = _datastore_pb2.Mutation() self._mutations.append(new_mutation) return new_mutation.delete
def _add_partial_key_entity_pb(self): """Adds a new mutation for an entity with a partial key. :rtype: :class:`.entity_pb2.Entity` :returns: The newly created entity protobuf that will be updated and sent with a commit. """ new_mutation = _datastore_pb2.Mutation() self._mutations.append(new_mutation) return new_mutation.insert
def _add_complete_key_entity_pb(self): """Adds a new mutation for an entity with a completed key. :rtype: :class:`.entity_pb2.Entity` :returns: The newly created entity protobuf that will be updated and sent with a commit. """ # We use ``upsert`` for entities with completed keys, rather than # ``insert`` or ``update``, in order not to create race conditions # based on prior existence / removal of the entity. new_mutation = _datastore_pb2.Mutation() self._mutations.append(new_mutation) return new_mutation.upsert
def delete(self, key): """Add a key to batch to be deleted. Args: entity_pb (datastore.Key): The entity's key to be deleted. Returns: tasklets.Future: Result will be :data:`None`, always. """ key_pb = key.to_protobuf() future = tasklets.Future(info="delete({})".format(key_pb)) mutation = datastore_pb2.Mutation(delete=key_pb) self.mutations.append(mutation) self.futures.append(future) return future
def put(self, entity_pb): """Add an entity to batch to be stored. Args: entity_pb (datastore_v1.types.Entity): The entity to be stored. Returns: tasklets.Future: Result will be completed datastore key (entity_pb2.Key) for the entity. """ future = tasklets.Future(info="put({})".format(entity_pb)) mutation = datastore_pb2.Mutation(upsert=entity_pb) self.mutations.append(mutation) self.futures.append(future) return future
def Mutation(): path = [entity_pb2.Key.PathElement(kind="SomeKind")] return datastore_pb2.Mutation( upsert=entity_pb2.Entity(key=entity_pb2.Key(path=path)) )