summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/orm/mapper.py4
-rw-r--r--lib/sqlalchemy/orm/session.py9
-rw-r--r--lib/sqlalchemy/orm/unitofwork.py7
-rw-r--r--lib/sqlalchemy/util.py25
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"""