def test_type_annotations(self): # pylint: disable=unused-argument def example_fun(self, cls, x: List[str], z: int, a: Union[List[str], str, int] = None, b: str = 'test', *, y: bool = False, c: int, **kwargs) -> None: pass # pylint: enable=unused-argument sig = parser.generate_signature(example_fun, parser_config=self.parser_config, func_full_name='') self.assertEqual(sig.arguments, [ 'cls', 'x: List[str]', 'z: int', 'a: Union[List[str], str, int] = None', "b: str = 'test'", '*', 'y: bool = False', 'c: int', '**kwargs' ]) self.assertEqual(sig.return_type, 'None') self.assertEqual(sig.arguments_typehint_exists, True) self.assertEqual(sig.return_typehint_exists, True)
def test_dotted_name(self): # pylint: disable=g-bad-name class a(object): class b(object): class c(object): class d(object): def __init__(self, *args): pass # pylint: enable=g-bad-name e = {'f': 1} def example_fun(arg1=a.b.c.d, arg2=a.b.c.d(1, 2), arg3=e['f']): # pylint: disable=unused-argument pass sig = parser.generate_signature( example_fun, parser_config=self.parser_config, func_full_name='') self.assertEqual( sig.arguments, ['arg1=a.b.c.d', 'arg2=a.b.c.d(1, 2)', 'arg3=e['f']'])
def test_dataclasses_type_annotations(self): @dataclasses.dataclass class ExampleClass: x: List[str] z: int c: List[int] = dataclasses.field(default_factory=list) a: Union[List[str], str, int] = None b: str = 'test' y: bool = False def add(self, x: int, y: int) -> int: return x + y sig = parser.generate_signature(ExampleClass, parser_config=self.parser_config, func_full_name='') self.assertEqual(sig.arguments, [ 'x: List[str]', 'z: int', 'c: List[int] = <factory>', 'a: Union[List[str], str, int] = None', 'b: str = 'test'', 'y: bool = False', ]) self.assertEqual(sig.return_type, 'None') self.assertEqual(sig.arguments_typehint_exists, True)
def test_known_object(self): def example_fun(arg=self.known_object): # pylint: disable=unused-argument pass sig = parser.generate_signature(example_fun, parser_config=self.parser_config, func_full_name='') self.assertEqual(sig.arguments, ['arg=location.of.object.in.api'])
def test_literals(self): def example_fun(a=5, b=5.0, c=None, d=True, e='hello', f=(1, (2, 3))): # pylint: disable=g-bad-name, unused-argument pass sig = parser.generate_signature(example_fun, parser_config=self.parser_config, func_full_name='') self.assertEqual( sig.arguments, ['a=5', 'b=5.0', 'c=None', 'd=True', "e='hello'", 'f=(1, (2, 3))'])
def test_compulsory_kwargs_without_defaults_with_args(self): def example_fun(x, z, *args, a=True, b='test', y=None, c, **kwargs): # pylint: disable=unused-argument return True sig = parser.generate_signature(example_fun, parser_config=self.parser_config, func_full_name='') self.assertEqual(sig.arguments, [ 'x', 'z', '*args', 'a=True', "b='test'", 'y=None', 'c', '**kwargs' ]) self.assertEqual(sig.arguments_typehint_exists, False) self.assertEqual(sig.return_typehint_exists, False)
def test_dataclasses_type_annotations(self): sig = parser.generate_signature( ExampleDataclass, parser_config=self.parser_config, func_full_name='') self.assertEqual(sig.arguments, [ 'x: List[str]', 'z: int', 'c: List[int] = <factory>', 'a: Union[List[str], str, int] = None', 'b: str = 'test'', 'y: bool = False', ]) self.assertEqual(sig.return_type, 'None') self.assertEqual(sig.arguments_typehint_exists, True)
def test_compulsory_kwargs_without_defaults(self): def example_fun(x, z, a=True, b='test', *, y=None, c, **kwargs) -> bool: # pylint: disable=unused-argument return True sig = parser.generate_signature( example_fun, parser_config=self.parser_config, func_full_name='', func_type=parser.FuncType.FUNCTION) self.assertEqual(sig.arguments, [ 'x', 'z', 'a=True', 'b='test'', '*', 'y=None', 'c', '**kwargs' ]) self.assertEqual(sig.return_type, 'bool') self.assertEqual(sig.arguments_typehint_exists, False) self.assertEqual(sig.return_typehint_exists, True)
def test_literals(self): def example_fun( self, cls, a=5, b=5.0, c=None, d=True, e='hello', f=(1, (2, 3)), ): # pylint: disable=g-bad-name, unused-argument pass sig = parser.generate_signature(example_fun, parser_config=self.parser_config, func_full_name='', func_type=parser.FuncType.FUNCTION) self.assertEqual(sig.arguments, [ 'self', 'cls', 'a=5', 'b=5.0', 'c=None', 'd=True', 'e='hello'', 'f=(1, (2, 3))' ])
def test_type_annotations(self): # pylint: disable=unused-argument class TestMethodSig: def example_fun(self, x: List[str], z: int, a: Union[List[str], str, int] = None, b: str = 'test', *, y: bool = False, c: Callable[..., int], **kwargs) -> None: pass # pylint: enable=unused-argument sig = parser.generate_signature( TestMethodSig.example_fun, parser_config=self.parser_config, func_full_name='', func_type=parser.FuncType.METHOD, ) self.assertEqual(sig.arguments, [ 'x: List[str]', 'z: int', 'a: Union[List[str], str, int] = None', 'b: str = 'test'', '*', 'y: bool = False', 'c: Callable[..., int]', '**kwargs', ]) self.assertEqual(sig.return_type, 'None') self.assertEqual(sig.arguments_typehint_exists, True) self.assertEqual(sig.return_typehint_exists, True)