def test_multi_import(self): root = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'testpkg-edgedata') mf = modulegraph.ModuleGraph(path=[root] + sys.path) script_name = os.path.join(root, 'script_multi_import.py') mf.run_script(script_name) script_node = mf.findNode(script_name) self.assertIsInstance(script_node, modulegraph.Script) node = mf.findNode('os.path') ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=False, tryexcept=True, fromlist=False)) node = mf.findNode('os') ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=False, tryexcept=False, fromlist=False)) node = mf.findNode('sys') ed = mf.edgeData(script_node, node) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=True, function=True, tryexcept=False, fromlist=False)) node = mf.findNode('platform') ed = mf.edgeData(script_node, node) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=True, function=True, tryexcept=False, fromlist=False)) node = mf.findNode('email') ed = mf.edgeData(script_node, node) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=False, tryexcept=False, fromlist=False))
def test_pickling(self): info = modulegraph.DependencyInfo(function=True, conditional=False, tryexcept=True, fromlist=False) for proto in range(pickle.HIGHEST_PROTOCOL + 1): b = pickle.dumps(info, proto) self.assertTrue(isinstance(b, bytes)) o = pickle.loads(b) self.assertEqual(o, info)
def test_merging(self): info1 = modulegraph.DependencyInfo(function=True, conditional=False, tryexcept=True, fromlist=False) info2 = modulegraph.DependencyInfo(function=False, conditional=True, tryexcept=True, fromlist=False) self.assertEqual( info1._merged(info2), modulegraph.DependencyInfo(function=True, conditional=True, tryexcept=True, fromlist=False)) info2 = modulegraph.DependencyInfo(function=False, conditional=True, tryexcept=False, fromlist=False) self.assertEqual( info1._merged(info2), modulegraph.DependencyInfo(function=True, conditional=True, tryexcept=True, fromlist=False)) info2 = modulegraph.DependencyInfo(function=False, conditional=False, tryexcept=False, fromlist=False) self.assertEqual( info1._merged(info2), modulegraph.DependencyInfo(function=False, conditional=False, tryexcept=False, fromlist=False)) info1 = modulegraph.DependencyInfo(function=True, conditional=False, tryexcept=True, fromlist=True) self.assertEqual( info1._merged(info2), modulegraph.DependencyInfo(function=False, conditional=False, tryexcept=False, fromlist=False)) info2 = modulegraph.DependencyInfo(function=False, conditional=False, tryexcept=False, fromlist=True) self.assertEqual( info1._merged(info2), modulegraph.DependencyInfo(function=False, conditional=False, tryexcept=False, fromlist=True))
def test_from_imports(self): root = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'testpkg-edgedata') mf = modulegraph.ModuleGraph(path=[root] + sys.path) script_name = os.path.join(root, 'script_from_import.py') mf.run_script(script_name) script_node = mf.findNode(script_name) self.assertIsInstance(script_node, modulegraph.Script) node = mf.findNode('pkg.toplevel_existing') self.assertIsInstance(node, modulegraph.SourceModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=False, tryexcept=False, fromlist=True)) node = mf.findNode('pkg.toplevel_nonexisting') self.assertIsInstance(node, modulegraph.MissingModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=False, tryexcept=False, fromlist=True)) node = mf.findNode('pkg.toplevel_class_existing') self.assertIsInstance(node, modulegraph.SourceModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=False, tryexcept=False, fromlist=True)) node = mf.findNode('pkg.toplevel_class_nonexisting') self.assertIsInstance(node, modulegraph.MissingModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=False, tryexcept=False, fromlist=True)) node = mf.findNode('pkg.toplevel_conditional_existing') self.assertIsInstance(node, modulegraph.SourceModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=True, function=False, tryexcept=False, fromlist=True)) node = mf.findNode('pkg.toplevel_conditional_nonexisting') self.assertIsInstance(node, modulegraph.MissingModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=True, function=False, tryexcept=False, fromlist=True)) node = mf.findNode('pkg.toplevel_conditional_import_existing') self.assertIsInstance(node, modulegraph.SourceModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=True, function=False, tryexcept=True, fromlist=True)) node = mf.findNode('pkg.toplevel_conditional_import_nonexisting') self.assertIsInstance(node, modulegraph.MissingModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=True, function=False, tryexcept=True, fromlist=True)) node = mf.findNode('pkg.toplevel_conditional_import2_existing') self.assertIsInstance(node, modulegraph.SourceModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=True, function=False, tryexcept=True, fromlist=True)) node = mf.findNode('pkg.toplevel_conditional_import2_nonexisting') self.assertIsInstance(node, modulegraph.MissingModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=True, function=False, tryexcept=True, fromlist=True)) node = mf.findNode('pkg.toplevel_import_existing') self.assertIsInstance(node, modulegraph.SourceModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=False, tryexcept=True, fromlist=True)) node = mf.findNode('pkg.toplevel_import_nonexisting') self.assertIsInstance(node, modulegraph.MissingModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=False, tryexcept=True, fromlist=True)) node = mf.findNode('pkg.toplevel_import2_existing') self.assertIsInstance(node, modulegraph.SourceModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=False, tryexcept=True, fromlist=True)) node = mf.findNode('pkg.toplevel_import2_nonexisting') self.assertIsInstance(node, modulegraph.MissingModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=False, tryexcept=True, fromlist=True)) node = mf.findNode('pkg.function_existing') self.assertIsInstance(node, modulegraph.SourceModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=True, tryexcept=False, fromlist=True)) node = mf.findNode('pkg.function_nonexisting') self.assertIsInstance(node, modulegraph.MissingModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=True, tryexcept=False, fromlist=True)) node = mf.findNode('pkg.function_class_existing') self.assertIsInstance(node, modulegraph.SourceModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=True, tryexcept=False, fromlist=True)) node = mf.findNode('pkg.function_class_nonexisting') self.assertIsInstance(node, modulegraph.MissingModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=True, tryexcept=False, fromlist=True)) node = mf.findNode('pkg.function_conditional_existing') self.assertIsInstance(node, modulegraph.SourceModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=True, function=True, tryexcept=False, fromlist=True)) node = mf.findNode('pkg.function_conditional_nonexisting') self.assertIsInstance(node, modulegraph.MissingModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=True, function=True, tryexcept=False, fromlist=True)) node = mf.findNode('pkg.function_conditional_import_existing') self.assertIsInstance(node, modulegraph.SourceModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=True, function=True, tryexcept=True, fromlist=True)) node = mf.findNode('pkg.function_conditional_import_nonexisting') self.assertIsInstance(node, modulegraph.MissingModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=True, function=True, tryexcept=True, fromlist=True)) node = mf.findNode('pkg.function_conditional_import2_existing') self.assertIsInstance(node, modulegraph.SourceModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=True, function=True, tryexcept=True, fromlist=True)) node = mf.findNode('pkg.function_conditional_import2_nonexisting') self.assertIsInstance(node, modulegraph.MissingModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=True, function=True, tryexcept=True, fromlist=True)) node = mf.findNode('pkg.function_import_existing') self.assertIsInstance(node, modulegraph.SourceModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=True, tryexcept=True, fromlist=True)) node = mf.findNode('pkg.function_import_nonexisting') self.assertIsInstance(node, modulegraph.MissingModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=True, tryexcept=True, fromlist=True)) node = mf.findNode('pkg.function_import2_existing') self.assertIsInstance(node, modulegraph.SourceModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=True, tryexcept=True, fromlist=True)) node = mf.findNode('pkg.function_import2_nonexisting') self.assertIsInstance(node, modulegraph.MissingModule) ed = mf.edgeData(script_node, node) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(conditional=False, function=True, tryexcept=True, fromlist=True))
def testGraphStructure(self): # 1. Script to imported modules n = self.mf.findNode(self.script_name) self.assertIsInstance(n, modulegraph.Script) imported = ('mod', 'pkg', 'pkg.mod', 'pkg.oldstyle', 'pkg.relative', 'pkg.toplevel', 'pkg.subpkg.relative', 'pkg.subpkg.relative2', 'pkg.subpkg.mod2') for nm in imported: n2 = self.mf.findNode(nm) ed = self.mf.edgeData(n, n2) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(fromlist=False, conditional=False, function=False, tryexcept=False)) refs = self.mf.getReferences(n) self.assertEqual(set(refs), set(self.mf.findNode(nm) for nm in imported)) refs = list(self.mf.getReferers(n)) # The script is a toplevel item and is therefore referred to from the graph root (aka 'None') self.assertEqual(refs, [None]) # 2. 'mod' n = self.mf.findNode('mod') self.assertIsInstance(n, modulegraph.SourceModule) refs = list(self.mf.getReferences(n)) self.assertEqual(refs, []) #refs = list(self.mf.getReferers(n)) #self.assertEquals(refs, []) # 3. 'pkg' n = self.mf.findNode('pkg') self.assertIsInstance(n, modulegraph.Package) refs = list(self.mf.getReferences(n)) self.maxDiff = None self.assertEqual(refs, [n]) #refs = list(self.mf.getReferers(n)) #self.assertEquals(refs, []) # 4. pkg.mod n = self.mf.findNode('pkg.mod') self.assertIsInstance(n, modulegraph.SourceModule) refs = set(self.mf.getReferences(n)) self.assertEqual(refs, {self.mf.findNode('pkg')}) ed = self.mf.edgeData(n, self.mf.findNode('pkg')) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(fromlist=False, conditional=False, function=False, tryexcept=False)) # 5. pkg.oldstyle n = self.mf.findNode('pkg.oldstyle') self.assertIsInstance(n, modulegraph.SourceModule) refs = set(self.mf.getReferences(n)) if sys.version_info[0] == 2: n2 = self.mf.findNode('pkg.mod') else: n2 = self.mf.findNode('mod') self.assertEqual(refs, {self.mf.findNode('pkg'), n2}) ed = self.mf.edgeData(n, n2) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(fromlist=False, conditional=False, function=False, tryexcept=False)) # 6. pkg.relative n = self.mf.findNode('pkg.relative') self.assertIsInstance(n, modulegraph.SourceModule) refs = set(self.mf.getReferences(n)) self.assertEqual( refs, { self.mf.findNode('__future__'), self.mf.findNode('pkg'), self.mf.findNode('pkg.mod') }) ed = self.mf.edgeData(n, self.mf.findNode('pkg.mod')) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(fromlist=True, conditional=False, function=False, tryexcept=False)) ed = self.mf.edgeData(n, self.mf.findNode('__future__')) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(fromlist=False, conditional=False, function=False, tryexcept=False)) #ed = self.mf.edgeData(n, self.mf.findNode('__future__.absolute_import')) #self.assertIsInstance(ed, modulegraph.DependencyInfo) #self.assertEqual(ed, modulegraph.DependencyInfo( #fromlist=True, conditional=False, function=False, tryexcept=False)) # 7. pkg.toplevel n = self.mf.findNode('pkg.toplevel') self.assertIsInstance(n, modulegraph.SourceModule) refs = set(self.mf.getReferences(n)) self.assertEqual( refs, { self.mf.findNode('__future__'), self.mf.findNode('pkg'), self.mf.findNode('mod') }) ed = self.mf.edgeData(n, self.mf.findNode('mod')) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(fromlist=False, conditional=False, function=False, tryexcept=False)) ed = self.mf.edgeData(n, self.mf.findNode('__future__')) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(fromlist=False, conditional=False, function=False, tryexcept=False)) #ed = self.mf.edgeData(n, self.mf.findNode('__future__.absolute_import')) #self.assertIsInstance(ed, modulegraph.DependencyInfo) #self.assertEqual(ed, modulegraph.DependencyInfo( #fromlist=True, conditional=False, function=False, tryexcept=False)) # 8. pkg.subpkg n = self.mf.findNode('pkg.subpkg') self.assertIsInstance(n, modulegraph.Package) refs = set(self.mf.getReferences(n)) self.assertEqual(refs, {self.mf.findNode('pkg')}) ed = self.mf.edgeData(n, self.mf.findNode('pkg')) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(fromlist=False, conditional=False, function=False, tryexcept=False)) # 9. pkg.subpkg.relative n = self.mf.findNode('pkg.subpkg.relative') self.assertIsInstance(n, modulegraph.SourceModule) refs = set(self.mf.getReferences(n)) self.assertEqual( refs, { self.mf.findNode('__future__'), self.mf.findNode('pkg'), self.mf.findNode('pkg.subpkg'), self.mf.findNode('pkg.mod') }) ed = self.mf.edgeData(n, self.mf.findNode('pkg.subpkg')) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(fromlist=False, conditional=False, function=False, tryexcept=False)) ed = self.mf.edgeData(n, self.mf.findNode('pkg.mod')) self.assertIsInstance(ed, modulegraph.DependencyInfo) self.assertEqual( ed, modulegraph.DependencyInfo(fromlist=True, conditional=False, function=False, tryexcept=False)) # 10. pkg.subpkg.relative2 n = self.mf.findNode('pkg.subpkg.relative2') self.assertIsInstance(n, modulegraph.SourceModule) refs = set(self.mf.getReferences(n)) self.assertEqual( refs, { self.mf.findNode('pkg.subpkg'), self.mf.findNode('pkg.relimport'), self.mf.findNode('__future__') }) # 10. pkg.subpkg.mod2 n = self.mf.findNode('pkg.subpkg.mod2') self.assertIsInstance(n, modulegraph.SourceModule) refs = set(self.mf.getReferences(n)) self.assertEqual( refs, { self.mf.findNode('__future__'), self.mf.findNode('pkg.subpkg'), self.mf.findNode('pkg.sub2.mod'), self.mf.findNode('pkg.sub2'), })