Source code for nengo_sphinx_theme.ext.resolvedefaults

import inspect
import warnings

from nengo.params import Default, IntParam, iter_params, StringParam


[docs]class TestClass: """For testing that defaults are properly rendered in docs.""" int_param = IntParam("int_param", default=1) str_param = StringParam("str_param", default="hello") def __init__(self, int_param=Default, str_param=Default): pass
class DisplayDefault: def __init__(self, value): self.value = value def __repr__(self): return "Default<{!r}>".format(self.value) def resolve_default(cls, arg, value): if value is not Default: return value else: for param in (getattr(cls, name) for name in iter_params(cls)): if param.name == arg: return DisplayDefault(param.default) warnings.warn( "Default value for argument {} of {} could not be " "resolved.".format(arg, cls) ) return value def autodoc_defaults(app, what, name, obj, options, signature, return_annotation): if what != "class": return None spec = inspect.getfullargspec(obj.__init__) if spec.defaults is None or not any(val is Default for val in spec.defaults): return None defaults = [ resolve_default(obj, arg, d) for arg, d in zip(spec.args[-len(spec.defaults) :], spec.defaults) ] # pylint: disable=deprecated-method return ( inspect.formatargspec( spec.args, spec.varargs, spec.varkw, defaults, spec.kwonlyargs, spec.kwonlydefaults, spec.annotations, ), return_annotation, ) def setup(app): app.connect("autodoc-process-signature", autodoc_defaults)