コード例 #1
0
    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)
コード例 #2
0
ファイル: test_edge_data.py プロジェクト: AndreyKaBelka/game
    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)

        # FIXME PyInstaller: original _load_tail returned a MissingModule if
        # (_save)_import_module did return None. PyInstaller changed this in
        # cae47e4f5b51a94ac3ceb5d093283ba0cc895589 and raises an ImportError.
        # Thus the MissingModule node (which was expected to be created when
        # scanning the script above) doesn't exist and findNode will return
        # None, which makes this test fail.
        #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))
コード例 #3
0
    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))
コード例 #4
0
ファイル: test_edge_data.py プロジェクト: AndreyKaBelka/game
    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))
コード例 #5
0
    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')
        # FIXME fails since PyInstaller skips edges pointing to the current
        # graph, see change 49c725e9f5a79b65923b8e1bfdd794f0f6f7c4bf
        #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, set([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, set([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,
            set([
                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,
            set([
                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, set([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,
            set([
                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,
            set([
                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,
            set([
                self.mf.findNode('__future__'),
                self.mf.findNode('pkg.subpkg'),
                self.mf.findNode('pkg.sub2.mod'),
                self.mf.findNode('pkg.sub2'),
            ]))