Skip to content

Commit 88f7c83

Browse files
committed
Merge pull request #934 from dhermes/add-name-space-to-dataset
Adding namespace to dataset class.
2 parents be52e91 + 95a6439 commit 88f7c83

File tree

2 files changed

+107
-9
lines changed

2 files changed

+107
-9
lines changed

gcloud/datastore/dataset.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,18 @@ class Dataset(object):
3131
:type dataset_id: string
3232
:param dataset_id: (required) dataset ID to pass to proxied API methods.
3333
34+
:type namespace: string
35+
:param namespace: (optional) namespace to pass to proxied API methods.
36+
3437
:type connection: :class:`gcloud.datastore.connection.Connection`, or None
3538
:param connection: (optional) connection to pass to proxied API methods
3639
"""
3740

38-
def __init__(self, dataset_id, connection=None):
41+
def __init__(self, dataset_id, namespace=None, connection=None):
3942
if dataset_id is None:
4043
raise ValueError('dataset_id required')
4144
self.dataset_id = dataset_id
45+
self.namespace = namespace
4246
self.connection = connection
4347

4448
def get(self, key, missing=None, deferred=None):
@@ -98,6 +102,8 @@ def key(self, *path_args, **kwargs):
98102
if 'dataset_id' in kwargs:
99103
raise TypeError('Cannot pass dataset_id')
100104
kwargs['dataset_id'] = self.dataset_id
105+
if 'namespace' not in kwargs:
106+
kwargs['namespace'] = self.namespace
101107
return Key(*path_args, **kwargs)
102108

103109
def batch(self):
@@ -123,4 +129,6 @@ def query(self, **kwargs):
123129
if 'dataset_id' in kwargs:
124130
raise TypeError('Cannot pass dataset_id')
125131
kwargs['dataset_id'] = self.dataset_id
132+
if 'namespace' not in kwargs:
133+
kwargs['namespace'] = self.namespace
126134
return Query(**kwargs)

gcloud/datastore/test_dataset.py

Lines changed: 98 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ def _getTargetClass(self):
2323
from gcloud.datastore.dataset import Dataset
2424
return Dataset
2525

26-
def _makeOne(self, dataset_id=DATASET_ID, connection=None):
27-
return self._getTargetClass()(dataset_id, connection)
26+
def _makeOne(self, dataset_id=DATASET_ID, namespace=None, connection=None):
27+
return self._getTargetClass()(dataset_id, namespace=namespace,
28+
connection=connection)
2829

2930
def test_ctor_w_dataset_id_None(self):
3031
self.assertRaises(ValueError, self._makeOne, None)
@@ -33,11 +34,13 @@ def test_ctor_w_dataset_id_no_connection(self):
3334
dataset = self._makeOne()
3435
self.assertEqual(dataset.dataset_id, self.DATASET_ID)
3536

36-
def test_ctor_w_dataset_id_w_connection(self):
37+
def test_ctor_w_explicit_inputs(self):
3738
conn = object()
38-
dataset = self._makeOne(connection=conn)
39+
namespace = object()
40+
dataset = self._makeOne(namespace=namespace, connection=conn)
3941
self.assertEqual(dataset.dataset_id, self.DATASET_ID)
4042
self.assertTrue(dataset.connection is conn)
43+
self.assertTrue(dataset.namespace is namespace)
4144

4245
def test_get_defaults(self):
4346
from gcloud.datastore import dataset as MUT
@@ -294,7 +297,48 @@ def test_key_wo_dataset_id(self):
294297

295298
self.assertTrue(isinstance(key, _Dummy))
296299
self.assertEqual(key.args, (KIND, ID))
297-
self.assertEqual(key.kwargs, {'dataset_id': self.DATASET_ID})
300+
expected_kwargs = {
301+
'dataset_id': self.DATASET_ID,
302+
'namespace': None,
303+
}
304+
self.assertEqual(key.kwargs, expected_kwargs)
305+
306+
def test_key_w_namespace(self):
307+
from gcloud.datastore import dataset as MUT
308+
from gcloud._testing import _Monkey
309+
310+
KIND = 'KIND'
311+
ID = 1234
312+
NAMESPACE = object()
313+
dataset = self._makeOne(namespace=NAMESPACE)
314+
with _Monkey(MUT, Key=_Dummy):
315+
key = dataset.key(KIND, ID)
316+
317+
self.assertTrue(isinstance(key, _Dummy))
318+
expected_kwargs = {
319+
'dataset_id': self.DATASET_ID,
320+
'namespace': NAMESPACE,
321+
}
322+
self.assertEqual(key.kwargs, expected_kwargs)
323+
324+
def test_key_w_namespace_collision(self):
325+
from gcloud.datastore import dataset as MUT
326+
from gcloud._testing import _Monkey
327+
328+
KIND = 'KIND'
329+
ID = 1234
330+
NAMESPACE1 = object()
331+
NAMESPACE2 = object()
332+
dataset = self._makeOne(namespace=NAMESPACE1)
333+
with _Monkey(MUT, Key=_Dummy):
334+
key = dataset.key(KIND, ID, namespace=NAMESPACE2)
335+
336+
self.assertTrue(isinstance(key, _Dummy))
337+
expected_kwargs = {
338+
'dataset_id': self.DATASET_ID,
339+
'namespace': NAMESPACE2,
340+
}
341+
self.assertEqual(key.kwargs, expected_kwargs)
298342

299343
def test_batch_wo_connection(self):
300344
from gcloud.datastore import dataset as MUT
@@ -347,8 +391,11 @@ def test_transaction_w_connection(self):
347391

348392
self.assertTrue(isinstance(xact, _Dummy))
349393
self.assertEqual(xact.args, ())
350-
self.assertEqual(xact.kwargs,
351-
{'dataset_id': self.DATASET_ID, 'connection': conn})
394+
expected_kwargs = {
395+
'dataset_id': self.DATASET_ID,
396+
'connection': conn,
397+
}
398+
self.assertEqual(xact.kwargs, expected_kwargs)
352399

353400
def test_query_w_dataset_id(self):
354401
KIND = 'KIND'
@@ -366,7 +413,11 @@ def test_query_w_defaults(self):
366413

367414
self.assertTrue(isinstance(query, _Dummy))
368415
self.assertEqual(query.args, ())
369-
self.assertEqual(query.kwargs, {'dataset_id': self.DATASET_ID})
416+
expected_kwargs = {
417+
'dataset_id': self.DATASET_ID,
418+
'namespace': None,
419+
}
420+
self.assertEqual(query.kwargs, expected_kwargs)
370421

371422
def test_query_explicit(self):
372423
from gcloud.datastore import dataset as MUT
@@ -405,6 +456,45 @@ def test_query_explicit(self):
405456
self.assertEqual(query.args, ())
406457
self.assertEqual(query.kwargs, kwargs)
407458

459+
def test_query_w_namespace(self):
460+
from gcloud.datastore import dataset as MUT
461+
from gcloud._testing import _Monkey
462+
463+
KIND = 'KIND'
464+
NAMESPACE = object()
465+
dataset = self._makeOne(namespace=NAMESPACE)
466+
with _Monkey(MUT, Query=_Dummy):
467+
query = dataset.query(kind=KIND)
468+
469+
self.assertTrue(isinstance(query, _Dummy))
470+
self.assertEqual(query.args, ())
471+
expected_kwargs = {
472+
'dataset_id': self.DATASET_ID,
473+
'namespace': NAMESPACE,
474+
'kind': KIND,
475+
}
476+
self.assertEqual(query.kwargs, expected_kwargs)
477+
478+
def test_query_w_namespace_collision(self):
479+
from gcloud.datastore import dataset as MUT
480+
from gcloud._testing import _Monkey
481+
482+
KIND = 'KIND'
483+
NAMESPACE1 = object()
484+
NAMESPACE2 = object()
485+
dataset = self._makeOne(namespace=NAMESPACE1)
486+
with _Monkey(MUT, Query=_Dummy):
487+
query = dataset.query(kind=KIND, namespace=NAMESPACE2)
488+
489+
self.assertTrue(isinstance(query, _Dummy))
490+
self.assertEqual(query.args, ())
491+
expected_kwargs = {
492+
'dataset_id': self.DATASET_ID,
493+
'namespace': NAMESPACE2,
494+
'kind': KIND,
495+
}
496+
self.assertEqual(query.kwargs, expected_kwargs)
497+
408498

409499
class _Dummy(object):
410500

0 commit comments

Comments
 (0)