From: Mike Bayer Date: Fri, 20 Jul 2007 17:17:46 +0000 (+0000) Subject: dont clobber existing methodnames, [ticket:596] X-Git-Tag: rel_0_4_6~61 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8da43f42c0314cae7f297e85651fd429e771a5a8;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git dont clobber existing methodnames, [ticket:596] --- diff --git a/lib/sqlalchemy/ext/assignmapper.py b/lib/sqlalchemy/ext/assignmapper.py index 03c6cc1f83..2380417020 100644 --- a/lib/sqlalchemy/ext/assignmapper.py +++ b/lib/sqlalchemy/ext/assignmapper.py @@ -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_) diff --git a/test/ext/assignmapper.py b/test/ext/assignmapper.py index dbad8de9d1..f3ef3d180d 100644 --- a/test/ext/assignmapper.py +++ b/test/ext/assignmapper.py @@ -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__':