]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
dont clobber existing methodnames, [ticket:596]
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 20 Jul 2007 17:17:46 +0000 (17:17 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 20 Jul 2007 17:17:46 +0000 (17:17 +0000)
lib/sqlalchemy/ext/assignmapper.py
test/ext/assignmapper.py

index 03c6cc1f83da460b997ecfe19ac97b4ca0bbab17..2380417020b3806c3c1c4590d12a0effd59d1cb5 100644 (file)
@@ -10,7 +10,8 @@ def _monkeypatch_session_method(name, ctx, class_):
         do.__name__ = name
     except:
         pass
-    setattr(class_, name, do)
+    if not hasattr(class_, name): 
+        setattr(class_, name, do)
         
 def assign_mapper(ctx, class_, *args, **kwargs):
     extension = kwargs.pop('extension', None)
@@ -36,7 +37,9 @@ def assign_mapper(ctx, class_, *args, **kwargs):
             return getattr(ctx.current.query(class_), key)
         def __call__(self):
             return ctx.current.query(class_)
-    class_.query = query()
+
+    if not hasattr(class_, 'query'): 
+        class_.query = query()
     
     for name in ['refresh', 'expire', 'delete', 'expunge', 'update']:
         _monkeypatch_session_method(name, ctx, class_)
index dbad8de9d14a0689fd212edf8d93284b101f8325..f3ef3d180d7bd90c340df5aa6aa460cb1eadf929 100644 (file)
@@ -43,8 +43,10 @@ class AssignMapperTest(PersistTest):
     def tearDownAll(self):
         metadata.drop_all()
     def tearDown(self):
+        for table in metadata.table_iterator(reverse=True):
+            table.delete().execute()
         clear_mappers()
-
+        
     def test_override_attributes(self):
         
         sso = SomeOtherObject.query().first()
@@ -64,6 +66,14 @@ class AssignMapperTest(PersistTest):
         except exceptions.ArgumentError:
             pass
     
+    def test_dont_clobber_methods(self):
+        class MyClass(object):
+            def expunge(self):
+                return "an expunge !"
+        
+        assign_mapper(ctx, MyClass, table2)
+        
+        assert MyClass().expunge() == "an expunge !"
 
         
 if __name__ == '__main__':