def delete(self, keys): request = datastore_pb.DeleteRequest() for key in keys: key_pb = request.add_key() key_pb.MergeFrom(key._ToPb()) yield self._make_request('Delete', request.Encode())
def __delete_v1_key(self, v1_key, v1_txn): """Deletes an entity from a v1 key in a transaction.""" v3_key = entity_pb.Reference() self.__entity_converter.v1_to_v3_reference(v1_key, v3_key) v3_txn = datastore_pb.Transaction() self.__service_converter.v1_to_v3_txn(v1_txn, v3_txn) v3_delete_req = datastore_pb.DeleteRequest() v3_delete_req.mutable_transaction().CopyFrom(v3_txn) v3_delete_req.add_key().CopyFrom(v3_key) v3_delete_resp = datastore_pb.DeleteResponse() self.__make_v3_call('Delete', v3_delete_req, v3_delete_resp)
def delete_request(self, app_id, http_request_data): """ High level function for doing deletes. Args: app_id: Name of the application. http_request_data: Stores the protocol buffer request from the AppServer. Returns: An encoded delete response. """ global datastore_access delreq_pb = datastore_pb.DeleteRequest( http_request_data ) delresp_pb = api_base_pb.VoidProto() if READ_ONLY: logger.warning( 'Unable to delete in read-only mode: {}'.format(delreq_pb)) raise gen.Return( ('', datastore_pb.Error.CAPABILITY_DISABLED, 'Datastore is in read-only mode.')) try: yield datastore_access.dynamic_delete(app_id, delreq_pb) raise gen.Return((delresp_pb.Encode(), 0, '')) except dbconstants.InternalError as error: raise gen.Return(('', datastore_pb.Error.INTERNAL_ERROR, str(error))) except dbconstants.Timeout as error: raise gen.Return(('', datastore_pb.Error.TIMEOUT, str(error))) except dbconstants.BadRequest as error: raise gen.Return(('', datastore_pb.Error.BAD_REQUEST, str(error))) except zktransaction.ZKBadRequest as error: logger.exception('Illegal argument during {}'.format(delreq_pb)) raise gen.Return(('', datastore_pb.Error.BAD_REQUEST, str(error))) except zktransaction.ZKInternalException: logger.exception('ZKInternalException during {}'.format(delreq_pb)) raise gen.Return( ('', datastore_pb.Error.INTERNAL_ERROR, 'Internal error with ZooKeeper connection.')) except zktransaction.ZKTransactionException: logger.exception('Concurrent transaction during {}'.format(delreq_pb)) raise gen.Return( ('', datastore_pb.Error.CONCURRENT_TRANSACTION, 'Concurrent transaction exception on delete.')) except dbconstants.AppScaleDBConnectionError: logger.exception('DB connection error during delete') raise gen.Return( ('', datastore_pb.Error.INTERNAL_ERROR, 'Datastore connection error on delete.'))
def _delete_entities(ds_access, entity_keys): """ Deletes a list of datastore entities. Args: ds_access: A DatastoreDistributed client. entity_keys: A list of datastore.Key objects. Raises: ApplicationError if unable to delete entities. """ request = datastore_pb.DeleteRequest() for entity_key in entity_keys: key = request.add_key() key.CopyFrom(entity_key._ToPb()) response = datastore_pb.DeleteResponse() ds_access._Dynamic_Delete(request, response)
def __delete_v3_reference(self, v3_key, v3_txn): """Deletes a v3 entity. Args: v3_key: an entity_pb.Reference v3_txn: a datastore_pb.Transaction or None Returns: the number of index writes that occurred """ v3_delete_req = datastore_pb.DeleteRequest() if v3_txn: v3_delete_req.mutable_transaction().CopyFrom(v3_txn) v3_delete_req.add_key().CopyFrom(v3_key) v3_delete_resp = datastore_pb.DeleteResponse() self.__make_v3_call('Delete', v3_delete_req, v3_delete_resp) return v3_delete_resp.cost().index_writes()
def __apply_v4_deprecated_mutation(self, v4_deprecated_mutation, v4_txn): """Applies a v4 DeprecatedMutation. Args: v4_deprecated_mutation: a datastore_v4_pb.DeprecatedMutation v4_txn: an optional v4 transaction handle or None Returns: a datastore_v4_pb.DeprecatedMutationResult """ index_writes = 0 v3_txn = None if v4_txn: v3_txn = datastore_pb.Transaction() self.__service_converter.v4_to_v3_txn(v4_txn, v3_txn) for v4_entity in v4_deprecated_mutation.insert_list(): v3_entity = entity_pb.EntityProto() self.__entity_converter.v4_to_v3_entity(v4_entity, v3_entity) index_writes += self.__insert_v3_entity(v3_entity, v3_txn) for v4_entity in v4_deprecated_mutation.update_list(): v3_entity = entity_pb.EntityProto() self.__entity_converter.v4_to_v3_entity(v4_entity, v3_entity) index_writes += self.__update_v3_entity(v3_entity, v3_txn) v3_insert_auto_req = datastore_pb.PutRequest() if v3_txn: v3_insert_auto_req.mutable_transaction().CopyFrom(v3_txn) for v4_entity in v4_deprecated_mutation.insert_auto_id_list(): v3_entity = entity_pb.EntityProto() self.__entity_converter.v4_to_v3_entity(v4_entity, v3_entity) v3_insert_auto_req.entity_list().append(v3_entity) v3_insert_auto_id_resp = datastore_pb.PutResponse() self.__make_v3_call('Put', v3_insert_auto_req, v3_insert_auto_id_resp) index_writes += v3_insert_auto_id_resp.cost().index_writes() v3_upsert_req = datastore_pb.PutRequest() if v3_txn: v3_upsert_req.mutable_transaction().CopyFrom(v3_txn) for v4_entity in v4_deprecated_mutation.upsert_list(): v3_entity = entity_pb.EntityProto() self.__entity_converter.v4_to_v3_entity(v4_entity, v3_entity) v3_upsert_req.entity_list().append(v3_entity) v3_upsert_resp = datastore_pb.PutResponse() self.__make_v3_call('Put', v3_upsert_req, v3_upsert_resp) index_writes += v3_upsert_resp.cost().index_writes() v3_delete_req = datastore_pb.DeleteRequest() if v3_txn: v3_delete_req.mutable_transaction().CopyFrom(v3_txn) for v4_key in v4_deprecated_mutation.delete_list(): self.__entity_converter.v4_to_v3_reference(v4_key, v3_delete_req.add_key()) v3_delete_resp = datastore_pb.DeleteResponse() self.__make_v3_call('Delete', v3_delete_req, v3_delete_resp) index_writes += v3_delete_resp.cost().index_writes() v4_deprecated_mutation_result = datastore_v4_pb.DeprecatedMutationResult( ) for v3_ref in v3_insert_auto_id_resp.key_list(): self.__entity_converter.v3_to_v4_key( v3_ref, v4_deprecated_mutation_result.add_insert_auto_id_key()) v4_deprecated_mutation_result.set_index_updates(index_writes) return v4_deprecated_mutation_result