Skip to content

Commit

Permalink
Adding lazy loading support for datastore connection.
Browse files Browse the repository at this point in the history
  • Loading branch information
dhermes committed Feb 19, 2015
1 parent 3872413 commit fa04127
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 18 deletions.
17 changes: 14 additions & 3 deletions gcloud/datastore/_implicit_environ.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,9 +119,9 @@ def _determine_default_dataset_id(dataset_id=None):


def _lazy_dataset_id():
"""Alias wrapper for _determine_default_dataset_id.
"""Alias wrapper for ``_determine_default_dataset_id``.
Unit test need to be able to replace _determine_default_dataset_id()
Unit tests need to be able to replace :func:`_determine_default_dataset_id`
so we can't wrap the actual ``function`` object in a ``_LazyProperty``.
"""
return _determine_default_dataset_id()
Expand Down Expand Up @@ -181,6 +181,15 @@ def get_connection():
return Connection(credentials=scoped_credentials)


def _lazy_connection():
"""Alias wrapper for ``get_connection``.
Unit tests need to be able to replace :func:`get_connection`
so we can't wrap the actual ``function`` object in a ``_LazyProperty``.
"""
return get_connection()


def set_default_connection(connection=None):
"""Set default connection either explicitly or implicitly as fall-back.
Expand Down Expand Up @@ -236,9 +245,11 @@ class _DefaultsContainer(object):
"""

dataset_id = _LazyProperty('dataset_id', _lazy_dataset_id)
connection = _LazyProperty('connection', _lazy_connection)

def __init__(self, connection=None, dataset_id=None, implicit=False):
self.connection = connection
if connection is not None or not implicit:
self.connection = connection
if dataset_id is not None or not implicit:
self.dataset_id = dataset_id

Expand Down
34 changes: 19 additions & 15 deletions gcloud/datastore/test__implicit_environ.py
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ def test_set_implicit_three_env_appengine_and_compute(self):
self.assertEqual(connection.timeout, None)


class Test_lazy_loaded_dataset_id(unittest2.TestCase):
class Test_lazy_loading(unittest2.TestCase):

def setUp(self):
from gcloud.datastore._testing import _setup_defaults
Expand All @@ -335,15 +335,6 @@ def tearDown(self):
from gcloud.datastore._testing import _tear_down_defaults
_tear_down_defaults(self)

def test_prop_default(self):
from gcloud.datastore import _implicit_environ
from gcloud.datastore._implicit_environ import _DefaultsContainer
from gcloud.datastore._implicit_environ import _LazyProperty

self.assertTrue(isinstance(_DefaultsContainer.dataset_id,
_LazyProperty))
self.assertEqual(_implicit_environ._DEFAULTS.dataset_id, None)

def test_prop_on_wrong_class(self):
from gcloud.datastore._implicit_environ import _LazyProperty

Expand All @@ -357,7 +348,7 @@ class FakeEnv(object):
self.assertTrue(FakeEnv.dataset_id is data_prop)
self.assertTrue(FakeEnv().dataset_id is data_prop)

def test_prop_descriptor(self):
def test_descriptor_for_dataset_id(self):
from gcloud._testing import _Monkey
from gcloud.datastore import _implicit_environ

Expand All @@ -366,17 +357,30 @@ def test_prop_descriptor(self):

DEFAULT = object()

def mock_default():
return DEFAULT

with _Monkey(_implicit_environ,
_determine_default_dataset_id=mock_default):
_determine_default_dataset_id=lambda: DEFAULT):
lazy_loaded = _implicit_environ._DEFAULTS.dataset_id

self.assertEqual(lazy_loaded, DEFAULT)
self.assertTrue(
'dataset_id' in _implicit_environ._DEFAULTS.__dict__)

def test_descriptor_for_connection(self):
from gcloud._testing import _Monkey
from gcloud.datastore import _implicit_environ

self.assertFalse(
'connection' in _implicit_environ._DEFAULTS.__dict__)

DEFAULT = object()

with _Monkey(_implicit_environ, get_connection=lambda: DEFAULT):
lazy_loaded = _implicit_environ._DEFAULTS.connection

self.assertEqual(lazy_loaded, DEFAULT)
self.assertTrue(
'connection' in _implicit_environ._DEFAULTS.__dict__)


class Test_get_connection(unittest2.TestCase):

Expand Down

0 comments on commit fa04127

Please sign in to comment.