diff options
| author | Georg Brandl <georg@python.org> | 2009-08-06 22:06:19 +0200 |
|---|---|---|
| committer | Georg Brandl <georg@python.org> | 2009-08-06 22:06:19 +0200 |
| commit | 98b67551457e311c6dbd77b7e7ce7043a65f2db5 (patch) | |
| tree | 6f25a80501a81883aef562f251386125d2f11ae0 /sphinx/util/inspect.py | |
| parent | f55c69c7a65d5d735c2084b97a5652ce64745c1f (diff) | |
| download | sphinx-98b67551457e311c6dbd77b7e7ce7043a65f2db5.tar.gz | |
#229: Fix autodoc failures with members that raise errors
on ``getattr()``.
Diffstat (limited to 'sphinx/util/inspect.py')
| -rw-r--r-- | sphinx/util/inspect.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/sphinx/util/inspect.py b/sphinx/util/inspect.py new file mode 100644 index 00000000..9cec5dec --- /dev/null +++ b/sphinx/util/inspect.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +""" + sphinx.util.inspect + ~~~~~~~~~~~~~~~~~~~ + + Helpers for inspecting Python modules. + + :copyright: Copyright 2007-2009 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +def isdescriptor(x): + """Check if the object is some kind of descriptor.""" + for item in '__get__', '__set__', '__delete__': + if hasattr(safe_getattr(x, item, None), '__call__'): + return True + return False + + +def safe_getattr(obj, name, *defargs): + """A getattr() that turns all exceptions into AttributeErrors.""" + try: + return getattr(obj, name, *defargs) + except Exception: + # this is a catch-all for all the weird things that some modules do + # with attribute access + if defargs: + return defargs[0] + raise AttributeError(name) + + +def safe_getmembers(object, predicate=None): + """A version of inspect.getmembers() that uses safe_getattr().""" + results = [] + for key in dir(object): + try: + value = safe_getattr(object, key, None) + except AttributeError: + continue + if not predicate or predicate(value): + results.append((key, value)) + results.sort() + return results |
