diff options
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/orm/mapper.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/session.py | 9 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/unitofwork.py | 7 | ||||
| -rw-r--r-- | lib/sqlalchemy/util.py | 25 |
4 files changed, 25 insertions, 20 deletions
diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index fd36700e6..d7449c7ca 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -178,8 +178,8 @@ class Mapper(object): members of the object are accessed.""" def _get_data(s): self.compile() - return s.__dict__['_OrderedProperties__data'] - _OrderedProperties__data = property(_get_data) + return s.__dict__['_data'] + _data = property(_get_data) self.columns = LOrderedProp() self.c = self.columns diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py index 36522379f..1d872c8c4 100644 --- a/lib/sqlalchemy/orm/session.py +++ b/lib/sqlalchemy/orm/session.py @@ -75,15 +75,16 @@ class Session(object): The Session object is **not** threadsafe. For thread-management of Sessions, see the sqlalchemy.ext.sessioncontext module.""" - def __init__(self, bind_to=None, hash_key=None, import_session=None, echo_uow=False): + def __init__(self, bind_to=None, hash_key=None, import_session=None, echo_uow=False, weak_identity_map=False): if import_session is not None: - self.uow = unitofwork.UnitOfWork(identity_map=import_session.uow.identity_map) + self.uow = unitofwork.UnitOfWork(identity_map=import_session.uow.identity_map, weak_identity_map=weak_identity_map) else: - self.uow = unitofwork.UnitOfWork() + self.uow = unitofwork.UnitOfWork(weak_identity_map=weak_identity_map) self.bind_to = bind_to self.binds = {} self.echo_uow = echo_uow + self.weak_identity_map = weak_identity_map self.transaction = None if hash_key is None: self.hash_key = id(self) @@ -147,7 +148,7 @@ class Session(object): for instance in self: self._unattach(instance) echo = self.uow.echo - self.uow = unitofwork.UnitOfWork() + self.uow = unitofwork.UnitOfWork(weak_identity_map=self.weak_identity_map) self.uow.echo = echo def mapper(self, class_, entity_name=None): diff --git a/lib/sqlalchemy/orm/unitofwork.py b/lib/sqlalchemy/orm/unitofwork.py index 3c1238287..3f2583eaf 100644 --- a/lib/sqlalchemy/orm/unitofwork.py +++ b/lib/sqlalchemy/orm/unitofwork.py @@ -73,11 +73,14 @@ class UnitOfWork(object): """main UOW object which stores lists of dirty/new/deleted objects. provides top-level "flush" functionality as well as the transaction boundaries with the SQLEngine(s) involved in a write operation.""" - def __init__(self, identity_map=None): + def __init__(self, identity_map=None, weak_identity_map=False): if identity_map is not None: self.identity_map = identity_map else: - self.identity_map = weakref.WeakValueDictionary() + if weak_identity_map: + self.identity_map = weakref.WeakValueDictionary() + else: + self.identity_map = {} self.new = util.Set() #OrderedSet() self.deleted = util.Set() diff --git a/lib/sqlalchemy/util.py b/lib/sqlalchemy/util.py index 470217936..21f380980 100644 --- a/lib/sqlalchemy/util.py +++ b/lib/sqlalchemy/util.py @@ -93,39 +93,40 @@ class OrderedProperties(object): no append or extend.) """ def __init__(self): - self.__dict__['_OrderedProperties__data'] = OrderedDict() + self.__dict__['_data'] = OrderedDict() def __len__(self): - return len(self.__data) + return len(self._data) def __iter__(self): - return self.__data.itervalues() + return self._data.itervalues() def __add__(self, other): return list(self) + list(other) def __setitem__(self, key, object): - self.__data[key] = object + self._data[key] = object def __getitem__(self, key): - return self.__data[key] + return self._data[key] def __delitem__(self, key): - del self.__data[key] + del self._data[key] def __setattr__(self, key, object): - self.__data[key] = object + self._data[key] = object + _data = property(lambda s:s.__dict__['_data']) def __getattr__(self, key): try: - return self.__dict__['_OrderedProperties__data'][key] + return self._data[key] except KeyError: raise AttributeError(key) def __contains__(self, key): - return key in self.__data + return key in self._data def get(self, key, default=None): if self.has_key(key): return self[key] else: return default def keys(self): - return self.__data.keys() + return self._data.keys() def has_key(self, key): - return self.__data.has_key(key) + return self._data.has_key(key) def clear(self): - self.__data.clear() + self._data.clear() class OrderedDict(dict): """A Dictionary that returns keys/values/items in the order they were added""" |
