def test_set_explicit(self): from gcloud.datastore import _implicit_environ self.assertEqual(_implicit_environ.get_default_connection(), None) fake_cnxn = object() self._callFUT(connection=fake_cnxn) self.assertEqual(_implicit_environ.get_default_connection(), fake_cnxn)
def test_set_implicit(self): from gcloud._testing import _Monkey from gcloud.datastore import _implicit_environ self.assertEqual(_implicit_environ.get_default_connection(), None) fake_cnxn = object() with _Monkey(_implicit_environ, get_connection=lambda: fake_cnxn): self._callFUT() self.assertEqual(_implicit_environ.get_default_connection(), fake_cnxn)
def test_no_dataset_id(self): from gcloud.datastore import _implicit_environ from gcloud.datastore.test_batch import _Connection from gcloud.datastore.test_batch import _Entity from gcloud.datastore.test_batch import _Key # Build basic mocks needed to delete. _DATASET = 'DATASET' connection = _Connection() entity = _Entity(foo=u'bar') entity.key = _Key(_DATASET) self.assertEqual(_implicit_environ.get_default_connection(), None) result = self._callFUT([entity], connection=connection) self.assertEqual(result, None) self.assertEqual(len(connection._committed), 1) dataset_id, mutation, transaction_id = connection._committed[0] self.assertEqual(dataset_id, _DATASET) upserts = list(mutation.upsert) self.assertEqual(len(upserts), 1) self.assertEqual(upserts[0].key, entity.key.to_protobuf()) properties = list(upserts[0].property) self.assertEqual(properties[0].name, 'foo') self.assertEqual(properties[0].value.string_value, u'bar') self.assertTrue(transaction_id is None)
def test_no_dataset_id(self): from gcloud.datastore import _implicit_environ from gcloud.datastore.test_batch import _Connection from gcloud.datastore.test_batch import _Entity from gcloud.datastore.test_batch import _Key # Build basic mocks needed to delete. _DATASET = 'DATASET' connection = _Connection() entity = _Entity(foo=u'bar') entity.key = _Key(_DATASET) self.assertEqual(_implicit_environ.get_default_connection(), None) result = self._callFUT([entity], connection=connection) self.assertEqual(result, None) self.assertEqual(len(connection._committed), 1) dataset_id, mutation = connection._committed[0] self.assertEqual(dataset_id, _DATASET) upserts = list(mutation.upsert) self.assertEqual(len(upserts), 1) self.assertEqual(upserts[0].key, entity.key.to_protobuf()) properties = list(upserts[0].property) self.assertEqual(properties[0].name, 'foo') self.assertEqual(properties[0].value.string_value, u'bar')
def test_no_connection(self): from gcloud.datastore import _implicit_environ from gcloud.datastore.test_batch import _Key # Build basic mocks needed to delete. _DATASET = 'DATASET' key = _Key(_DATASET) self.assertEqual(_implicit_environ.get_default_connection(), None) with self.assertRaises(EnvironmentError): self._callFUT([key], dataset_id=_DATASET)
def __init__(self, dataset_id=None, connection=None): self._connection = (connection or _implicit_environ.get_default_connection()) self._dataset_id = (dataset_id or _implicit_environ.get_default_dataset_id()) if self._connection is None or self._dataset_id is None: raise ValueError('A batch must have a connection and ' 'a dataset ID set.') self._mutation = datastore_pb.Mutation() self._auto_id_entities = []
def fetch(self, limit=None, offset=0, start_cursor=None, end_cursor=None, connection=None): """Execute the Query; return an iterator for the matching entities. For example:: >>> from gcloud import datastore >>> query = datastore.Query('Person') >>> query.add_filter('name', '=', 'Sally') >>> list(query.fetch()) [<Entity object>, <Entity object>, ...] >>> list(query.fetch(1)) [<Entity object>] :type limit: integer or None :param limit: An optional limit passed through to the iterator. :type offset: integer :param offset: An optional offset passed through to the iterator. :type start_cursor: bytes :param start_cursor: An optional cursor passed through to the iterator. :type end_cursor: bytes :param end_cursor: An optional cursor passed through to the iterator. :type connection: :class:`gcloud.datastore.connection.Connection` :param connection: An optional cursor passed through to the iterator. If not supplied, uses the implicit default. :rtype: :class:`Iterator` :raises: ValueError if ``connection`` is not passed and no implicit default has been set. """ if connection is None: connection = _implicit_environ.get_default_connection() if connection is None: raise ValueError("No connection passed, and no default set") return Iterator(self, connection, limit, offset, start_cursor, end_cursor)
def test_no_dataset_id(self): from gcloud.datastore import _implicit_environ from gcloud.datastore.test_batch import _Connection from gcloud.datastore.test_batch import _Key # Build basic mocks needed to delete. _DATASET = 'DATASET' connection = _Connection() key = _Key(_DATASET) self.assertEqual(_implicit_environ.get_default_connection(), None) result = self._callFUT([key], connection=connection) self.assertEqual(result, None) self.assertEqual(len(connection._committed), 1) dataset_id, mutation = connection._committed[0] self.assertEqual(dataset_id, _DATASET) self.assertEqual(list(mutation.delete), [key.to_protobuf()])
def fetch(self, limit=None, offset=0, start_cursor=None, end_cursor=None, connection=None): """Execute the Query; return an iterator for the matching entities. For example:: >>> from gcloud import datastore >>> query = datastore.Query('Person') >>> query.add_filter('name', '=', 'Sally') >>> list(query.fetch()) [<Entity object>, <Entity object>, ...] >>> list(query.fetch(1)) [<Entity object>] :type limit: integer or None :param limit: An optional limit passed through to the iterator. :type offset: integer :param offset: An optional offset passed through to the iterator. :type start_cursor: bytes :param start_cursor: An optional cursor passed through to the iterator. :type end_cursor: bytes :param end_cursor: An optional cursor passed through to the iterator. :type connection: :class:`gcloud.datastore.connection.Connection` :param connection: An optional cursor passed through to the iterator. If not supplied, uses the implicit default. :rtype: :class:`Iterator` :raises: ValueError if ``connection`` is not passed and no implicit default has been set. """ if connection is None: connection = _implicit_environ.get_default_connection() if connection is None: raise ValueError("No connection passed, and no default set") return Iterator( self, connection, limit, offset, start_cursor, end_cursor)
def _require_connection(connection=None): """Infer a connection from the environment, if not passed explicitly. :type connection: :class:`gcloud.datastore.connection.Connection` :param connection: Optional. :rtype: :class:`gcloud.datastore.connection.Connection` :returns: A connection based on the current environment. :raises: :class:`EnvironmentError` if ``connection`` is ``None``, and cannot be inferred from the environment. """ if connection is None: top = Batch.current() if top is not None: connection = top.connection else: connection = _implicit_environ.get_default_connection() if connection is None: raise EnvironmentError('Connection could not be inferred.') return connection
def __init__(self, dataset_id=None, connection=None): """Construct a batch. :type dataset_id: :class:`str`. :param dataset_id: The ID of the dataset. :type connection: :class:`gcloud.datastore.connection.Connection` :param connection: The connection used to connect to datastore. :raises: :class:`ValueError` if either a connection or dataset ID are not set. """ self._connection = (connection or _implicit_environ.get_default_connection()) self._dataset_id = (dataset_id or _implicit_environ.get_default_dataset_id()) if self._connection is None or self._dataset_id is None: raise ValueError('A batch must have a connection and ' 'a dataset ID set.') self._mutation = datastore_pb.Mutation() self._auto_id_entities = []
def test_no_keys(self): from gcloud.datastore import _implicit_environ self.assertEqual(_implicit_environ.get_default_connection(), None) result = self._callFUT([]) self.assertEqual(result, None)
def _callFUT(self): from gcloud.datastore._implicit_environ import get_default_connection return get_default_connection()