Fixed proxy dict contains method
This commit is contained in:
@@ -4,6 +4,12 @@ Changelog
|
||||
Here you can see the full list of changes between each SQLAlchemy-Utils release.
|
||||
|
||||
|
||||
0.12.4 (2013-06-01)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- Fixed ProxyDict contains method
|
||||
|
||||
|
||||
0.12.3 (2013-05-30)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
2
setup.py
2
setup.py
@@ -24,7 +24,7 @@ class PyTest(Command):
|
||||
|
||||
setup(
|
||||
name='SQLAlchemy-Utils',
|
||||
version='0.12.3',
|
||||
version='0.12.4',
|
||||
url='https://github.com/kvesteri/sqlalchemy-utils',
|
||||
license='BSD',
|
||||
author='Konsta Vesterinen',
|
||||
|
@@ -19,31 +19,33 @@ class ProxyDict(object):
|
||||
|
||||
def __contains__(self, key):
|
||||
try:
|
||||
return key in self.cache or self[key]
|
||||
return key in self.cache or self.fetch(key) is not None
|
||||
except KeyError:
|
||||
return False
|
||||
|
||||
def has_key(self, key):
|
||||
return self.__contains__(key)
|
||||
|
||||
def fetch(self, key):
|
||||
return self.collection.filter_by(**{self.key_name: key}).first()
|
||||
session = sa.orm.object_session(self.parent)
|
||||
if session and sa.orm.util.has_identity(self.parent):
|
||||
return self.collection.filter_by(**{self.key_name: key}).first()
|
||||
|
||||
def create_new_instance(self, key):
|
||||
value = self.child_class(**{self.key_name: key})
|
||||
self.collection.append(value)
|
||||
self.cache[key] = value
|
||||
return value
|
||||
|
||||
def __getitem__(self, key):
|
||||
if key in self.cache:
|
||||
return self.cache[key]
|
||||
|
||||
session = sa.orm.object_session(self.parent)
|
||||
if not session or not sa.orm.util.has_identity(self.parent):
|
||||
value = self.create_new_instance(key)
|
||||
else:
|
||||
value = self.fetch(key)
|
||||
if not value:
|
||||
value = self.create_new_instance(key)
|
||||
self.cache[key] = value
|
||||
return value
|
||||
value = self.fetch(key)
|
||||
if value:
|
||||
return value
|
||||
|
||||
return self.create_new_instance(key)
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
try:
|
||||
|
@@ -79,6 +79,12 @@ class TestProxyDict(TestCase):
|
||||
)
|
||||
article.translations['en']
|
||||
|
||||
def test_contains(self):
|
||||
article = self.Article()
|
||||
assert 'en' not in article.translations
|
||||
# does not auto-append new translation
|
||||
assert 'en' not in article.translations
|
||||
|
||||
def test_committing_session_empties_proxy_dict_cache(self):
|
||||
article = self.Article()
|
||||
(
|
||||
|
Reference in New Issue
Block a user