Пример #1
0
def generate_c_function_stub(module,
                             name,
                             obj,
                             output,
                             self_var=None,
                             sigs={},
                             class_name=None,
                             class_sigs={}):
    if self_var:
        self_arg = '%s, ' % self_var
    else:
        self_arg = ''
    if name in ('__new__',
                '__init__') and name not in sigs and class_name in class_sigs:
        sig = class_sigs[class_name]
    else:
        docstr = getattr(obj, '__doc__', None)
        sig = infer_sig_from_docstring(docstr, name)
        if not sig:
            if class_name and name not in sigs:
                sig = infer_method_sig(name)
            else:
                sig = sigs.get(name, '(*args, **kwargs)')
    sig = sig[1:-1]
    if sig:
        if sig.split(',', 1)[0] == self_var:
            self_arg = ''
    else:
        self_arg = self_arg.replace(', ', '')
    output.append('def %s(%s%s): ...' % (name, self_arg, sig))
Пример #2
0
def generate_c_function_stub(module: ModuleType,
                             name: str,
                             obj: object,
                             output: List[str],
                             self_var: Optional[str] = None,
                             sigs: Dict[str, str] = {},
                             class_name: Optional[str] = None,
                             class_sigs: Dict[str, str] = {},
                             ) -> None:
    if self_var:
        self_arg = '%s, ' % self_var
    else:
        self_arg = ''
    if (name in ('__new__', '__init__') and name not in sigs and class_name and
            class_name in class_sigs):
        sig = class_sigs[class_name]
    else:
        docstr = getattr(obj, '__doc__', None)
        inferred = infer_sig_from_docstring(docstr, name)
        if inferred:
            sig = inferred
        else:
            if class_name and name not in sigs:
                sig = infer_method_sig(name)
            else:
                sig = sigs.get(name, '(*args, **kwargs)')
    sig = sig[1:-1]
    if sig:
        if sig.split(',', 1)[0] == self_var:
            self_arg = ''
    else:
        self_arg = self_arg.replace(', ', '')
    output.append('def %s(%s%s): ...' % (name, self_arg, sig))
Пример #3
0
 def test_infer_sig_from_docstring(self) -> None:
     assert_equal(infer_sig_from_docstring('\nfunc(x) - y', 'func'), '(x)')
     assert_equal(infer_sig_from_docstring('\nfunc(x, Y_a=None)', 'func'), '(x, Y_a=None)')
     assert_equal(infer_sig_from_docstring('\nafunc(x) - y', 'func'), None)
     assert_equal(infer_sig_from_docstring('\nfunc(x, y', 'func'), None)
     assert_equal(infer_sig_from_docstring('\nfunc(x=z(y))', 'func'), None)
     assert_equal(infer_sig_from_docstring('\nfunc x', 'func'), None)
Пример #4
0
def generate_c_function_stub(module, name, obj, output, self_var=None, sigs={}, class_name=None,
                             class_sigs={}):
    if self_var:
        self_arg = '%s, ' % self_var
    else:
        self_arg = ''
    if name in ('__new__', '__init__') and name not in sigs and class_name in class_sigs:
        sig = class_sigs[class_name]
    else:
        docstr = getattr(obj, '__doc__', None)
        sig = infer_sig_from_docstring(docstr, name)
        if not sig:
            if class_name and name not in sigs:
                sig = infer_method_sig(name)
            else:
                sig = sigs.get(name, '(*args, **kwargs)')
    sig = sig[1:-1]
    if not sig:
        self_arg = self_arg.replace(', ', '')
    output.append('def %s(%s%s): pass' % (name, self_arg, sig))
Пример #5
0
def generate_c_function_stub(module: ModuleType,
                             name: str,
                             obj: object,
                             output: List[str],
                             self_var: Optional[str] = None,
                             sigs: Dict[str, str] = {},
                             class_name: Optional[str] = None,
                             class_sigs: Dict[str, str] = {},
                             ) -> None:
    ret_type = 'Any'

    if self_var:
        self_arg = '%s, ' % self_var
    else:
        self_arg = ''
    if (name in ('__new__', '__init__') and name not in sigs and class_name and
            class_name in class_sigs):
        sig = class_sigs[class_name]
    else:
        docstr = getattr(obj, '__doc__', None)
        inferred = infer_sig_from_docstring(docstr, name)
        if inferred:
            sig, ret_type = inferred
        else:
            if class_name and name not in sigs:
                sig = infer_method_sig(name)
            else:
                sig = sigs.get(name, '(*args, **kwargs)')
    # strip away parenthesis
    sig = sig[1:-1]
    if sig:
        if self_var:
            # remove annotation on self from signature if present
            groups = sig.split(',', 1)
            if groups[0] == self_var or groups[0].startswith(self_var + ':'):
                self_arg = ''
                sig = '{},{}'.format(self_var, groups[1]) if len(groups) > 1 else self_var
    else:
        self_arg = self_arg.replace(', ', '')
    output.append('def %s(%s%s) -> %s: ...' % (name, self_arg, sig, ret_type))
Пример #6
0
 def test_infer_sig_from_docstring(self) -> None:
     assert_equal(infer_sig_from_docstring('\nfunc(x) - y', 'func'),
                  ('(x)', 'Any'))
     assert_equal(infer_sig_from_docstring('\nfunc(x, Y_a=None)', 'func'),
                  ('(x, Y_a=None)', 'Any'))
     assert_equal(infer_sig_from_docstring('\nafunc(x) - y', 'func'), None)
     assert_equal(infer_sig_from_docstring('\nfunc(x, y', 'func'), None)
     assert_equal(infer_sig_from_docstring('\nfunc(x=z(y))', 'func'), None)
     assert_equal(infer_sig_from_docstring('\nfunc x', 'func'), None)
     # try to infer signature from type annotation
     assert_equal(infer_sig_from_docstring('\nfunc(x: int)', 'func'),
                  ('(x: int)', 'Any'))
     assert_equal(infer_sig_from_docstring('\nfunc(x: int=3)', 'func'),
                  ('(x: int=3)', 'Any'))
     assert_equal(
         infer_sig_from_docstring('\nfunc(x: int=3) -> int', 'func'),
         ('(x: int=3)', 'int'))
     assert_equal(
         infer_sig_from_docstring('\nfunc(x: int=3) -> int   \n', 'func'),
         ('(x: int=3)', 'int'))
     assert_equal(
         infer_sig_from_docstring('\nfunc(x: Tuple[int, str]) -> str',
                                  'func'), ('(x: Tuple[int, str])', 'str'))
     assert_equal(infer_sig_from_docstring('\nfunc(x: foo.bar)', 'func'),
                  ('(x: foo.bar)', 'Any'))
Пример #7
0
def generate_c_function_stub(
    module: ModuleType,
    name: str,
    obj: object,
    output: List[str],
    imports: List[str],
    self_var: Optional[str] = None,
    sigs: Dict[str, str] = {},
    class_name: Optional[str] = None,
    class_sigs: Dict[str, str] = {},
) -> None:
    ret_type = 'None' if name == '__init__' and class_name else 'Any'

    if self_var:
        self_arg = '%s, ' % self_var
    else:
        self_arg = ''
    if (name in ('__new__', '__init__') and name not in sigs and class_name
            and class_name in class_sigs):
        sig = class_sigs[class_name]
    else:
        docstr = getattr(obj, '__doc__', None)
        inferred = infer_sig_from_docstring(docstr, name)
        if inferred:
            sig, ret_type = inferred
        else:
            if class_name and name not in sigs:
                sig = infer_method_sig(name)
            else:
                sig = sigs.get(name, '(*args, **kwargs)')
    # strip away parenthesis
    sig = sig[1:-1]
    if sig:
        if self_var:
            # remove annotation on self from signature if present
            groups = sig.split(',', 1)
            if groups[0] == self_var or groups[0].startswith(self_var + ':'):
                self_arg = ''
                sig = '{},{}'.format(
                    self_var, groups[1]) if len(groups) > 1 else self_var
    else:
        self_arg = self_arg.replace(', ', '')

    if sig:
        sig_types = []
        # convert signature in form of "self: TestClass, arg0: str" to
        # list [[self, TestClass], [arg0, str]]
        for arg in sig.split(','):
            arg_type = arg.split(':', 1)
            if len(arg_type) == 1:
                # there is no type provided in docstring
                sig_types.append(arg_type[0].strip())
            else:
                arg_type_name = strip_or_import(arg_type[1].strip(), module,
                                                imports)
                sig_types.append('%s: %s' %
                                 (arg_type[0].strip(), arg_type_name))
        sig = ", ".join(sig_types)

    ret_type = strip_or_import(ret_type, module, imports)
    output.append('def %s(%s%s) -> %s: ...' % (name, self_arg, sig, ret_type))
Пример #8
0
 def test_infer_sig_from_docstring(self) -> None:
     assert_equal(infer_sig_from_docstring('\nfunc(x) - y', 'func'), ('(x)', 'Any'))
     assert_equal(infer_sig_from_docstring('\nfunc(x, Y_a=None)', 'func'),
                  ('(x, Y_a=None)', 'Any'))
     assert_equal(infer_sig_from_docstring('\nafunc(x) - y', 'func'), None)
     assert_equal(infer_sig_from_docstring('\nfunc(x, y', 'func'), None)
     assert_equal(infer_sig_from_docstring('\nfunc(x=z(y))', 'func'), None)
     assert_equal(infer_sig_from_docstring('\nfunc x', 'func'), None)
     # try to infer signature from type annotation
     assert_equal(infer_sig_from_docstring('\nfunc(x: int)', 'func'), ('(x: int)', 'Any'))
     assert_equal(infer_sig_from_docstring('\nfunc(x: int=3)', 'func'), ('(x: int=3)', 'Any'))
     assert_equal(infer_sig_from_docstring('\nfunc(x: int=3) -> int', 'func'),
                  ('(x: int=3)', 'int'))
     assert_equal(infer_sig_from_docstring('\nfunc(x: int=3) -> int   \n', 'func'),
                  ('(x: int=3)', 'int'))
     assert_equal(infer_sig_from_docstring('\nfunc(x: Tuple[int, str]) -> str', 'func'),
                  ('(x: Tuple[int, str])', 'str'))
     assert_equal(infer_sig_from_docstring('\nfunc(x: foo.bar)', 'func'),
                  ('(x: foo.bar)', 'Any'))