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