def testAliasPrinting(self): a = pytd.Alias("MyList", pytd.GenericType( pytd.NamedType("typing.List"), (pytd.AnythingType(),))) ty = pytd_utils.CreateModule("test", aliases=(a,)) expected = textwrap.dedent(""" from typing import Any, List MyList = List[Any]""") self.assertMultiLineEqual(expected.strip(), pytd.Print(ty).strip())
def testPrintImportsNamedType(self): # Can't get tree by parsing so build explicitly node = pytd.Constant("x", pytd.NamedType("typing.List")) tree = pytd_utils.CreateModule(name=None, constants=(node,)) expected_src = textwrap.dedent(""" from typing import List x: List """).strip() res = pytd.Print(tree) self.assertMultiLineEqual(res, expected_src)
def test_set_module_on_module(self): # A module's 'module' attribute should always remain None, and no one # should attempt to set it to something besides the module's name or None. ast = pytd_utils.CreateModule("some_mod") mod = abstract.Module(self._vm, ast.name, {}, ast) mod.module = ast.name self.assertIsNone(mod.module) self.assertEqual(ast.name, mod.full_name) mod.module = None self.assertIsNone(mod.module) self.assertEqual(ast.name, mod.full_name) def set_module(): mod.module = "other_mod" self.assertRaises(AssertionError, set_module)
def compute_types(self, defs): classes = (tuple(self.pytd_classes_for_unknowns()) + tuple(self.pytd_classes_for_call_traces()) + self.pytd_classes_for_namedtuple_instances()) functions = tuple(self.pytd_functions_for_call_traces()) aliases = tuple(self.pytd_aliases()) ty = pytd_utils.Concat( self.pytd_for_types(defs), pytd_utils.CreateModule("unknowns", classes=classes, functions=functions, aliases=aliases)) ty = ty.Visit(optimize.CombineReturnsAndExceptions()) ty = ty.Visit(optimize.PullInMethodClasses()) ty = ty.Visit(visitors.DefaceUnresolved( [ty, self.loader.concat_all()], "~unknown")) return ty.Visit(visitors.AdjustTypeParameters())
def _create_empty(self, module_name, filename): return self.load_file(module_name, filename, pytd_utils.CreateModule(module_name))
def _create_empty(self, module_name, filename): ast = self.load_file(module_name, filename, pytd_utils.CreateModule(module_name)) return ast.Replace(is_package=utils.is_pyi_directory_init(filename))