From 7e57010c1952e66e56bd6782b33baffd281091e2 Mon Sep 17 00:00:00 2001 From: ZyX <kp-pav@ya.ru> Date: Sat, 13 Apr 2013 00:09:00 +0400 Subject: [PATCH] Move some code from powerline_autodoc to powerline.lib.inspect To make it available later in lint checker. --- docs/source/powerline_autodoc.py | 60 +++----------------------------- powerline/lint/inspect.py | 59 +++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 55 deletions(-) create mode 100644 powerline/lint/inspect.py diff --git a/docs/source/powerline_autodoc.py b/docs/source/powerline_autodoc.py index 87412cfa..4806c3cf 100644 --- a/docs/source/powerline_autodoc.py +++ b/docs/source/powerline_autodoc.py @@ -1,8 +1,8 @@ +# vim:fileencoding=utf-8:noet from sphinx.ext import autodoc -from sphinx.util.inspect import getargspec -from inspect import ArgSpec, formatargspec -from powerline.lib.threaded import ThreadedSegment, KwThreadedSegment -from itertools import count +from inspect import formatargspec +from powerline.lint.inspect import getconfigargspec +from powerline.lib.threaded import ThreadedSegment try: from __builtin__ import unicode @@ -25,57 +25,7 @@ class ThreadedDocumenter(autodoc.FunctionDocumenter): super(ThreadedDocumenter, cls).can_document_member(member, membername, isattr, parent)) def format_args(self): - if isinstance(self.object, ThreadedSegment): - args = ['interval'] - defaults = [getattr(self.object, 'interval', 1)] - if self.object.update_first: - args.append('update_first') - defaults.append(True) - methods = ['render', 'set_state'] - if isinstance(self.object, KwThreadedSegment): - methods += ['key', 'render_one'] - - for method in methods: - if hasattr(self.object, method): - # Note: on <python-2.6 it may return simple tuple, not - # ArgSpec instance. - argspec = getargspec(getattr(self.object, method)) - for i, arg in zip(count(-1, -1), reversed(argspec.args)): - if (arg == 'self' or - (arg == 'segment_info' and - getattr(self.object, 'powerline_requires_segment_info', None)) or - (arg == 'pl') or - (method.startswith('render') and (1 if argspec.args[0] == 'self' else 0) - i == len(argspec.args)) or - arg in args): - continue - if argspec.defaults and len(argspec.defaults) >= -i: - default = argspec.defaults[i] - defaults.append(default) - args.append(arg) - else: - args.insert(0, arg) - argspec = ArgSpec(args=args, varargs=None, keywords=None, defaults=tuple(defaults)) - else: - if hasattr(self.object, 'powerline_origin'): - obj = self.object.powerline_origin - else: - obj = self.object - - argspec = getargspec(obj) - args = [] - defaults = [] - for i, arg in zip(count(-1, -1), reversed(argspec.args)): - if ((arg == 'segment_info' and getattr(self.object, 'powerline_requires_segment_info', None)) or - arg == 'pl'): - continue - if argspec.defaults and len(argspec.defaults) >= -i: - default = argspec.defaults[i] - defaults.append(default) - args.append(arg) - else: - args.insert(0, arg) - argspec = ArgSpec(args=args, varargs=argspec.varargs, keywords=argspec.keywords, defaults=tuple(defaults)) - + argspec = getconfigargspec(self.object) return formatargspec(*argspec, formatvalue=formatvalue).replace('\\', '\\\\') diff --git a/powerline/lint/inspect.py b/powerline/lint/inspect.py new file mode 100644 index 00000000..6c2c0fab --- /dev/null +++ b/powerline/lint/inspect.py @@ -0,0 +1,59 @@ +# vim:fileencoding=utf-8:noet +from __future__ import absolute_import +from inspect import ArgSpec, getargspec +from powerline.lib.threaded import ThreadedSegment, KwThreadedSegment +from itertools import count + +def getconfigargspec(obj): + if isinstance(obj, ThreadedSegment): + args = ['interval'] + defaults = [getattr(obj, 'interval', 1)] + if obj.update_first: + args.append('update_first') + defaults.append(True) + methods = ['render', 'set_state'] + if isinstance(obj, KwThreadedSegment): + methods += ['key', 'render_one'] + + for method in methods: + if hasattr(obj, method): + # Note: on <python-2.6 it may return simple tuple, not + # ArgSpec instance. + argspec = getargspec(getattr(obj, method)) + for i, arg in zip(count(-1, -1), reversed(argspec.args)): + if (arg == 'self' or + (arg == 'segment_info' and + getattr(obj, 'powerline_requires_segment_info', None)) or + (arg == 'pl') or + (method.startswith('render') and (1 if argspec.args[0] == 'self' else 0) - i == len(argspec.args)) or + arg in args): + continue + if argspec.defaults and len(argspec.defaults) >= -i: + default = argspec.defaults[i] + defaults.append(default) + args.append(arg) + else: + args.insert(0, arg) + argspec = ArgSpec(args=args, varargs=None, keywords=None, defaults=tuple(defaults)) + else: + if hasattr(obj, 'powerline_origin'): + obj = obj.powerline_origin + else: + obj = obj + + argspec = getargspec(obj) + args = [] + defaults = [] + for i, arg in zip(count(-1, -1), reversed(argspec.args)): + if ((arg == 'segment_info' and getattr(obj, 'powerline_requires_segment_info', None)) or + arg == 'pl'): + continue + if argspec.defaults and len(argspec.defaults) >= -i: + default = argspec.defaults[i] + defaults.append(default) + args.append(arg) + else: + args.insert(0, arg) + argspec = ArgSpec(args=args, varargs=argspec.varargs, keywords=argspec.keywords, defaults=tuple(defaults)) + + return argspec