diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-07-24 16:25:40 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-07-24 16:25:40 +0000 |
| commit | 3c64a0cf738f4ce2447cbfcd7faadfe3fdf783f1 (patch) | |
| tree | d34d45b02f1499592faae2a3e0df3057a2bb5130 | |
| parent | ade0a51a79e722f8c5d77f2ef5ac10bc530b03d3 (diff) | |
| download | sqlalchemy-3c64a0cf738f4ce2447cbfcd7faadfe3fdf783f1.tar.gz | |
[ticket:254]
| -rw-r--r-- | lib/sqlalchemy/attributes.py | 2 | ||||
| -rw-r--r-- | test/base/attributes.py | 15 |
2 files changed, 16 insertions, 1 deletions
diff --git a/lib/sqlalchemy/attributes.py b/lib/sqlalchemy/attributes.py index 5e2226e9d..724f1c807 100644 --- a/lib/sqlalchemy/attributes.py +++ b/lib/sqlalchemy/attributes.py @@ -573,7 +573,7 @@ class AttributeManager(object): if not isinstance(class_, type): raise repr(class_) + " is not a type" for key in dir(class_): - value = getattr(class_, key) + value = getattr(class_, key, None) if isinstance(value, InstrumentedAttribute): yield value diff --git a/test/base/attributes.py b/test/base/attributes.py index 19eedd0f6..5f555a7e6 100644 --- a/test/base/attributes.py +++ b/test/base/attributes.py @@ -251,6 +251,21 @@ class AttributesTest(PersistTest): b2.element = None assert not manager.get_history(b2, 'element').hasparent(f2) + + def testdescriptorattributes(self): + """changeset: 1633 broke ability to use ORM to map classes with unusual + descriptor attributes (for example, classes that inherit from ones + implementing zope.interface.Interface). + This is a simple regression test to prevent that defect. + """ + class des(object): + def __get__(self, instance, owner): raise AttributeError('fake attribute') + + class Foo(object): + A = des() + + manager = attributes.AttributeManager() + manager.reset_class_managed(Foo) if __name__ == "__main__": unittest.main() |
