Skip to content

Commit bfb8c7d

Browse files
committed
Merge pull request #526 from dhermes/fill-out-datastore-namespace
Moving public classes into datastore package.
2 parents b7de953 + 803e3bc commit bfb8c7d

File tree

10 files changed

+62
-85
lines changed

10 files changed

+62
-85
lines changed

README.rst

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,8 @@ with the Cloud Datastore using this Client Library.
6767
from gcloud import datastore
6868
datastore.set_defaults()
6969
# Then do other things...
70-
from gcloud.datastore.entity import Entity
71-
from gcloud.datastore.key import Key
72-
from gcloud.datastore.query import Query
73-
query = Query(kind='EntityKind')
74-
entity = Entity(key=Key('EntityKind'))
70+
query = datastore.Query(kind='EntityKind')
71+
entity = datastore.Entity(key=datastore.Key('EntityKind'))
7572
7673
Google Cloud Storage
7774
--------------------

docs/_components/datastore-getting-started.rst

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,9 @@ Open a Python console and...
3939

4040
>>> from gcloud import datastore
4141
>>> datastore.set_defaults()
42-
>>> from gcloud.datastore.query import Query
43-
>>> list(Query(kind='Person').fetch())
42+
>>> list(datastore.Query(kind='Person').fetch())
4443
[]
45-
>>> from gcloud.datastore.entity import Entity
46-
>>> from gcloud.datastore.key import Key
47-
>>> entity = Entity(key=Key('Person'))
44+
>>> entity = datastore.Entity(key=datastore.Key('Person'))
4845
>>> entity['name'] = 'Your name'
4946
>>> entity['age'] = 25
5047
>>> entity.save()

docs/_components/datastore-quickstart.rst

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,12 @@ and initializing the demo settings::
5454
Once you have initialized,
5555
you can create entities and save them::
5656

57-
>>> from gcloud.datastore.entity import Entity
58-
>>> from gcloud.datastore.key import Key
59-
>>> entity = Entity(key=Key('Person'))
57+
>>> from gcloud import datastore
58+
>>> entity = datastore.Entity(key=datastore.Key('Person'))
6059
>>> entity['name'] = 'Your name'
6160
>>> entity['age'] = 25
6261
>>> entity.save()
63-
>>> from gcloud.datastore.query import Query
64-
>>> list(Query(kind='Person').fetch())
62+
>>> list(datastore.Query(kind='Person').fetch())
6563
[<Entity{...} {'name': 'Your name', 'age': 25}>]
6664

6765
----

docs/index.rst

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,7 @@ Cloud Datastore
3131
from gcloud import datastore
3232
datastore.set_defaults()
3333
34-
from gcloud.datastore.entity import Entity
35-
from gcloud.datastore.key import Key
36-
entity = Entity(key=Key('Person'))
34+
entity = datastore.Entity(key=datastore.Key('Person'))
3735
entity['name'] = 'Your name'
3836
entity['age'] = 25
3937
entity.save()

gcloud/datastore/__init__.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,12 @@
1717
You'll typically use these to get started with the API:
1818
1919
>>> from gcloud import datastore
20-
>>> from gcloud.datastore.entity import Entity
21-
>>> from gcloud.datastore.key import Key
22-
>>> from gcloud.datastore.query import Query
2320
2421
>>> datastore.set_defaults()
2522
26-
>>> key = Key('EntityKind', 1234)
27-
>>> entity = Entity(key)
28-
>>> query = Query(kind='EntityKind')
23+
>>> key = datastore.Key('EntityKind', 1234)
24+
>>> entity = datastore.Entity(key)
25+
>>> query = datastore.Query(kind='EntityKind')
2926
3027
The main concepts with this API are:
3128
@@ -55,7 +52,12 @@
5552
from gcloud.datastore import _implicit_environ
5653
from gcloud.datastore.api import allocate_ids
5754
from gcloud.datastore.api import get
55+
from gcloud.datastore.batch import Batch
5856
from gcloud.datastore.connection import Connection
57+
from gcloud.datastore.entity import Entity
58+
from gcloud.datastore.key import Key
59+
from gcloud.datastore.query import Query
60+
from gcloud.datastore.transaction import Transaction
5961

6062

6163
SCOPE = ('https://www.googleapis.com/auth/datastore',
@@ -121,11 +123,10 @@ def get_connection():
121123
with the same set of credentials (unlikely):
122124
123125
>>> from gcloud import datastore
124-
>>> from gcloud.datastore import Key
125126
126127
>>> connection = datastore.get_connection()
127-
>>> key1 = Key('Kind', 1234, dataset_id='dataset1')
128-
>>> key2 = Key('Kind', 1234, dataset_id='dataset2')
128+
>>> key1 = datastore.Key('Kind', 1234, dataset_id='dataset1')
129+
>>> key2 = datastore.Key('Kind', 1234, dataset_id='dataset2')
129130
>>> entity1 = datastore.get(key1, connection=connection)
130131
>>> entity2 = datastore.get(key2, connection=connection)
131132

gcloud/datastore/connection.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,9 +169,8 @@ def lookup(self, dataset_id, key_pbs,
169169
under the hood in :func:`gcloud.datastore.get`:
170170
171171
>>> from gcloud import datastore
172-
>>> from gcloud.datastore.key import Key
173172
>>> datastore.set_defaults()
174-
>>> key = Key('MyKind', 1234, dataset_id='dataset-id')
173+
>>> key = datastore.Key('MyKind', 1234, dataset_id='dataset-id')
175174
>>> datastore.get(key)
176175
<Entity object>
177176
@@ -261,11 +260,10 @@ def run_query(self, dataset_id, query_pb, namespace=None, eventual=False):
261260
uses this method to fetch data:
262261
263262
>>> from gcloud import datastore
264-
>>> from gcloud.datastore.query import Query
265263
266264
>>> datastore.set_defaults()
267265
268-
>>> query = Query(kind='MyKind')
266+
>>> query = datastore.Query(kind='MyKind')
269267
>>> query.add_filter('property', '=', 'val')
270268
271269
Using the query's ``fetch_page`` method...

gcloud/datastore/demo/demo.py

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,25 @@
1919
from gcloud.datastore import demo
2020
demo.initialize()
2121

22+
# Let's import the package containing our helper classes:
23+
from gcloud import datastore
24+
2225
# Let's create a new entity of type "Thing" and name it 'Toy':
23-
from gcloud.datastore.key import Key
24-
key = Key('Thing')
25-
from gcloud.datastore.entity import Entity
26-
toy = Entity(key)
26+
key = datastore.Key('Thing')
27+
toy = datastore.Entity(key)
2728
toy.update({'name': 'Toy'})
2829

2930
# Now let's save it to our datastore:
3031
toy.save()
3132

3233
# If we look it up by its key, we should find it...
33-
from gcloud.datastore import get
34-
print(get([toy.key]))
34+
print(datastore.get([toy.key]))
3535

3636
# And we should be able to delete it...
3737
toy.key.delete()
3838

3939
# Since we deleted it, if we do another lookup it shouldn't be there again:
40-
print(get([toy.key]))
40+
print(datastore.get([toy.key]))
4141

4242
# Now let's try a more advanced query.
4343
# First, let's create some entities.
@@ -50,15 +50,14 @@
5050
(6789, 'Computer', 13)]
5151
samples = []
5252
for id, name, age in SAMPLE_DATA:
53-
key = Key('Thing', id)
53+
key = datastore.Key('Thing', id)
5454
samples.append(key)
55-
entity = Entity(key)
55+
entity = datastore.Entity(key)
5656
entity['name'] = name
5757
entity['age'] = age
5858
entity.save()
5959
# We'll start by look at all Thing entities:
60-
from gcloud.datastore.query import Query
61-
query = Query(kind='Thing')
60+
query = datastore.Query(kind='Thing')
6261

6362
# Let's look at the first two.
6463
print(list(query.fetch(limit=2)))
@@ -77,17 +76,16 @@
7776

7877
# You can also work inside a transaction.
7978
# (Check the official docs for explanations of what's happening here.)
80-
from gcloud.datastore.transaction import Transaction
81-
with Transaction():
82-
print('Creating and savng an entity...')
83-
key = Key('Thing', 'foo')
84-
thing = Entity(key)
79+
with datastore.Transaction():
80+
print('Creating and saving an entity...')
81+
key = datastore.Key('Thing', 'foo')
82+
thing = datastore.Entity(key)
8583
thing['age'] = 10
8684
thing.save()
8785

8886
print('Creating and saving another entity...')
89-
key2 = Key('Thing', 'bar')
90-
thing2 = Entity(key2)
87+
key2 = datastore.Key('Thing', 'bar')
88+
thing2 = datastore.Entity(key2)
9189
thing2['age'] = 15
9290
thing2.save()
9391

@@ -97,21 +95,21 @@
9795
print(key.delete(), key2.delete())
9896

9997
# To rollback a transaction, just call .rollback()
100-
with Transaction() as t:
101-
key = Key('Thing', 'another')
102-
thing = Entity(key)
98+
with datastore.Transaction() as t:
99+
key = datastore.Key('Thing', 'another')
100+
thing = datastore.Entity(key)
103101
thing.save()
104102
t.rollback()
105103

106104
# Let's check if the entity was actually created:
107-
created = get([key])
105+
created = datastore.get([key])
108106
print('yes' if created else 'no')
109107

110108
# Remember, a key won't be complete until the transaction is commited.
111109
# That is, while inside the transaction block, thing.key will be incomplete.
112-
with Transaction():
113-
key = Key('Thing') # partial
114-
thing = Entity(key)
110+
with datastore.Transaction():
111+
key = datastore.Key('Thing') # partial
112+
thing = datastore.Entity(key)
115113
thing.save()
116114
print(thing.key) # This will still be partial
117115

regression/clear_datastore.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,9 @@
1414

1515
"""Script to populate datastore with regression test data."""
1616

17+
from six.moves import input
1718

1819
from gcloud import datastore
19-
from gcloud.datastore import _implicit_environ
20-
from gcloud.datastore.query import Query
21-
from gcloud.datastore.transaction import Transaction
22-
from six.moves import input
2320

2421

2522
datastore._DATASET_ENV_VAR_NAME = 'GCLOUD_TESTS_DATASET_ID'
@@ -39,7 +36,7 @@
3936

4037
def fetch_keys(kind, fetch_max=FETCH_MAX, query=None, cursor=None):
4138
if query is None:
42-
query = Query(kind=kind, projection=['__key__'])
39+
query = datastore.Query(kind=kind, projection=['__key__'])
4340

4441
iterator = query.fetch(limit=fetch_max, start_cursor=cursor)
4542

@@ -64,7 +61,7 @@ def delete_entities(entities):
6461

6562
dataset_id = dataset_ids.pop()
6663
key_pbs = [entity.key.to_protobuf() for entity in entities]
67-
_implicit_environ.CONNECTION.delete_entities(dataset_id, key_pbs)
64+
datastore.get_connection().delete_entities(dataset_id, key_pbs)
6865

6966

7067
def remove_kind(kind):
@@ -81,7 +78,7 @@ def remove_kind(kind):
8178
return
8279

8380
delete_outside_transaction = False
84-
with Transaction():
81+
with datastore.Transaction():
8582
# Now that we have all results, we seek to delete.
8683
print('Deleting keys:')
8784
print(results)

regression/datastore.py

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,6 @@
1717
import unittest2
1818

1919
from gcloud import datastore
20-
from gcloud.datastore.entity import Entity
21-
from gcloud.datastore.key import Key
22-
from gcloud.datastore.query import Query
23-
from gcloud.datastore.transaction import Transaction
2420
# This assumes the command is being run via tox hence the
2521
# repository root is the current directory.
2622
from regression import populate_datastore
@@ -36,7 +32,7 @@ def setUp(self):
3632
self.case_entities_to_delete = []
3733

3834
def tearDown(self):
39-
with Transaction():
35+
with datastore.Transaction():
4036
for entity in self.case_entities_to_delete:
4137
entity.key.delete()
4238

@@ -45,7 +41,7 @@ class TestDatastoreAllocateIDs(TestDatastore):
4541

4642
def test_allocate_ids(self):
4743
num_ids = 10
48-
allocated_keys = datastore.allocate_ids(Key('Kind'), num_ids)
44+
allocated_keys = datastore.allocate_ids(datastore.Key('Kind'), num_ids)
4945
self.assertEqual(len(allocated_keys), num_ids)
5046

5147
unique_ids = set()
@@ -70,7 +66,7 @@ def _get_post(self, id_or_name=None, post_content=None):
7066
'rating': 5.0,
7167
}
7268
# Create an entity with the given content.
73-
entity = Entity(key=Key('Post'))
69+
entity = datastore.Entity(key=datastore.Key('Post'))
7470
entity.update(post_content)
7571

7672
# Update the entity key.
@@ -112,7 +108,7 @@ def test_post_with_generated_id(self):
112108
self._generic_test_post()
113109

114110
def test_save_multiple(self):
115-
with Transaction():
111+
with datastore.Transaction():
116112
entity1 = self._get_post()
117113
entity1.save()
118114
# Register entity to be deleted.
@@ -137,23 +133,23 @@ def test_save_multiple(self):
137133
self.assertEqual(len(matches), 2)
138134

139135
def test_empty_kind(self):
140-
query = Query(kind='Post')
136+
query = datastore.Query(kind='Post')
141137
posts = list(query.fetch(limit=2))
142138
self.assertEqual(posts, [])
143139

144140

145141
class TestDatastoreSaveKeys(TestDatastore):
146142

147143
def test_save_key_self_reference(self):
148-
key = Key('Person', 'name')
149-
entity = Entity(key=key)
144+
key = datastore.Key('Person', 'name')
145+
entity = datastore.Entity(key=key)
150146
entity['fullName'] = u'Full name'
151147
entity['linkedTo'] = key # Self reference.
152148

153149
entity.save()
154150
self.case_entities_to_delete.append(entity)
155151

156-
query = Query(kind='Person')
152+
query = datastore.Query(kind='Person')
157153
query.add_filter('linkedTo', '=', key)
158154

159155
stored_persons = list(query.fetch(limit=2))
@@ -171,10 +167,10 @@ class TestDatastoreQuery(TestDatastore):
171167
def setUpClass(cls):
172168
super(TestDatastoreQuery, cls).setUpClass()
173169
cls.CHARACTERS = populate_datastore.CHARACTERS
174-
cls.ANCESTOR_KEY = Key(*populate_datastore.ANCESTOR)
170+
cls.ANCESTOR_KEY = datastore.Key(*populate_datastore.ANCESTOR)
175171

176172
def _base_query(self):
177-
return Query(kind='Character', ancestor=self.ANCESTOR_KEY)
173+
return datastore.Query(kind='Character', ancestor=self.ANCESTOR_KEY)
178174

179175
def test_limit_queries(self):
180176
limit = 5
@@ -219,7 +215,7 @@ def test_ancestor_query(self):
219215
self.assertEqual(len(entities), expected_matches)
220216

221217
def test_query___key___filter(self):
222-
rickard_key = Key(*populate_datastore.RICKARD)
218+
rickard_key = datastore.Key(*populate_datastore.RICKARD)
223219

224220
query = self._base_query()
225221
query.add_filter('__key__', '=', rickard_key)
@@ -341,10 +337,10 @@ def test_query_group_by(self):
341337
class TestDatastoreTransaction(TestDatastore):
342338

343339
def test_transaction(self):
344-
entity = Entity(key=Key('Company', 'Google'))
340+
entity = datastore.Entity(key=datastore.Key('Company', 'Google'))
345341
entity['url'] = u'www.google.com'
346342

347-
with Transaction():
343+
with datastore.Transaction():
348344
retrieved_entity = datastore.get(entity.key)
349345
if retrieved_entity is None:
350346
entity.save()

0 commit comments

Comments
 (0)