def main(): parser = parse_args.make_parser() args = parser.parse_args(sys.argv[1:]) if args.version: print(io.get_pytype_version()) sys.exit(0) tool_utils.setup_logging_or_die(args.verbosity) if args.generate_config: config.generate_sample_config_or_die(args.generate_config) sys.exit(0) args.filenames = file_utils.expand_source_files(args.filenames) conf = parser.config_from_defaults() # File options overwrite defaults. file_config = config.read_config_file_or_die(args.config) parser.postprocess(file_config, from_strings=True) conf.populate_from(file_config) # Command line arguments overwrite file options. conf.populate_from(args) if not conf.pythonpath: conf.pythonpath = environment.compute_pythonpath(args.filenames) logging.info('\n '.join(['Configuration:'] + str(conf).split('\n'))) if not args.filenames: parser.parser.print_usage() sys.exit(0) # Importlab needs the python exe, so we check it as early as possible. environment.check_python_exe_or_die(conf.python_version) typeshed = environment.initialize_typeshed_or_die() env = create_importlab_environment(conf, typeshed) try: import_graph = importlab.graph.ImportGraph.create(env, args.filenames) except Exception as e: # pylint: disable=broad-except logging.critical('Cannot parse input files:\n%s', str(e)) sys.exit(1) if args.tree: print('Source tree:') importlab.output.print_tree(import_graph) sys.exit(0) if args.unresolved: print('Unresolved dependencies:') for imp in sorted(import_graph.get_all_unresolved()): print(' ', imp.name) sys.exit(0) logging.info('Source tree:\n%s', importlab.output.formatted_deps_list(import_graph)) tool_utils.makedirs_or_die(conf.output, 'Could not create output directory') deps = pytype_runner.deps_from_import_graph(import_graph) runner = pytype_runner.PytypeRunner(args.filenames, deps, conf) runner.run()
def main(): parser = parse_args.make_parser() args = parser.parse_args(sys.argv[1:]) if args.version: print(io.get_pytype_version()) sys.exit(0) tool_utils.setup_logging_or_die(args.verbosity) if args.generate_config: config.generate_sample_config_or_die(args.generate_config, parser.pytype_single_args) sys.exit(0) conf = parser.config_from_defaults() # File options overwrite defaults. file_config = config.read_config_file_or_die(args.config) parser.postprocess(file_config, from_strings=True) conf.populate_from(file_config) # Command line arguments overwrite file options. conf.populate_from(args) conf.inputs -= conf.exclude if args.no_cache: conf.output = tempfile.mkdtemp() if not conf.pythonpath: conf.pythonpath = environment.compute_pythonpath(conf.inputs) logging.info('\n '.join(['Configuration:'] + str(conf).split('\n'))) if not conf.inputs: parser.parser.error('Need an input.') # Importlab needs the python exe, so we check it as early as possible. environment.check_python_exe_or_die(conf.python_version) typeshed = environment.initialize_typeshed_or_die() env = analyze_project_env.create_importlab_environment(conf, typeshed) print('Computing dependencies') import_graph = importlab.graph.ImportGraph.create(env, conf.inputs, trim=True) if args.tree: print('Source tree:') importlab.output.print_tree(import_graph) sys.exit(0) if args.unresolved: print('Unresolved dependencies:') for imp in sorted(import_graph.get_all_unresolved()): print(' ', imp.name) sys.exit(0) # Main usage mode: analyze the project file by file in dependency order. logging.info('Source tree:\n%s', importlab.output.formatted_deps_list(import_graph)) tool_utils.makedirs_or_die(conf.output, 'Could not create output directory') deps = pytype_runner.deps_from_import_graph(import_graph) runner = pytype_runner.PytypeRunner(conf, deps) return runner.run()
def testBasic(self): deps = pytype_runner.deps_from_import_graph(self.graph) expected = [ [Module('/foo/', 'bar/__init__.py', 'bar.__init__')], [Module('/foo/', 'bar/a.py', 'bar.a')], [Module('/foo/', 'bar/b.py', 'bar.b')] ] self.assertEqual(deps, expected)
def test_basic(self): graph = FakeImportGraph(self.sources, self.provenance, collections.defaultdict(list)) deps = pytype_runner.deps_from_import_graph(graph) expected = [ ((Module('/foo/', 'bar/__init__.py', 'bar.__init__'), ), ()), ((Module('/foo/', 'bar/a.py', 'bar.a'), ), ()), ((Module('/foo/', 'bar/b.py', 'bar.b'), ), ()), ] self.assertEqual(deps, expected)
def test_pyi_dep(self): pyi_mod = ImportlabModule('/foo/bar/c.pyi', 'bar/c.pyi', 'bar.c') graph = FakeImportGraph(self.sources, self.provenance, collections.defaultdict(lambda: [pyi_mod.path])) deps = pytype_runner.deps_from_import_graph(graph) expected = [ ((Module('/foo/', 'bar/__init__.py', 'bar.__init__'),), ()), ((Module('/foo/', 'bar/a.py', 'bar.a'),), ()), ((Module('/foo/', 'bar/b.py', 'bar.b'),), ()), ] self.assertEqual(deps, expected)
def test_duplicate_deps(self): graph = FakeImportGraph( self.sources, self.provenance, collections.defaultdict(lambda: [self.sources[0]] * 2)) deps = pytype_runner.deps_from_import_graph(graph) init = Module('/foo/', 'bar/__init__.py', 'bar.__init__') expected = [ ((init, ), (init, )), ((Module('/foo/', 'bar/a.py', 'bar.a'), ), (init, )), ((Module('/foo/', 'bar/b.py', 'bar.b'), ), (init, )), ] self.assertEqual(deps, expected)