Beispiel #1
0
 def testFunc(self):
     found_params = find_param_docs(self.doc)
     self.assertTrue(self.params.keys() == found_params.keys())
     for key, value in self.params.items():
         self.assertTrue(key in found_params)
         found_value = found_params[key]
         self.assertTrue(value[0] == found_value[0])
         for kwarg, val in value[1].items():
             self.assertTrue(val == found_value[1][kwarg])
Beispiel #2
0
 def testFunc(self):
     found_params = find_param_docs(self.doc)
     self.assertTrue(self.params.keys() == found_params.keys())
     for key, value in self.params.items():
         self.assertTrue(key in found_params)
         found_value = found_params[key]
         self.assertTrue(value[0] == found_value[0])
         for kwarg, val in value[1].items():
             self.assertTrue(val == found_value[1][kwarg])
Beispiel #3
0
def test_find_param(doc, params):
        found_params = find_param_docs(doc)
        assert params.keys() == found_params.keys()
        for key, value in params.items():
            assert key in found_params
            found_value = found_params[key]
            assert value[0] == found_value[0]
            for kwarg, val in value[1].items():
                assert val == found_value[1][kwarg]
Beispiel #4
0
def test_find_param(doc, params):
    found_params = find_param_docs(doc)
    assert params.keys() == found_params.keys()
    for key, value in params.items():
        assert key in found_params
        found_value = found_params[key]
        assert value[0] == found_value[0]
        for kwarg, val in value[1].items():
            assert val == found_value[1][kwarg]
Beispiel #5
0
    def _generate_command(self,
                          func,
                          name=None,
                          doctype='rest',
                          *args,
                          **kwargs):
        '''Generate argparse's subparser.

        :param func: The function to analyze.
        :param name: If given, a different name for the command. The default
            one is ``func.__name__``.'''
        func_name = func.__name__
        name = func_name if name is None else name
        argspec = getfullargspec(func)
        self._argspecs[func_name] = argspec
        argz = izip_longest(reversed(argspec.args),
                            reversed(argspec.defaults or []),
                            fillvalue=_POSITIONAL())
        argz = reversed(list(argz))
        doc = (inspect.getdoc(func) or '').strip() + '\n'
        if doctype == 'numpy':
            config = Config(napoleon_google_docstring=False,
                            napoleon_use_rtype=False)
            doc = str(NumpyDocstring(doc, config))
        elif doctype == 'google':
            config = Config(napoleon_numpy_docstring=False,
                            napoleon_use_rtype=False)
            doc = str(GoogleDocstring(doc, config))
        elif doctype == 'rest':
            pass
        else:
            raise ValueError('doctype must be one of "numpy", "google", '
                             'or "rest"')
        cmd_help, cmd_desc = split_doc(purify_doc(doc))
        subparser = self._subparsers.add_parser(name,
                                                help=cmd_help or None,
                                                description=cmd_desc or None,
                                                **kwargs)
        params = find_param_docs(doc)
        for a, kw in self._analyze_func(func, params, argz, argspec.varargs):
            completer = kw.pop('completer', None)
            arg = subparser.add_argument(*a, **purify_kwargs(kw))
            if completer is not None:
                arg.completer = completer

        subparser.set_defaults(**{_DISPATCH_TO: func})
        return func
Beispiel #6
0
    def analyze_func(self, func, doc, argz, varargs_name):
        '''Analyze the given function, merging default arguments, overridden
        arguments (with @arg) and parameters extracted from the docstring.

        :param func: The function to analyze.
        :param doc: The function's docstring.
        :param argz: A list of the form (arg, default), containing arguments
            and their default value.
        :param varargs_name: The name of the variable arguments, if present,
            otherwise ``None``.'''
        params = find_param_docs(doc)
        for arg, default in argz:
            override = getattr(func, '_argopts', {}).get(arg, ((), {}))
            yield merge(arg, default, override, *params.get(arg, ([], {})))
        if varargs_name is not None:
            kwargs = {'nargs': '*'}
            kwargs.update(params.get(varargs_name, (None, {}))[1])
            yield ([varargs_name], kwargs)
Beispiel #7
0
    def analyze_func(self, func, doc, argz, varargs_name):
        """Analyze the given function, merging default arguments, overridden
        arguments (with @arg) and parameters extracted from the docstring.

        :param func: The function to analyze.
        :param doc: The function's docstring.
        :param argz: A list of the form (arg, default), containing arguments
            and their default value.
        :param varargs_name: The name of the variable arguments, if present,
            otherwise ``None``."""
        params = find_param_docs(doc)
        for arg, default in argz:
            override = getattr(func, "_argopts", {}).get(arg, ((), {}))
            yield merge(arg, default, override, *params.get(arg, ([], {})))
        if varargs_name is not None:
            kwargs = {"nargs": "*"}
            kwargs.update(params.get(varargs_name, (None, {}))[1])
            yield ([varargs_name], kwargs)
Beispiel #8
0
    def _generate_command(self, func, name=None, doctype='rest',
                          *args, **kwargs):
        '''Generate argparse's subparser.

        :param func: The function to analyze.
        :param name: If given, a different name for the command. The default
            one is ``func.__name__``.'''
        func_name = func.__name__
        name = func_name if name is None else name
        argspec = inspect.getargspec(func)
        self._argspecs[func_name] = argspec
        argz = izip_longest(reversed(argspec.args),
                            reversed(argspec.defaults or []),
                            fillvalue=_POSITIONAL())
        argz = reversed(list(argz))
        doc = (inspect.getdoc(func) or '').strip() + '\n'
        if doctype == 'numpy':
            config = Config(napoleon_google_docstring=False,
                            napoleon_use_rtype=False)
            doc = str(NumpyDocstring(doc, config))
        elif doctype == 'google':
            config = Config(napoleon_numpy_docstring=False,
                            napoleon_use_rtype=False)
            doc = str(GoogleDocstring(doc, config))
        elif doctype == 'rest':
            pass
        else:
            raise ValueError('doctype must be one of "numpy", "google", '
                             'or "rest"')
        cmd_help, cmd_desc = split_doc(purify_doc(doc))
        subparser = self._subparsers.add_parser(name,
                                                help=cmd_help or None,
                                                description=cmd_desc or None,
                                                **kwargs)
        params = find_param_docs(doc)
        for a, kw in self._analyze_func(func, params, argz, argspec.varargs):
            completer = kw.pop('completer', None)
            arg = subparser.add_argument(*a, **purify_kwargs(kw))
            if completer is not None:
                arg.completer = completer

        subparser.set_defaults(**{_DISPATCH_TO: func})
        return func
Beispiel #9
0
    def _generate_command(self, func, name=None, doctype='rest',
                          *args, **kwargs):
        '''Generate argparse's subparser.

        :param func: The function to analyze.
        :param name: If given, a different name for the command. The default
            one is ``func.__name__``.'''

        name = name or func.__name__
        doc = (inspect.getdoc(func) or '').strip() + '\n'

        if doctype == 'numpy':
            config = Config(napoleon_google_docstring=False,
                            napoleon_use_rtype=False)
            doc = str(NumpyDocstring(doc, config))
        elif doctype == 'google':
            config = Config(napoleon_numpy_docstring=False,
                            napoleon_use_rtype=False)
            doc = str(GoogleDocstring(doc, config))
        elif doctype == 'rest':
            pass
        else:
            raise ValueError('doctype must be one of "numpy", "google", '
                             'or "rest"')
        cmd_help, cmd_desc = split_doc(purify_doc(doc))
        subparser = self._subparsers.add_parser(name,
                                                help=cmd_help or None,
                                                description=cmd_desc or None,
                                                **kwargs)

        doc_params = find_param_docs(doc)
        self._signatures[func.__name__] = signature(func)

        for a, kw in self._analyze_func(func, doc_params):
            completer = kw.pop('completer', None)
            arg = subparser.add_argument(*a, **purify_kwargs(kw))
            if completer is not None:
                arg.completer = completer

        subparser.set_defaults(**{_DISPATCH_TO: func})
        return func