Skip to content

Commit 26917a4

Browse files
committed
Adding back implicit allocate_ids() to datastore.__init__.
1 parent c401bbc commit 26917a4

File tree

3 files changed

+85
-16
lines changed

3 files changed

+85
-16
lines changed

gcloud/datastore/__init__.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,18 @@ def _require_dataset():
146146
return _implicit_environ.DATASET
147147

148148

149+
def _require_connection():
150+
"""Convenience method to ensure CONNECTION is set.
151+
152+
:rtype: :class:`gcloud.datastore.connection.Connection`
153+
:returns: A connection based on the current environment.
154+
:raises: :class:`EnvironmentError` if CONNECTION is not set.
155+
"""
156+
if _implicit_environ.CONNECTION is None:
157+
raise EnvironmentError('Connection could not be inferred.')
158+
return _implicit_environ.CONNECTION
159+
160+
149161
def get_entities(keys):
150162
"""Retrieves entities from implied dataset, along with their attributes.
151163
@@ -156,3 +168,21 @@ def get_entities(keys):
156168
:returns: The requested entities.
157169
"""
158170
return _require_dataset().get_entities(keys)
171+
172+
173+
def allocate_ids(incomplete_key, num_ids):
174+
"""Allocates a list of IDs from a partial key.
175+
176+
:type incomplete_key: A :class:`gcloud.datastore.key.Key`
177+
:param incomplete_key: The partial key to use as base for allocated IDs.
178+
179+
:type num_ids: A :class:`int`.
180+
:param num_ids: The number of IDs to allocate.
181+
182+
:rtype: list of :class:`gcloud.datastore.key.Key`
183+
:returns: The (complete) keys allocated with `incomplete_key` as root.
184+
"""
185+
dataset = _require_dataset()
186+
connection = _require_connection()
187+
return connection_module.allocate_ids(incomplete_key, num_ids,
188+
connection, dataset.id())

gcloud/datastore/test___init__.py

Lines changed: 54 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -151,20 +151,43 @@ def test_it(self):
151151

152152
class Test_implicit_behavior(unittest2.TestCase):
153153

154-
def test__require_dataset(self):
154+
def test__require_dataset_value_unset(self):
155155
import gcloud.datastore
156156
from gcloud.datastore import _implicit_environ
157-
original_dataset = _implicit_environ.DATASET
158-
159-
try:
160-
_implicit_environ.DATASET = None
161-
self.assertRaises(EnvironmentError,
162-
gcloud.datastore._require_dataset)
163-
NEW_DATASET = object()
164-
_implicit_environ.DATASET = NEW_DATASET
165-
self.assertEqual(gcloud.datastore._require_dataset(), NEW_DATASET)
166-
finally:
167-
_implicit_environ.DATASET = original_dataset
157+
from gcloud._testing import _Monkey
158+
159+
with _Monkey(_implicit_environ, DATASET=None):
160+
with self.assertRaises(EnvironmentError):
161+
gcloud.datastore._require_dataset()
162+
163+
def test__require_dataset_value_set(self):
164+
import gcloud.datastore
165+
from gcloud.datastore import _implicit_environ
166+
from gcloud._testing import _Monkey
167+
168+
FAKE_DATASET = object()
169+
with _Monkey(_implicit_environ, DATASET=FAKE_DATASET):
170+
stored_dataset = gcloud.datastore._require_dataset()
171+
self.assertTrue(stored_dataset is FAKE_DATASET)
172+
173+
def test__require_connection_value_unset(self):
174+
import gcloud.datastore
175+
from gcloud.datastore import _implicit_environ
176+
from gcloud._testing import _Monkey
177+
178+
with _Monkey(_implicit_environ, CONNECTION=None):
179+
with self.assertRaises(EnvironmentError):
180+
gcloud.datastore._require_connection()
181+
182+
def test__require_connection_value_set(self):
183+
import gcloud.datastore
184+
from gcloud.datastore import _implicit_environ
185+
from gcloud._testing import _Monkey
186+
187+
FAKE_CONNECTION = object()
188+
with _Monkey(_implicit_environ, CONNECTION=FAKE_CONNECTION):
189+
stored_connection = gcloud.datastore._require_connection()
190+
self.assertTrue(stored_connection is FAKE_CONNECTION)
168191

169192
def test_get_entities(self):
170193
import gcloud.datastore
@@ -181,3 +204,22 @@ def test_get_entities(self):
181204
with _Monkey(_implicit_environ, DATASET=CUSTOM_DATASET):
182205
result = gcloud.datastore.get_entities(DUMMY_KEYS)
183206
self.assertTrue(result == DUMMY_VALS)
207+
208+
def test_allocate_ids(self):
209+
import gcloud.datastore
210+
from gcloud.datastore import _implicit_environ
211+
from gcloud.datastore.key import Key
212+
from gcloud.datastore.test_dataset import _Connection
213+
from gcloud.datastore.test_entity import _Dataset
214+
from gcloud._testing import _Monkey
215+
216+
CUSTOM_DATASET = _Dataset()
217+
CUSTOM_CONNECTION = _Connection()
218+
NUM_IDS = 2
219+
with _Monkey(_implicit_environ, DATASET=CUSTOM_DATASET,
220+
CONNECTION=CUSTOM_CONNECTION):
221+
INCOMPLETE_KEY = Key('KIND')
222+
result = gcloud.datastore.allocate_ids(INCOMPLETE_KEY, NUM_IDS)
223+
224+
# Check the IDs returned.
225+
self.assertEqual([key.id for key in result], range(NUM_IDS))

regression/datastore.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import unittest2
1919

2020
from gcloud import datastore
21-
from gcloud.datastore.connection import allocate_ids
2221
from gcloud.datastore.entity import Entity
2322
from gcloud.datastore.key import Key
2423
from gcloud.datastore.query import Query
@@ -49,9 +48,7 @@ class TestDatastoreAllocateIDs(TestDatastore):
4948
def test_allocate_ids(self):
5049
incomplete_key = Key('Kind')
5150
num_ids = 10
52-
connection = datastore.get_connection()
53-
allocated_keys = allocate_ids(incomplete_key, num_ids,
54-
connection, DATASET_ID)
51+
allocated_keys = datastore.allocate_ids(incomplete_key, num_ids)
5552
self.assertEqual(len(allocated_keys), num_ids)
5653

5754
unique_ids = set()

0 commit comments

Comments
 (0)