]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
yes ive been watching the IRC channel. restored setup_instance() to ClassManager...
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 31 Dec 2008 05:28:53 +0000 (05:28 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 31 Dec 2008 05:28:53 +0000 (05:28 +0000)
lib/sqlalchemy/orm/attributes.py
lib/sqlalchemy/orm/mapper.py
test/orm/mapper.py

index f113a4eb95ae755c35df27f1e63eda46de14f992..df607adf877ad22c5f54962c9c41b454b19c0607 100644 (file)
@@ -1246,6 +1246,9 @@ class ClassManager(dict):
         setattr(instance, self.STATE_ATTR, state or self.instance_state_factory(instance, self))
         return instance
 
+    def setup_instance(self, instance, state=None):
+        setattr(instance, self.STATE_ATTR, state or self.instance_state_factory(instance, self))
+        
     def _new_state_if_none(self, instance):
         """Install a default InstanceState if none is present.
 
@@ -1333,7 +1336,7 @@ class _ClassInstrumentationAdapter(ClassManager):
 
     def new_instance(self, state=None):
         instance = self.class_.__new__(self.class_)
-        self._setup_instance(instance, state)
+        self.setup_instance(instance, state)
         return instance
 
     def _new_state_if_none(self, instance):
@@ -1344,9 +1347,9 @@ class _ClassInstrumentationAdapter(ClassManager):
         if self.has_state(instance):
             return False
         else:
-            return self._setup_instance(instance)
+            return self.setup_instance(instance)
 
-    def _setup_instance(self, instance, state=None):
+    def setup_instance(self, instance, state=None):
         self._adapted.initialize_instance_dict(self.class_, instance)
         
         if state is None:
index c3ff4e47c26274ed9032abc09ff57de77fc9ee1a..0dc3465327a87a23339814c287aa0ba210b40b1a 100644 (file)
@@ -1616,7 +1616,6 @@ class Mapper(object):
                     if instance is EXT_CONTINUE:
                         instance = self.class_manager.new_instance()
                     else:
-                        # TODO: don't think theres coverage here
                         manager = attributes.manager_of_class(instance.__class__)
                         # TODO: if manager is None, raise a friendly error about
                         # returning instances of unmapped types
index 35d6272699caf471f6ec16778165e36a578d28bf..4e8412bd93697b963515c4ff6099428e1cd77cb9 100644 (file)
@@ -2101,7 +2101,22 @@ class MapperExtensionTest(_fixtures.FixtureTest):
              'create_instance', 'populate_instance', 'reconstruct_instance',
              'append_result', 'before_update', 'after_update', 'before_delete',
              'after_delete'])
-
+        
+    @testing.resolve_artifact_names
+    def test_create_instance(self):
+        class CreateUserExt(sa.orm.MapperExtension):
+            def create_instance(self, mapper, selectcontext, row, class_):
+                return User.__new__(User)
+                
+        mapper(User, users, extension=CreateUserExt())
+        sess = create_session()
+        u1 = User()
+        u1.name = 'ed'
+        sess.add(u1)
+        sess.flush()
+        sess.clear()
+        assert sess.query(User).first()
+        
 
 class RequirementsTest(_base.MappedTest):
     """Tests the contract for user classes."""