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))
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))
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)
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))
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))
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'))
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))
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'))