]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
(no commit message)
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 17 Sep 2005 18:34:25 +0000 (18:34 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 17 Sep 2005 18:34:25 +0000 (18:34 +0000)
lib/sqlalchemy/attributes.py
lib/sqlalchemy/mapper.py
lib/sqlalchemy/objectstore.py
lib/sqlalchemy/util.py
test/objectstore.py

index 9bc72c6e25399dc2f8a3b843df7e2003577fa624..1e1cab893c8b12068d647c5de312e4d83fe4cc1a 100644 (file)
@@ -37,7 +37,6 @@ class ListElement(util.HistoryArraySet):
 
     def list_value_changed(self, obj, key, listval):
         pass    
-#        uow().modified_lists.append(self)
 
     def setattr(self, value):
         self.obj.__dict__[self.key] = value
@@ -102,6 +101,9 @@ class AttributeManager(object):
 #        else:
 #            self.register_new(obj)
 
+    def create_prop(self, key, uselist):
+        return SmartProperty(self).property(key, uselist)
+        
     def create_list(self, obj, key, list_):
         return ListElement(obj, key, list_)
         
@@ -182,4 +184,4 @@ class AttributeManager(object):
                 return p
 
     def register_attribute(self, class_, key, uselist):
-        setattr(class_, key, SmartProperty(self).property(key, uselist))
+        setattr(class_, key, self.create_prop(key, uselist))
index 953c02d382d5fe168e90d7e33f61866d505a117a..b7f5fd53e6d9b28b55b2040d6e6dff68f27a6b86 100644 (file)
@@ -22,7 +22,7 @@ import sqlalchemy.util as util
 import sqlalchemy.objectstore as objectstore
 import random, copy, types
 
-__ALL__ = ['eagermapper', 'eagerloader', 'lazymapper', 'lazyloader', 'eagerload', 'lazyload', 'mapper', 'lazyloader', 'lazymapper']
+__ALL__ = ['eagermapper', 'eagerloader', 'lazymapper', 'lazyloader', 'eagerload', 'lazyload', 'mapper', 'lazyloader', 'lazymapper', 'clear_mappers']
 
 def relation(*args, **params):
     if isinstance(args[0], Mapper):
@@ -39,6 +39,7 @@ def relation_loader(mapper, secondary = None, primaryjoin = None, secondaryjoin
 def relation_mapper(class_, selectable, secondary = None, primaryjoin = None, secondaryjoin = None, table = None, properties = None, lazy = True, uselist = True, foreignkey = None, primary_keys = None, **options):
     return relation_loader(mapper(class_, selectable, table=table, properties=properties, primary_keys=primary_keys, **options), secondary, primaryjoin, secondaryjoin, lazy = lazy, uselist = uselist, foreignkey = foreignkey, **options)
 
+# TODO: where do we want to register these mappers, register them against their classes/objects etc
 _mappers = {}
 def mapper(*args, **params):
     hashkey = mapper_hash_key(*args, **params)
@@ -48,7 +49,10 @@ def mapper(*args, **params):
     except KeyError:
         m = Mapper(hashkey, *args, **params)
         return _mappers.setdefault(hashkey, m)
-    
+
+def clear_mappers():
+    _mappers.clear()
+        
 def eagerload(name):
     return EagerLazySwitcher(name, toeager = True)
 
@@ -151,6 +155,7 @@ class Mapper(object):
 
     def init(self):
         [prop.init(key, self) for key, prop in self.props.iteritems()]
+        print "well hi!"
         self.class_._mapper = self.hashkey
 
     def instances(self, cursor, db = None):
@@ -250,6 +255,8 @@ class Mapper(object):
             insert = []
             update = []
             for obj in objects:
+                
+#                print "SAVE_OBJ we are " + hash_key(self) + " obj: " +  obj.__class__.__name__ + repr(id(obj))
                 params = {}
                 for col in table.columns:
                     params[col.key] = self._getattrbycolumn(obj, col)
@@ -525,9 +532,9 @@ class PropertyLoader(MapperProperty):
 
         def getlist(obj):
             if self.uselist:
-                return uowcommit.uow.manager.get_list_history(obj, self.key)
+                return uowcommit.uow.attributes.get_list_history(obj, self.key)
             else: 
-                return uowcommit.uow.manager.get_history(obj, self.key)
+                return uowcommit.uow.attributes.get_history(obj, self.key)
 
         clearkeys = False
         
@@ -569,6 +576,10 @@ class PropertyLoader(MapperProperty):
         elif self.foreignkey.table == self.parent.table:
             for child in deplist:
                 childlist = getlist(child)
+                try:
+                    print "got a list and its " + repr(childlist)
+                except:
+                    pass
                 for obj in childlist.added_items():
                     associationrow = {}
                     self.primaryjoin.accept_visitor(setter)
index a0c49ac5d1c08a72c48d8d4d531d8f0f076a33b5..d18dca90082e8710f37d778eeed4f82755ef2d16 100644 (file)
@@ -96,6 +96,10 @@ def has_key(key):
     else:
         return False
 
+class UOWSmartProperty(attributes.SmartProperty):
+    def attribute_registry(self):
+        return uow().attributes
+    
 class UOWListElement(attributes.ListElement):
     def list_value_changed(self, obj, key, listval):
         uow().modified_lists.append(self)
@@ -111,6 +115,9 @@ class UOWAttributeManager(attributes.AttributeManager):
         else:
             self.uow.register_new(obj)
 
+    def create_prop(self, key, uselist):
+        return UOWSmartProperty(self).property(key, uselist)
+
     def create_list(self, obj, key, list_):
         return UOWListElement(obj, key, list_)
         
@@ -177,8 +184,9 @@ class UnitOfWork(object):
         else:
             for obj in [n for n in self.new] + [d for d in self.dirty]:
                 commit_context.append_task(obj)
+                print "COMMIT append  " + obj.__class__.__name__ + " " + repr(id(obj))
             for item in self.modified_lists:
-                obj = item.obj()
+                obj = item.obj
                 commit_context.append_task(obj)
 
         engines = util.HashSet()
index 20d45142f248d27b68bd69ac276ac12da2513f69..1575c2858282795cc974ce18091a35760e335190 100644 (file)
@@ -245,48 +245,6 @@ class HistoryArraySet(UserList.UserList):
     def __iadd__(self, other):
         raise NotImplementedError()
 
-class PropHistory(object):
-    def __init__(self, current):
-        self.added = None
-        self.current = current
-        self.deleted = None
-    def setattr_clean(self, value):
-        self.current = value
-    def setattr(self, value):
-        self.deleted = self.current
-        self.current = None
-        self.added = value
-    def delattr(self):
-        self.deleted = self.current
-        self.current = None
-    def rollback(self):
-        if self.deleted is not None:
-            self.current = self.deleted
-            self.deleted = None
-        else:
-            self.current = None
-        self.added = None
-        self.deleted = None
-    def clear_history(self):
-        if self.added is not None:
-            self.current = self.added
-            self.added = None
-        self.deleted = None
-    def added_items(self):
-        if self.added is not None:
-            return [self.added]
-        else:
-            return []
-    def deleted_items(self):
-        if self.deleted is not None:
-            return [self.deleted]
-        else:
-            return []
-    def unchanged_items(self):
-        if self.current is not None:
-            return [self.current]
-        else:
-            return []
         
 class ScopedRegistry(object):
     def __init__(self, createfunc, defaultscope):
index a257b4b4fc0d1470308a935ad300091080f71148..0684e302ee9d2603e2da4600e171a1f5dd74821d 100644 (file)
@@ -39,7 +39,8 @@ class SaveTest(AssertMixin):
 
     def setUp(self):
         objectstore.clear()
-
+        clear_mappers()
+        
     def testbasic(self):
         # save two users
         u = User()
@@ -163,6 +164,7 @@ class SaveTest(AssertMixin):
         m = mapper(User, users, properties = dict(
             addresses = relation(Address, addresses, lazy = True)
         ))
+        print "TESTONETOMANY, mapper is " + repr(id(m))
         u = User()
         u.user_name = 'one2manytester'
         u.addresses = []
@@ -172,7 +174,8 @@ class SaveTest(AssertMixin):
         a2 = Address()
         a2.email_address = 'lala@test.org'
         u.addresses.append(a2)
-
+        print repr(u.addresses)
+        print repr(u.addresses.added_items())
         objectstore.uow().commit()
 
         usertable = engine.ResultProxy(users.select(users.c.user_id.in_(u.user_id)).execute()).fetchall()