diff --git a/tools/print_signatures.py b/tools/print_signatures.py index 19378d50f8845ed677d767ca16167073b801c966..efb925a5a990ddf534aa58cd3b52cff781e4c4eb 100644 --- a/tools/print_signatures.py +++ b/tools/print_signatures.py @@ -53,19 +53,23 @@ def get_functools_partial_spec(func): return '{}(args={}, keywords={})'.format(func_str, args, keywords) -def format_spec_doc(spec, doc=None): +def format_spec(spec): args = spec.args varargs = spec.varargs keywords = spec.keywords - defaults = list(spec.defaults) - for idx, item in enumerate(defaults): - if not isinstance(item, functools.partial): - continue + defaults = spec.defaults + if defaults is not None: + defaults = list(defaults) + for idx, item in enumerate(defaults): + if not isinstance(item, functools.partial): + continue + + defaults[idx] = get_functools_partial_spec(item) - defaults[idx] = get_functools_partial_spec(item) + defaults = tuple(defaults) return 'ArgSpec(args={}, varargs={}, keywords={}, defaults={})'.format( - args, varargs, keywords, tuple(defaults)) + args, varargs, keywords, defaults) def queue_dict(member, cur_name): @@ -78,12 +82,18 @@ def queue_dict(member, cur_name): args = member.__module__ + "." + member.__name__ else: try: - args = format_spec_doc(inspect.getargspec(member)) + args = inspect.getargspec(member) + has_type_error = False except TypeError: # special for PyBind method args = " ".join([ line.strip() for line in pydoc.render_doc(member).split('\n') if "->" in line ]) + has_type_error = True + + if not has_type_error: + args = format_spec(args) + member_dict[cur_name] = "({}, ('document', '{}'))".format(args, doc_md5)