Skip to content

Commit 09b0cb7

Browse files
Make Datastore doctests use a namespace. (#3793)
1 parent d750a13 commit 09b0cb7

File tree

3 files changed

+104
-80
lines changed

3 files changed

+104
-80
lines changed

datastore/google/cloud/datastore/client.py

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -504,56 +504,64 @@ def query(self, **kwargs):
504504
505505
.. testsetup:: query
506506
507-
from google.cloud import datastore
507+
import os
508+
import uuid
508509
509-
client = datastore.Client()
510-
query = client.query(kind='_Doctest')
510+
from google.cloud import datastore
511511
512-
def do_something(entity):
513-
pass
512+
unique = os.getenv('CIRCLE_BUILD_NUM', str(uuid.uuid4())[0:8])
513+
client = datastore.Client(namespace='ns{}'.format(unique))
514+
query = client.query(kind='_Doctest')
515+
516+
def do_something(entity):
517+
pass
514518
515519
.. doctest:: query
516520
517-
>>> query = client.query(kind='MyKind')
518-
>>> query.add_filter('property', '=', 'val')
521+
>>> query = client.query(kind='MyKind')
522+
>>> query.add_filter('property', '=', 'val')
519523
520524
Using the query iterator
521525
522526
.. doctest:: query
523527
524-
>>> query_iter = query.fetch()
525-
>>> for entity in query_iter:
526-
... do_something(entity)
528+
>>> query_iter = query.fetch()
529+
>>> for entity in query_iter:
530+
... do_something(entity)
527531
528532
or manually page through results
529533
530534
.. testsetup:: query-page
531535
532-
from google.cloud import datastore
533-
from tests.system.test_system import Config # system tests
536+
import os
537+
import uuid
538+
539+
from google.cloud import datastore
540+
from tests.system.test_system import Config # system tests
534541
535-
client = datastore.Client()
542+
unique = os.getenv('CIRCLE_BUILD_NUM', str(uuid.uuid4())[0:8])
543+
client = datastore.Client(namespace='ns{}'.format(unique))
536544
537-
key = client.key('_Doctest')
538-
entity1 = datastore.Entity(key=key)
539-
entity1['foo'] = 1337
540-
entity2 = datastore.Entity(key=key)
541-
entity2['foo'] = 42
542-
Config.TO_DELETE.extend([entity1, entity2])
543-
client.put_multi([entity1, entity2])
545+
key = client.key('_Doctest')
546+
entity1 = datastore.Entity(key=key)
547+
entity1['foo'] = 1337
548+
entity2 = datastore.Entity(key=key)
549+
entity2['foo'] = 42
550+
Config.TO_DELETE.extend([entity1, entity2])
551+
client.put_multi([entity1, entity2])
544552
545-
query = client.query(kind='_Doctest')
546-
cursor = None
553+
query = client.query(kind='_Doctest')
554+
cursor = None
547555
548556
.. doctest:: query-page
549557
550-
>>> query_iter = query.fetch(start_cursor=cursor)
551-
>>> pages = query_iter.pages
552-
>>>
553-
>>> first_page = next(pages)
554-
>>> first_page_entities = list(first_page)
555-
>>> query_iter.next_page_token
556-
b'...'
558+
>>> query_iter = query.fetch(start_cursor=cursor)
559+
>>> pages = query_iter.pages
560+
>>>
561+
>>> first_page = next(pages)
562+
>>> first_page_entities = list(first_page)
563+
>>> query_iter.next_page_token
564+
b'...'
557565
558566
:type kwargs: dict
559567
:param kwargs: Parameters for initializing and instance of

datastore/google/cloud/datastore/entity.py

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,29 +42,33 @@ class Entity(dict):
4242
4343
.. testsetup:: entity-ctor
4444
45-
from google.cloud import datastore
46-
from tests.system.test_system import Config # system tests
45+
import os
46+
import uuid
47+
48+
from google.cloud import datastore
49+
from tests.system.test_system import Config # system tests
4750
48-
client = datastore.Client()
49-
key = client.key('EntityKind', 1234, namespace='_Doctest')
50-
entity = datastore.Entity(key=key)
51-
entity['property'] = 'value'
52-
Config.TO_DELETE.append(entity)
51+
unique = os.getenv('CIRCLE_BUILD_NUM', str(uuid.uuid4())[0:8])
52+
client = datastore.Client(namespace='ns{}'.format(unique))
53+
key = client.key('EntityKind', 1234, namespace='_Doctest')
54+
entity = datastore.Entity(key=key)
55+
entity['property'] = 'value'
56+
Config.TO_DELETE.append(entity)
5357
54-
client.put(entity)
58+
client.put(entity)
5559
5660
.. doctest:: entity-ctor
5761
58-
>>> client.get(key)
59-
<Entity('EntityKind', 1234) {'property': 'value'}>
62+
>>> client.get(key)
63+
<Entity('EntityKind', 1234) {'property': 'value'}>
6064
6165
You can the set values on the entity just like you would on any
6266
other dictionary.
6367
6468
.. doctest:: entity-ctor
6569
66-
>>> entity['age'] = 20
67-
>>> entity['name'] = 'JJ'
70+
>>> entity['age'] = 20
71+
>>> entity['name'] = 'JJ'
6872
6973
However, not all types are allowed as a value for a Google Cloud Datastore
7074
entity. The following basic types are supported by the API:

datastore/google/cloud/datastore/transaction.py

Lines changed: 51 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -29,24 +29,28 @@ class Transaction(Batch):
2929
3030
.. testsetup:: txn-put-multi, txn-api
3131
32-
from google.cloud import datastore
33-
from tests.system.test_system import Config # system tests
32+
import os
33+
import uuid
3434
35-
client = datastore.Client()
36-
key1 = client.key('_Doctest')
37-
entity1 = datastore.Entity(key=key1)
38-
entity1['foo'] = 1337
35+
from google.cloud import datastore
36+
from tests.system.test_system import Config # system tests
3937
40-
key2 = client.key('_Doctest', 'abcd1234')
41-
entity2 = datastore.Entity(key=key2)
42-
entity2['foo'] = 42
38+
unique = os.getenv('CIRCLE_BUILD_NUM', str(uuid.uuid4())[0:8])
39+
client = datastore.Client(namespace='ns{}'.format(unique))
40+
key1 = client.key('_Doctest')
41+
entity1 = datastore.Entity(key=key1)
42+
entity1['foo'] = 1337
4343
44-
Config.TO_DELETE.extend([entity1, entity2])
44+
key2 = client.key('_Doctest', 'abcd1234')
45+
entity2 = datastore.Entity(key=key2)
46+
entity2['foo'] = 42
47+
48+
Config.TO_DELETE.extend([entity1, entity2])
4549
4650
.. doctest:: txn-put-multi
4751
48-
>>> with client.transaction():
49-
... client.put_multi([entity1, entity2])
52+
>>> with client.transaction():
53+
... client.put_multi([entity1, entity2])
5054
5155
Because it derives from :class:`~google.cloud.datastore.batch.Batch`,
5256
:class:`Transaction` also provides :meth:`put` and :meth:`delete` methods:
@@ -62,51 +66,59 @@ class Transaction(Batch):
6266
6367
.. testsetup:: txn-error
6468
65-
from google.cloud import datastore
69+
import os
70+
import uuid
71+
72+
from google.cloud import datastore
6673
67-
client = datastore.Client()
74+
unique = os.getenv('CIRCLE_BUILD_NUM', str(uuid.uuid4())[0:8])
75+
client = datastore.Client(namespace='ns{}'.format(unique))
6876
69-
def do_some_work():
70-
return
77+
def do_some_work():
78+
return
7179
72-
class SomeException(Exception):
73-
pass
80+
class SomeException(Exception):
81+
pass
7482
7583
.. doctest:: txn-error
7684
77-
>>> with client.transaction():
78-
... do_some_work()
79-
... raise SomeException # rolls back
80-
Traceback (most recent call last):
81-
...
82-
SomeException
85+
>>> with client.transaction():
86+
... do_some_work()
87+
... raise SomeException # rolls back
88+
Traceback (most recent call last):
89+
...
90+
SomeException
8391
8492
If the transaction block exits without an exception, it will commit
8593
by default.
8694
8795
.. warning::
8896
89-
Inside a transaction, automatically assigned IDs for
90-
entities will not be available at save time! That means, if you
91-
try:
97+
Inside a transaction, automatically assigned IDs for
98+
entities will not be available at save time! That means, if you
99+
try:
100+
101+
.. testsetup:: txn-entity-key, txn-entity-key-after, txn-manual
92102
93-
.. testsetup:: txn-entity-key, txn-entity-key-after, txn-manual
103+
import os
104+
import uuid
94105
95-
from google.cloud import datastore
96-
from tests.system.test_system import Config # system tests
106+
from google.cloud import datastore
107+
from tests.system.test_system import Config # system tests
97108
98-
client = datastore.Client()
109+
unique = os.getenv('CIRCLE_BUILD_NUM', str(uuid.uuid4())[0:8])
110+
client = datastore.Client(namespace='ns{}'.format(unique))
99111
100-
def Entity(*args, **kwargs):
101-
entity = datastore.Entity(*args, **kwargs)
102-
Config.TO_DELETE.append(entity)
103-
return entity
112+
def Entity(*args, **kwargs):
113+
entity = datastore.Entity(*args, **kwargs)
114+
Config.TO_DELETE.append(entity)
115+
return entity
104116
105-
.. doctest:: txn-entity-key
117+
.. doctest:: txn-entity-key
106118
107-
>>> with client.transaction():
108-
... entity = Entity(key=client.key('Thing'))
109-
... client.put(entity)
119+
>>> with client.transaction():
120+
... entity = Entity(key=client.key('Thing'))
121+
... client.put(entity)
110122
111123
``entity`` won't have a complete key until the transaction is
112124
committed.

0 commit comments

Comments
 (0)