Skip to content

Commit b0cdca6

Browse files
committed
Replacing _implicit_environ module globals with a container.
This is so that a container instance can have lazily loaded properties.
1 parent b3be71e commit b0cdca6

File tree

11 files changed

+120
-82
lines changed

11 files changed

+120
-82
lines changed

gcloud/datastore/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def set_default_dataset_id(dataset_id=None):
9999
dataset_id = _implicit_environ.compute_engine_id()
100100

101101
if dataset_id is not None:
102-
_implicit_environ.DATASET_ID = dataset_id
102+
_implicit_environ._DEFAULTS.dataset_id = dataset_id
103103
else:
104104
raise EnvironmentError('No dataset ID could be inferred.')
105105

@@ -111,7 +111,7 @@ def set_default_connection(connection=None):
111111
:param connection: A connection provided to be the default.
112112
"""
113113
connection = connection or get_connection()
114-
_implicit_environ.CONNECTION = connection
114+
_implicit_environ._DEFAULTS.connection = connection
115115

116116

117117
def set_defaults(dataset_id=None, connection=None):

gcloud/datastore/_implicit_environ.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,19 @@
2828
app_identity = None
2929

3030

31-
DATASET_ID = None
32-
"""Module global to allow persistent implied dataset ID from enviroment."""
31+
class _DefaultsContainer(object):
32+
"""Container for defaults.
3333
34-
CONNECTION = None
35-
"""Module global to allow persistent implied connection from enviroment."""
34+
:type connection: :class:`gcloud.datastore.connection.Connection`
35+
:param connection: Persistent implied connection from environment.
36+
37+
:type dataset_id: string
38+
:param dataset_id: Persistent implied dataset ID from environment.
39+
"""
40+
41+
def __init__(self, connection=None, dataset_id=None):
42+
self.connection = connection
43+
self.dataset_id = dataset_id
3644

3745

3846
def app_engine_id():
@@ -87,7 +95,7 @@ def get_default_connection():
8795
:rtype: :class:`gcloud.datastore.connection.Connection` or ``NoneType``
8896
:returns: The default connection if one has been set.
8997
"""
90-
return CONNECTION
98+
return _DEFAULTS.connection
9199

92100

93101
def get_default_dataset_id():
@@ -96,4 +104,7 @@ def get_default_dataset_id():
96104
:rtype: string or ``NoneType``
97105
:returns: The default dataset ID if one has been set.
98106
"""
99-
return DATASET_ID
107+
return _DEFAULTS.dataset_id
108+
109+
110+
_DEFAULTS = _DefaultsContainer()

gcloud/datastore/test___init__.py

Lines changed: 38 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@ class Test_set_default_dataset_id(unittest2.TestCase):
1919

2020
def setUp(self):
2121
from gcloud.datastore import _implicit_environ
22-
self._replaced_dataset_id = _implicit_environ.DATASET_ID
23-
_implicit_environ.DATASET_ID = None
22+
self._replaced_defaults = _implicit_environ._DEFAULTS
23+
_implicit_environ._DEFAULTS = _implicit_environ._DefaultsContainer(
24+
None, None)
2425

2526
def tearDown(self):
2627
from gcloud.datastore import _implicit_environ
27-
_implicit_environ.DATASET_ID = self._replaced_dataset_id
28+
_implicit_environ._DEFAULTS = self._replaced_defaults
2829

2930
def _callFUT(self, dataset_id=None):
3031
from gcloud.datastore import set_default_dataset_id
@@ -60,7 +61,7 @@ def test_no_env_var_set(self):
6061
with self._monkeyImplicit():
6162
self.assertRaises(EnvironmentError, self._callFUT)
6263

63-
self.assertEqual(_implicit_environ.DATASET_ID, None)
64+
self.assertEqual(_implicit_environ.get_default_dataset_id(), None)
6465

6566
def test_set_from_env_var(self):
6667
from gcloud.datastore import _implicit_environ
@@ -70,7 +71,8 @@ def test_set_from_env_var(self):
7071
with self._monkeyImplicit():
7172
self._callFUT()
7273

73-
self.assertEqual(_implicit_environ.DATASET_ID, IMPLICIT_DATASET_ID)
74+
self.assertEqual(_implicit_environ.get_default_dataset_id(),
75+
IMPLICIT_DATASET_ID)
7476

7577
def test_set_explicit_w_env_var_set(self):
7678
from gcloud.datastore import _implicit_environ
@@ -80,7 +82,8 @@ def test_set_explicit_w_env_var_set(self):
8082
with self._monkeyImplicit():
8183
self._callFUT(EXPLICIT_DATASET_ID)
8284

83-
self.assertEqual(_implicit_environ.DATASET_ID, EXPLICIT_DATASET_ID)
85+
self.assertEqual(_implicit_environ.get_default_dataset_id(),
86+
EXPLICIT_DATASET_ID)
8487

8588
def test_set_explicit_no_env_var_set(self):
8689
from gcloud.datastore import _implicit_environ
@@ -91,7 +94,8 @@ def test_set_explicit_no_env_var_set(self):
9194
with self._monkeyImplicit():
9295
self._callFUT(EXPLICIT_DATASET_ID)
9396

94-
self.assertEqual(_implicit_environ.DATASET_ID, EXPLICIT_DATASET_ID)
97+
self.assertEqual(_implicit_environ.get_default_dataset_id(),
98+
EXPLICIT_DATASET_ID)
9599

96100
def test_set_explicit_None_wo_env_var_set(self):
97101
from gcloud.datastore import _implicit_environ
@@ -100,7 +104,7 @@ def test_set_explicit_None_wo_env_var_set(self):
100104
with self._monkeyImplicit():
101105
self.assertRaises(EnvironmentError, self._callFUT, None)
102106

103-
self.assertEqual(_implicit_environ.DATASET_ID, None)
107+
self.assertEqual(_implicit_environ.get_default_dataset_id(), None)
104108

105109
def test_set_explicit_None_w_env_var_set(self):
106110
from gcloud.datastore import _implicit_environ
@@ -110,7 +114,8 @@ def test_set_explicit_None_w_env_var_set(self):
110114
with self._monkeyImplicit():
111115
self._callFUT(None)
112116

113-
self.assertEqual(_implicit_environ.DATASET_ID, IMPLICIT_DATASET_ID)
117+
self.assertEqual(_implicit_environ.get_default_dataset_id(),
118+
IMPLICIT_DATASET_ID)
114119

115120
def test_set_from_gcd_env_var(self):
116121
from gcloud.datastore import _GCD_DATASET_ENV_VAR_NAME
@@ -123,7 +128,8 @@ def test_set_from_gcd_env_var(self):
123128
with self._monkeyImplicit():
124129
self._callFUT()
125130

126-
self.assertEqual(_implicit_environ.DATASET_ID, GCD_DATASET_ID)
131+
self.assertEqual(_implicit_environ.get_default_dataset_id(),
132+
GCD_DATASET_ID)
127133

128134
def test_set_gcd_and_production_env_vars(self):
129135
from gcloud.datastore import _DATASET_ENV_VAR_NAME
@@ -141,8 +147,8 @@ def test_set_gcd_and_production_env_vars(self):
141147
with self._monkeyImplicit():
142148
self._callFUT()
143149

144-
self.assertNotEqual(_implicit_environ.DATASET_ID, GCD_DATASET_ID)
145-
self.assertEqual(_implicit_environ.DATASET_ID, IMPLICIT_DATASET_ID)
150+
self.assertEqual(_implicit_environ.get_default_dataset_id(),
151+
IMPLICIT_DATASET_ID)
146152

147153
def test_set_gcd_env_vars_and_appengine(self):
148154
from gcloud.datastore import _GCD_DATASET_ENV_VAR_NAME
@@ -158,8 +164,8 @@ def test_set_gcd_env_vars_and_appengine(self):
158164
with self._monkeyImplicit(app_identity=APP_IDENTITY):
159165
self._callFUT()
160166

161-
self.assertNotEqual(_implicit_environ.DATASET_ID, APP_ENGINE_ID)
162-
self.assertEqual(_implicit_environ.DATASET_ID, GCD_DATASET_ID)
167+
self.assertEqual(_implicit_environ.get_default_dataset_id(),
168+
GCD_DATASET_ID)
163169

164170
def test_set_implicit_from_appengine(self):
165171
from gcloud.datastore import _implicit_environ
@@ -171,7 +177,8 @@ def test_set_implicit_from_appengine(self):
171177
with self._monkeyImplicit(app_identity=APP_IDENTITY):
172178
self._callFUT()
173179

174-
self.assertEqual(_implicit_environ.DATASET_ID, APP_ENGINE_ID)
180+
self.assertEqual(_implicit_environ.get_default_dataset_id(),
181+
APP_ENGINE_ID)
175182

176183
def test_set_implicit_both_env_and_appengine(self):
177184
from gcloud.datastore import _implicit_environ
@@ -183,7 +190,8 @@ def test_set_implicit_both_env_and_appengine(self):
183190
with self._monkeyImplicit(app_identity=APP_IDENTITY):
184191
self._callFUT()
185192

186-
self.assertEqual(_implicit_environ.DATASET_ID, IMPLICIT_DATASET_ID)
193+
self.assertEqual(_implicit_environ.get_default_dataset_id(),
194+
IMPLICIT_DATASET_ID)
187195

188196
def _implicit_compute_engine_helper(self, status):
189197
from gcloud.datastore import _implicit_environ
@@ -206,7 +214,8 @@ def _implicit_compute_engine_helper(self, status):
206214
else:
207215
self._callFUT()
208216

209-
self.assertEqual(_implicit_environ.DATASET_ID, EXPECTED_ID)
217+
self.assertEqual(_implicit_environ.get_default_dataset_id(),
218+
EXPECTED_ID)
210219
self.assertEqual(connection.host, '169.254.169.254')
211220
self.assertEqual(connection.timeout, 0.1)
212221
self.assertEqual(
@@ -241,7 +250,8 @@ def test_set_implicit_both_appengine_and_compute(self):
241250
app_identity=APP_IDENTITY):
242251
self._callFUT()
243252

244-
self.assertEqual(_implicit_environ.DATASET_ID, APP_ENGINE_ID)
253+
self.assertEqual(_implicit_environ.get_default_dataset_id(),
254+
APP_ENGINE_ID)
245255
self.assertEqual(connection.host, None)
246256
self.assertEqual(connection.timeout, None)
247257

@@ -257,7 +267,8 @@ def test_set_implicit_three_env_appengine_and_compute(self):
257267
app_identity=APP_IDENTITY):
258268
self._callFUT()
259269

260-
self.assertEqual(_implicit_environ.DATASET_ID, IMPLICIT_DATASET_ID)
270+
self.assertEqual(_implicit_environ.get_default_dataset_id(),
271+
IMPLICIT_DATASET_ID)
261272
self.assertEqual(connection.host, None)
262273
self.assertEqual(connection.timeout, None)
263274

@@ -266,12 +277,13 @@ class Test_set_default_connection(unittest2.TestCase):
266277

267278
def setUp(self):
268279
from gcloud.datastore import _implicit_environ
269-
self._replaced_connection = _implicit_environ.CONNECTION
270-
_implicit_environ.CONNECTION = None
280+
self._replaced_defaults = _implicit_environ._DEFAULTS
281+
_implicit_environ._DEFAULTS = _implicit_environ._DefaultsContainer(
282+
None, None)
271283

272284
def tearDown(self):
273285
from gcloud.datastore import _implicit_environ
274-
_implicit_environ.CONNECTION = self._replaced_connection
286+
_implicit_environ._DEFAULTS = self._replaced_defaults
275287

276288
def _callFUT(self, connection=None):
277289
from gcloud.datastore import set_default_connection
@@ -280,23 +292,23 @@ def _callFUT(self, connection=None):
280292
def test_set_explicit(self):
281293
from gcloud.datastore import _implicit_environ
282294

283-
self.assertEqual(_implicit_environ.CONNECTION, None)
295+
self.assertEqual(_implicit_environ.get_default_connection(), None)
284296
fake_cnxn = object()
285297
self._callFUT(connection=fake_cnxn)
286-
self.assertEqual(_implicit_environ.CONNECTION, fake_cnxn)
298+
self.assertEqual(_implicit_environ.get_default_connection(), fake_cnxn)
287299

288300
def test_set_implicit(self):
289301
from gcloud._testing import _Monkey
290302
from gcloud import datastore
291303
from gcloud.datastore import _implicit_environ
292304

293-
self.assertEqual(_implicit_environ.CONNECTION, None)
305+
self.assertEqual(_implicit_environ.get_default_connection(), None)
294306

295307
fake_cnxn = object()
296308
with _Monkey(datastore, get_connection=lambda: fake_cnxn):
297309
self._callFUT()
298310

299-
self.assertEqual(_implicit_environ.CONNECTION, fake_cnxn)
311+
self.assertEqual(_implicit_environ.get_default_connection(), fake_cnxn)
300312

301313

302314
class Test_set_defaults(unittest2.TestCase):

gcloud/datastore/test__implicit_environ.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ def test_preset(self):
2929
from gcloud.datastore import _implicit_environ
3030

3131
SENTINEL = object()
32-
with _Monkey(_implicit_environ, CONNECTION=SENTINEL):
32+
MOCK_DEFAULTS = _implicit_environ._DefaultsContainer(SENTINEL, None)
33+
with _Monkey(_implicit_environ, _DEFAULTS=MOCK_DEFAULTS):
3334
self.assertEqual(self._callFUT(), SENTINEL)
3435

3536

@@ -47,5 +48,6 @@ def test_preset(self):
4748
from gcloud.datastore import _implicit_environ
4849

4950
SENTINEL = object()
50-
with _Monkey(_implicit_environ, DATASET_ID=SENTINEL):
51+
MOCK_DEFAULTS = _implicit_environ._DefaultsContainer(None, SENTINEL)
52+
with _Monkey(_implicit_environ, _DEFAULTS=MOCK_DEFAULTS):
5153
self.assertEqual(self._callFUT(), SENTINEL)

0 commit comments

Comments
 (0)