From f4bab47d368481ba3eedeaf25762d0883b4eb048 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 7 Sep 2005 07:17:31 +0000 Subject: [PATCH] --- lib/sqlalchemy/objectstore.py | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/lib/sqlalchemy/objectstore.py b/lib/sqlalchemy/objectstore.py index 714ea8c292..3ac0496604 100644 --- a/lib/sqlalchemy/objectstore.py +++ b/lib/sqlalchemy/objectstore.py @@ -114,13 +114,29 @@ class UnitOfWork: self.deleted = util.HashSet() self.attribute_history = weakref.WeakKeyDictionary() - def attribute_set(self, obj, key, value): - self.register_attribute(obj, key).setattr(value) + def attribute_set_callable(self, obj, key, func): + obj.__dict__[key] = func + + def get_attribute(self, obj, key): + try: + v = obj.__dict__[key] + except KeyError: + raise AttributeError(key) + if (callable(v)): + v = v() + obj.__dict__[key] = v + self.register_attribute(obj, key).setattr_clean(v) + return v + + def attribute_set(self, obj, key, value, usehistory = False): + if usehistory: + self.register_attribute(obj, key).setattr(value) obj.__dict__[key] = value self.register_dirty(obj) - def attribute_deleted(self, obj, key, value): - self.register_attribute(obj, key).delattr(value) + def attribute_deleted(self, obj, key, value, usehistory = False): + if usehistory: + self.register_attribute(obj, key).delattr(value) del obj.__dict__[key] self.register_dirty(obj) @@ -173,7 +189,14 @@ class UnitOfWork: pass def is_dirty(self, obj): - return self.dirty.contains(obj) + if not self.dirty.contains(obj): + if not self.clean.contains(obj): + # TODO: should this be register_new ? + self.register_dirty(obj) + return True + return False + else: + return True def register_deleted(self, obj): pass -- 2.47.2