def test_from_method_in_memory_return_complex(self) -> None: """ Tests that `parse.function` produces properly from a function in memory of current interpreter with: - complex return type - kwonly args """ method_complex_args_variety_with_imports_str = ( "from sys import stdout\n" "from {package} import Literal\n" "{body}".format( package="typing" if PY_GTE_3_8 else "typing_extensions", body=function_adder_str, )) add_6_5 = getattr( inspectable_compile(method_complex_args_variety_with_imports_str), "add_6_5", ) ir = parse.function(add_6_5) del ir["_internal"] # Not needed for this test self.assertDictEqual( ir, function_adder_ir, )
def test_param2argparse_param_default_function(self) -> None: """ Tests that param2argparse_param works to change the type based on the default whence said default is an in-memory function """ function_str = ( "from operator import add\n" "def adder(a, b):\n" "{tab}return add(a, b)".format(tab=tab) ) adder = getattr( inspectable_compile(function_str), "adder", ) pickled_adder = pickle.dumps(adder) # eww run_ast_test( gen_ast=param2argparse_param( ( "byo", { "default": adder, "typ": "str", }, ), ), gold=Expr( Call( args=[set_value("--byo")], func=Attribute( Name("argument_parser", Load()), "add_argument", Load(), ), keywords=[ keyword( arg="type", value=Name("pickle.loads", Load()), identifier=None, ), keyword( arg="default", value=set_value(pickled_adder), identifier=None, ), ], expr=None, expr_func=None, ) ), test_case_instance=self, )
def test_from_adadelta_class_in_memory(self) -> None: """ Tests that parse.class produces properly from a `class` in memory of current interpreter """ Adadelta = getattr( inspectable_compile(docstring_google_tf_adadelta_function_str), "Adadelta", ) ir = parse.class_(Adadelta) del ir["_internal"] # self.assertDictEqual(ir, docstring_google_tf_adadelta_ir) self.assertDictEqual( ir, docstring_google_tf_adadelta_function_ir, )
def test_from_method_in_memory(self) -> None: """ Tests that `parse.function` produces properly from a function in memory of current interpreter with: - kw only args; - default args; - annotations - required; - unannotated; - splat """ method_complex_args_variety_with_imports_str = ( "from sys import stdout\n" "from {package} import Literal\n" "{body}".format( package="typing" if PY_GTE_3_8 else "typing_extensions", body=method_complex_args_variety_str, )) call_cliff = getattr( inspectable_compile(method_complex_args_variety_with_imports_str), "call_cliff", ) ir = parse.function(call_cliff) del ir["_internal"] # Not needed for this test # This is a hack because JetBrains wraps stdout self.assertIn( type(ir["params"]["writer"]["default"]).__name__, frozenset(("FlushingStringIO", "TextIOWrapper")), ) # This extra typ is copied, for now. TODO: Update AST-level parser to set types when defaults are given. ir["params"]["writer"].update({ "default": "stdout", "typ": method_complex_args_variety_ir["params"]["writer"]["typ"], }) self.assertDictEqual( ir, method_complex_args_variety_ir, )