Source code for gcloud.datastore.dataset

[docs]class Dataset(object): """A dataset in the Cloud Datastore. This class acts as an abstraction of a single dataset in the Cloud Datastore. A dataset is analogous to a database in relational database world, and corresponds to a single project using the Cloud Datastore. Typically, you would only have one of these per connection however it didn't seem right to collapse the functionality of a connection and a dataset together into a single class. Datasets (like :class:`gcloud.datastore.query.Query`) are immutable. That is, you cannot change the ID and connection references. If you need to modify the connection or ID, it's recommended to construct a new :class:`Dataset`. :type id: string :param id: The ID of the dataset (your project ID) :type connection: :class:`gcloud.datastore.connection.Connection` :param connection: The connection to use for executing API calls. """ def __init__(self, id, connection=None): self._connection = connection self._id = id
[docs] def connection(self): """Get the current connection. >>> dataset = Dataset('dataset-id', connection=conn) >>> dataset.connection() <Connection object> :rtype: :class:`gcloud.datastore.connection.Connection` :returns: Returns the current connection. """ return self._connection
[docs] def id(self): """Get the current dataset ID. >>> dataset = Dataset('dataset-id', connection=conn) >>> dataset.id() 'dataset-id' :rtype: string :returns: The current dataset ID. """ return self._id
[docs] def query(self, *args, **kwargs): from gcloud.datastore.query import Query kwargs['dataset'] = self return Query(*args, **kwargs)
[docs] def entity(self, kind): from gcloud.datastore.entity import Entity return Entity(dataset=self, kind=kind)
[docs] def transaction(self, *args, **kwargs): from gcloud.datastore.transaction import Transaction kwargs['dataset'] = self return Transaction(*args, **kwargs)
[docs] def get_entity(self, key): """ Retrieves an entity from the dataset, along with all of its attributes. :type key: :class:`gcloud.datastore.key.Key` :param item_name: The name of the item to retrieve. :rtype: :class:`gcloud.datastore.entity.Entity` or ``None`` :return: The requested entity, or ``None`` if there was no match found. """ entities = self.get_entities([key]) if entities: return entities[0]
[docs] def get_entities(self, keys): # This import is here to avoid circular references. from gcloud.datastore.entity import Entity entity_pbs = self.connection().lookup(dataset_id=self.id(), key_pbs=[k.to_protobuf() for k in keys]) entities = [] for entity_pb in entity_pbs: entities.append(Entity.from_protobuf(entity_pb, dataset=self)) return entities