diff options
| author | Georg Brandl <georg@python.org> | 2011-09-22 10:42:09 +0200 |
|---|---|---|
| committer | Georg Brandl <georg@python.org> | 2011-09-22 10:42:09 +0200 |
| commit | c5599ea28eeac416ab4646a9ef1b9eb3d783f8b7 (patch) | |
| tree | 76a1db0ec536f130b4394c48be68fee820d8024b /sphinx/util/inspect.py | |
| parent | ccef6db7cb04db18258c41a4fd5af6384525737a (diff) | |
| parent | 7cabc9f2a989a78753f9ddcbfd941dd3fc45e106 (diff) | |
| download | sphinx-c5599ea28eeac416ab4646a9ef1b9eb3d783f8b7.tar.gz | |
Merge with 1.0
Diffstat (limited to 'sphinx/util/inspect.py')
| -rw-r--r-- | sphinx/util/inspect.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/sphinx/util/inspect.py b/sphinx/util/inspect.py index a0574003..ff6c222d 100644 --- a/sphinx/util/inspect.py +++ b/sphinx/util/inspect.py @@ -9,6 +9,44 @@ :license: BSD, see LICENSE for details. """ +import sys + +# this imports the standard library inspect module without resorting to +# relatively import this module +inspect = __import__('inspect') + + +if sys.version_info >= (2, 5): + from functools import partial + def getargspec(func): + """Like inspect.getargspec but supports functools.partial as well.""" + if inspect.ismethod(func): + func = func.im_func + parts = 0, () + if type(func) is partial: + parts = len(func.args), func.keywords.keys() + func = func.func + if not inspect.isfunction(func): + raise TypeError('%r is not a Python function' % func) + args, varargs, varkw = inspect.getargs(func.func_code) + func_defaults = func.func_defaults + if func_defaults: + func_defaults = list(func_defaults) + if parts[0]: + args = args[parts[0]:] + if parts[1]: + for arg in parts[1]: + i = args.index(arg) - len(args) + del args[i] + try: + del func_defaults[i] + except IndexError: + pass + return inspect.ArgSpec(args, varargs, varkw, func_defaults) +else: + getargspec = inspect.getargspec + + def isdescriptor(x): """Check if the object is some kind of descriptor.""" for item in '__get__', '__set__', '__delete__': @@ -41,3 +79,12 @@ def safe_getmembers(object, predicate=None): results.append((key, value)) results.sort() return results + + +def safe_repr(object): + """A repr() implementation that returns text safe to use in reST context.""" + try: + s = repr(object) + except Exception: + raise ValueError + return s.replace('\n', ' ') |
