Exemplo n.º 1
0
 def _check_package(self, depth, alter_sys=False):
     pkg_dir, mod_fname, mod_name = (
            self._make_pkg(example_source, depth, "__main__"))
     pkg_name = mod_name.rpartition(".")[0]
     forget(mod_name)
     expected_ns = example_namespace.copy()
     expected_ns.update({
         "__name__": mod_name,
         "__file__": mod_fname,
         "__package__": pkg_name,
     })
     if alter_sys:
         expected_ns.update({
             "run_argv0": mod_fname,
             "run_name_in_sys_modules": True,
             "module_in_sys_modules": True,
         })
     def create_ns(init_globals):
         return run_module(pkg_name, init_globals, alter_sys=alter_sys)
     try:
         if verbose > 1: print("Running from source:", pkg_name)
         self.check_code_execution(create_ns, expected_ns)
         importlib.invalidate_caches()
         __import__(mod_name)
         os.remove(mod_fname)
         make_legacy_pyc(mod_fname)
         unload(mod_name)  # In case loader caches paths
         if verbose > 1: print("Running from compiled:", pkg_name)
         importlib.invalidate_caches()
         self._fix_ns_for_legacy_pyc(expected_ns, alter_sys)
         self.check_code_execution(create_ns, expected_ns)
     finally:
         self._del_pkg(pkg_dir, depth, pkg_name)
     if verbose > 1: print("Package executed successfully")
Exemplo n.º 2
0
    def test_module_with_large_stack(self, module='longlist'):
        # Regression test for http://bugs.python.org/issue561858.
        filename = module + '.py'

        # Create a file with a list of 65000 elements.
        with open(filename, 'w') as f:
            f.write('d = [\n')
            for i in range(65000):
                f.write('"",\n')
            f.write(']')

        try:
            # Compile & remove .py file; we only need .pyc (or .pyo).
            # Bytecode must be relocated from the PEP 3147 bytecode-only location.
            py_compile.compile(filename)
        finally:
            unlink(filename)

        # Need to be able to load from current dir.
        sys.path.append('')

        try:
            make_legacy_pyc(filename)
            # This used to crash.
            exec('import ' + module)
        finally:
            # Cleanup.
            del sys.path[-1]
            unlink(filename + 'c')
            unlink(filename + 'o')
Exemplo n.º 3
0
    def _check_relative_imports(self, depth, run_name=None):
        contents = r"""\
from __future__ import absolute_import
from . import sibling
from ..uncle.cousin import nephew
"""
        pkg_dir, mod_fname, mod_name = (
               self._make_pkg(contents, depth))
        try:
            self._add_relative_modules(pkg_dir, contents, depth)
            pkg_name = mod_name.rpartition('.')[0]
            if verbose: print("Running from source:", mod_name)
            d1 = run_module(mod_name, run_name=run_name) # Read from source
            self.assertIn("__package__", d1)
            self.assertTrue(d1["__package__"] == pkg_name)
            self.assertIn("sibling", d1)
            self.assertIn("nephew", d1)
            del d1 # Ensure __loader__ entry doesn't keep file open
            __import__(mod_name)
            os.remove(mod_fname)
            make_legacy_pyc(mod_fname)
            unload(mod_name)  # In case the loader caches paths
            if verbose: print("Running from compiled:", mod_name)
            d2 = run_module(mod_name, run_name=run_name) # Read from bytecode
            self.assertIn("__package__", d2)
            self.assertTrue(d2["__package__"] == pkg_name)
            self.assertIn("sibling", d2)
            self.assertIn("nephew", d2)
            del d2 # Ensure __loader__ entry doesn't keep file open
        finally:
            self._del_pkg(pkg_dir, depth, mod_name)
        if verbose: print("Module executed successfully")
Exemplo n.º 4
0
    def run_test(self, test, create=None, *, compile_=None, unlink=None):
        """Test the finding of 'test' with the creation of modules listed in
        'create'.

        Any names listed in 'compile_' are byte-compiled. Modules
        listed in 'unlink' have their source files deleted.

        """
        if create is None:
            create = {test}
        with source_util.create_modules(*create) as mapping:
            if compile_:
                for name in compile_:
                    py_compile.compile(mapping[name])
            if unlink:
                for name in unlink:
                    os.unlink(mapping[name])
                    try:
                        make_legacy_pyc(mapping[name])
                    except OSError as error:
                        # Some tests do not set compile_=True so the source
                        # module will not get compiled and there will be no
                        # PEP 3147 pyc file to rename.
                        if error.errno != errno.ENOENT:
                            raise
            loader = self.import_(mapping['.root'], test)
            self.assertTrue(hasattr(loader, 'load_module'))
            return loader
 def _check_package(self, depth):
     pkg_dir, mod_fname, mod_name = self._make_pkg("x=1\n", depth, "__main__")
     pkg_name, _, _ = mod_name.rpartition(".")
     forget(mod_name)
     try:
         if verbose:
             print("Running from source:", pkg_name)
         d1 = run_module(pkg_name)  # Read from source
         self.assertIn("x", d1)
         self.assertTrue(d1["x"] == 1)
         del d1  # Ensure __loader__ entry doesn't keep file open
         __import__(mod_name)
         os.remove(mod_fname)
         make_legacy_pyc(mod_fname)
         unload(mod_name)  # In case loader caches paths
         if verbose:
             print("Running from compiled:", pkg_name)
         d2 = run_module(pkg_name)  # Read from bytecode
         self.assertIn("x", d2)
         self.assertTrue(d2["x"] == 1)
         del d2  # Ensure __loader__ entry doesn't keep file open
     finally:
         self._del_pkg(pkg_dir, depth, pkg_name)
     if verbose:
         print("Package executed successfully")
Exemplo n.º 6
0
    def test_module_with_large_stack(self, module="longlist"):
        # Regression test for http://bugs.python.org/issue561858.
        filename = module + ".py"

        # Create a file with a list of 65000 elements.
        with open(filename, "w") as f:
            f.write("d = [\n")
            for i in range(65000):
                f.write('"",\n')
            f.write("]")

        try:
            # Compile & remove .py file; we only need .pyc (or .pyo).
            # Bytecode must be relocated from the PEP 3147 bytecode-only location.
            py_compile.compile(filename)
        finally:
            unlink(filename)

        # Need to be able to load from current dir.
        sys.path.append("")
        importlib.invalidate_caches()

        try:
            make_legacy_pyc(filename)
            # This used to crash.
            exec("import " + module)
        finally:
            # Cleanup.
            del sys.path[-1]
            unlink(filename + "c")
            unlink(filename + "o")
Exemplo n.º 7
0
 def test_script_compiled(self):
     with temp_dir() as script_dir:
         script_name = _make_test_script(script_dir, "script")
         py_compile.compile(script_name, doraise=True)
         os.remove(script_name)
         pyc_file = support.make_legacy_pyc(script_name)
         self._check_script(pyc_file, pyc_file, pyc_file, script_dir, None, importlib.machinery.SourcelessFileLoader)
 def test_script_compiled(self):
     with temp_dir() as script_dir:
         script_name = _make_test_script(script_dir, 'script')
         py_compile.compile(script_name, doraise=True)
         os.remove(script_name)
         pyc_file = support.make_legacy_pyc(script_name)
         self._check_script(pyc_file)
Exemplo n.º 9
0
 def test_script_compiled(self):
     with support.temp_dir() as script_dir:
         script_name = _make_test_script(script_dir, 'script')
         py_compile.compile(script_name, doraise=True)
         os.remove(script_name)
         pyc_file = support.make_legacy_pyc(script_name)
         self._check_script(pyc_file, pyc_file, pyc_file, script_dir, None,
                            importlib.machinery.SourcelessFileLoader)
Exemplo n.º 10
0
 def test_directory_compiled(self):
     with temp_dir() as script_dir:
         mod_name = "__main__"
         script_name = self._make_test_script(script_dir, mod_name)
         compiled_name = py_compile.compile(script_name, doraise=True)
         os.remove(script_name)
         legacy_pyc = make_legacy_pyc(script_name)
         self._check_script(script_dir, "<run_path>", legacy_pyc, script_dir, "")
Exemplo n.º 11
0
 def test_directory_compiled(self):
     with temp_dir() as script_dir:
         script_name = _make_test_script(script_dir, '__main__')
         py_compile.compile(script_name, doraise=True)
         os.remove(script_name)
         pyc_file = support.make_legacy_pyc(script_name)
         self._check_script(script_dir, pyc_file, script_dir, script_dir,
                            '')
 def test_directory_compiled(self):
     source = self.main_in_children_source
     with temp_dir() as script_dir:
         script_name = _make_test_script(script_dir, '__main__',
                                         source=source)
         py_compile.compile(script_name, doraise=True)
         os.remove(script_name)
         pyc_file = support.make_legacy_pyc(script_name)
         self._check_script(script_dir)
Exemplo n.º 13
0
 def test_directory_compiled(self):
     with support.temp_dir() as script_dir:
         script_name = _make_test_script(script_dir, '__main__')
         py_compile.compile(script_name, doraise=True)
         os.remove(script_name)
         pyc_file = support.make_legacy_pyc(script_name)
         self._check_script(script_dir, pyc_file, script_dir,
                            script_dir, '',
                            importlib.machinery.SourcelessFileLoader)
Exemplo n.º 14
0
 def test_directory_compiled(self):
     with temp_dir() as script_dir:
         mod_name = '__main__'
         script_name = self._make_test_script(script_dir, mod_name)
         compiled_name = py_compile.compile(script_name, doraise=True)
         os.remove(script_name)
         legacy_pyc = make_legacy_pyc(script_name)
         self._check_script(script_dir, "<run_path>", legacy_pyc,
                            script_dir)
 def test_module_without_source(self):
     target = "another_module.py"
     py_compile.compile(self.file_name, dfile=target)
     os.remove(self.file_name)
     pyc_file = make_legacy_pyc(self.file_name)
     mod = self.import_module()
     self.assertEqual(mod.module_filename, pyc_file)
     self.assertEqual(mod.code_filename, target)
     self.assertEqual(mod.func_filename, target)
Exemplo n.º 16
0
 def test___cached___legacy_pyc(self):
     __import__(TESTFN)
     pyc_file = make_legacy_pyc(self.source)
     os.remove(self.source)
     unload(TESTFN)
     importlib.invalidate_caches()
     m = __import__(TESTFN)
     self.assertEqual(m.__cached__, os.path.join(os.curdir, os.path.
         relpath(pyc_file)))
Exemplo n.º 17
0
 def test_directory_compiled(self):
     source = self.main_in_children_source
     with temp_dir() as script_dir:
         script_name = _make_test_script(script_dir, '__main__',
                                         source=source)
         py_compile.compile(script_name, doraise=True)
         os.remove(script_name)
         pyc_file = support.make_legacy_pyc(script_name)
         self._check_script(script_dir)
Exemplo n.º 18
0
 def test_module_without_source(self):
     target = "another_module.py"
     py_compile.compile(self.file_name, dfile=target)
     os.remove(self.file_name)
     pyc_file = make_legacy_pyc(self.file_name)
     mod = self.import_module()
     self.assertEqual(mod.module_filename, pyc_file)
     self.assertEqual(mod.code_filename, target)
     self.assertEqual(mod.func_filename, target)
Exemplo n.º 19
0
 def test_script_compiled(self):
     with temp_dir() as script_dir:
         script_name = _make_test_script(script_dir, 'script')
         py_compile.compile(script_name, doraise=True)
         os.remove(script_name)
         pyc_file = support.make_legacy_pyc(script_name)
         package = '' if support.check_impl_detail(pypy=True) else None
         self._check_script(pyc_file, pyc_file,
                            pyc_file, script_dir, package,
                            importlib.machinery.SourcelessFileLoader)
 def test_directory_compiled(self):
     with temp_dir() as script_dir:
         mod_name = '__main__'
         script_name = self._make_test_script(script_dir, mod_name)
         compiled_name = py_compile.compile(script_name, doraise=True)
         os.remove(script_name)
         if not sys.dont_write_bytecode:
             legacy_pyc = make_legacy_pyc(script_name)
             self._check_script(script_dir, "<run_path>", legacy_pyc,
                                script_dir, mod_name=mod_name)
Exemplo n.º 21
0
    def _check_relative_imports(self, depth, run_name=None):
        contents = """\\
from __future__ import absolute_import
from . import sibling
from ..uncle.cousin import nephew
"""
        pkg_dir, mod_fname, mod_name, mod_spec = self._make_pkg(
            contents, depth)
        if run_name is None:
            expected_name = mod_name
        else:
            expected_name = run_name
        try:
            self._add_relative_modules(pkg_dir, contents, depth)
            pkg_name = mod_name.rpartition('.')[0]
            if verbose > 1:
                print('Running from source:', mod_name)
            d1 = run_module(mod_name, run_name=run_name)
            self.assertEqual(d1['__name__'], expected_name)
            self.assertEqual(d1['__package__'], pkg_name)
            self.assertIn('sibling', d1)
            self.assertIn('nephew', d1)
            del d1
            importlib.invalidate_caches()
            __import__(mod_name)
            os.remove(mod_fname)
            if not sys.dont_write_bytecode:
                make_legacy_pyc(mod_fname)
                unload(mod_name)
                if verbose > 1:
                    print('Running from compiled:', mod_name)
                importlib.invalidate_caches()
                d2 = run_module(mod_name, run_name=run_name)
                self.assertEqual(d2['__name__'], expected_name)
                self.assertEqual(d2['__package__'], pkg_name)
                self.assertIn('sibling', d2)
                self.assertIn('nephew', d2)
                del d2
        finally:
            self._del_pkg(pkg_dir)
        if verbose > 1:
            print('Module executed successfully')
Exemplo n.º 22
0
 def test_package_compiled(self):
     source = self.main_in_children_source
     with temp_dir() as script_dir:
         pkg_dir = os.path.join(script_dir, 'test_pkg')
         make_pkg(pkg_dir)
         script_name = _make_test_script(pkg_dir, '__main__', source=source)
         compiled_name = py_compile.compile(script_name, doraise=True)
         os.remove(script_name)
         pyc_file = support.make_legacy_pyc(script_name)
         launch_name = _make_launch_script(script_dir, 'launch', 'test_pkg')
         self._check_script(launch_name)
Exemplo n.º 23
0
 def test_file_to_source(self):
     source = TESTFN + '.py'
     with open(source, 'w') as f:
         f.write('test = None\n')
     sys.path.insert(0, os.curdir)
     try:
         mod = __import__(TESTFN)
         self.assertTrue(mod.__file__.endswith('.py'))
         os.remove(source)
         del sys.modules[TESTFN]
         make_legacy_pyc(source)
         importlib.invalidate_caches()
         mod = __import__(TESTFN)
         base, ext = os.path.splitext(mod.__file__)
         self.assertEqual(ext, '.pyc')
     finally:
         del sys.path[0]
         remove_files(TESTFN)
         if TESTFN in sys.modules:
             del sys.modules[TESTFN]
Exemplo n.º 24
0
 def test_package_compiled(self):
     with temp_dir() as script_dir:
         pkg_dir = os.path.join(script_dir, 'test_pkg')
         make_pkg(pkg_dir)
         script_name = _make_test_script(pkg_dir, '__main__')
         compiled_name = py_compile.compile(script_name, doraise=True)
         os.remove(script_name)
         pyc_file = support.make_legacy_pyc(script_name)
         launch_name = _make_launch_script(script_dir, 'launch', 'test_pkg')
         self._check_script(launch_name, pyc_file,
                            pyc_file, script_dir, 'test_pkg')
Exemplo n.º 25
0
    def _check_relative_imports(self, depth, run_name=None):
        contents = r"""\
from __future__ import absolute_import
from . import sibling
from ..uncle.cousin import nephew
"""
        pkg_dir, mod_fname, mod_name, mod_spec = self._make_pkg(contents, depth)
        if run_name is None:
            expected_name = mod_name
        else:
            expected_name = run_name
        try:
            self._add_relative_modules(pkg_dir, contents, depth)
            pkg_name = mod_name.rpartition(".")[0]
            if verbose > 1:
                print("Running from source:", mod_name)
            d1 = run_module(mod_name, run_name=run_name)  # Read from source
            self.assertEqual(d1["__name__"], expected_name)
            self.assertEqual(d1["__package__"], pkg_name)
            self.assertIn("sibling", d1)
            self.assertIn("nephew", d1)
            del d1  # Ensure __loader__ entry doesn't keep file open
            importlib.invalidate_caches()
            __import__(mod_name)
            os.remove(mod_fname)
            if not sys.dont_write_bytecode:
                make_legacy_pyc(mod_fname)
                unload(mod_name)  # In case the loader caches paths
                if verbose > 1:
                    print("Running from compiled:", mod_name)
                importlib.invalidate_caches()
                d2 = run_module(mod_name, run_name=run_name)  # Read from bytecode
                self.assertEqual(d2["__name__"], expected_name)
                self.assertEqual(d2["__package__"], pkg_name)
                self.assertIn("sibling", d2)
                self.assertIn("nephew", d2)
                del d2  # Ensure __loader__ entry doesn't keep file open
        finally:
            self._del_pkg(pkg_dir)
        if verbose > 1:
            print("Module executed successfully")
Exemplo n.º 26
0
 def test_package_compiled(self):
     with temp_dir() as script_dir:
         pkg_dir = os.path.join(script_dir, "test_pkg")
         make_pkg(pkg_dir)
         script_name = _make_test_script(pkg_dir, "__main__")
         compiled_name = py_compile.compile(script_name, doraise=True)
         os.remove(script_name)
         pyc_file = support.make_legacy_pyc(script_name)
         launch_name = _make_launch_script(script_dir, "launch", "test_pkg")
         self._check_script(
             launch_name, pyc_file, pyc_file, script_dir, "test_pkg", importlib.machinery.SourcelessFileLoader
         )
Exemplo n.º 27
0
    def test_file_to_source(self):
        # check if __file__ points to the source file where available
        source = TESTFN + ".py"
        with open(source, "w") as f:
            f.write("test = None\n")

        sys.path.insert(0, os.curdir)
        try:
            mod = __import__(TESTFN)
            self.assertTrue(mod.__file__.endswith('.py'))
            os.remove(source)
            del sys.modules[TESTFN]
            make_legacy_pyc(source)
            mod = __import__(TESTFN)
            base, ext = os.path.splitext(mod.__file__)
            self.assertIn(ext, ('.pyc', '.pyo'))
        finally:
            del sys.path[0]
            remove_files(TESTFN)
            if TESTFN in sys.modules:
                del sys.modules[TESTFN]
Exemplo n.º 28
0
 def _check_module(self, depth):
     pkg_dir, mod_fname, mod_name = (self._make_pkg("x=1\n", depth))
     forget(mod_name)
     try:
         if verbose: print("Running from source:", mod_name)
         d1 = run_module(mod_name)  # Read from source
         self.assertIn("x", d1)
         self.assertEqual(d1["x"], 1)
         del d1  # Ensure __loader__ entry doesn't keep file open
         __import__(mod_name)
         os.remove(mod_fname)
         make_legacy_pyc(mod_fname)
         unload(mod_name)  # In case loader caches paths
         if verbose: print("Running from compiled:", mod_name)
         d2 = run_module(mod_name)  # Read from bytecode
         self.assertIn("x", d2)
         self.assertEqual(d2["x"], 1)
         del d2  # Ensure __loader__ entry doesn't keep file open
     finally:
         self._del_pkg(pkg_dir, depth, mod_name)
     if verbose: print("Module executed successfully")
Exemplo n.º 29
0
 def test_package_compiled(self):
     with support.temp_dir() as script_dir:
         pkg_dir = os.path.join(script_dir, 'test_pkg')
         make_pkg(pkg_dir)
         script_name = _make_test_script(pkg_dir, '__main__')
         compiled_name = py_compile.compile(script_name, doraise=True)
         os.remove(script_name)
         pyc_file = support.make_legacy_pyc(script_name)
         self._check_script(["-m", "test_pkg"], pyc_file,
                            pyc_file, script_dir, 'test_pkg',
                            importlib.machinery.SourcelessFileLoader,
                            cwd=script_dir)
Exemplo n.º 30
0
 def test_package_compiled(self):
     with support.temp_dir() as script_dir:
         pkg_dir = os.path.join(script_dir, 'test_pkg')
         make_pkg(pkg_dir)
         script_name = _make_test_script(pkg_dir, '__main__')
         compiled_name = py_compile.compile(script_name, doraise=True)
         os.remove(script_name)
         pyc_file = support.make_legacy_pyc(script_name)
         self._check_script(["-m", "test_pkg"], pyc_file,
                            pyc_file, script_dir, 'test_pkg',
                            importlib.machinery.SourcelessFileLoader,
                            cwd=script_dir)
    def test_file_to_source(self):
        # check if __file__ points to the source file where available
        source = TESTFN + ".py"
        with open(source, "w") as f:
            f.write("test = None\n")

        sys.path.insert(0, os.curdir)
        try:
            mod = __import__(TESTFN)
            self.assertTrue(mod.__file__.endswith('.py'))
            os.remove(source)
            del sys.modules[TESTFN]
            make_legacy_pyc(source)
            mod = __import__(TESTFN)
            base, ext = os.path.splitext(mod.__file__)
            self.assertIn(ext, ('.pyc', '.pyo'))
        finally:
            del sys.path[0]
            remove_files(TESTFN)
            if TESTFN in sys.modules:
                del sys.modules[TESTFN]
Exemplo n.º 32
0
    def _check_relative_imports(self, depth, run_name=None):
        contents = r"""\
from __future__ import absolute_import
from . import sibling
from ..uncle.cousin import nephew
"""
        pkg_dir, mod_fname, mod_name, mod_spec = (self._make_pkg(
            contents, depth))
        if run_name is None:
            expected_name = mod_name
        else:
            expected_name = run_name
        try:
            self._add_relative_modules(pkg_dir, contents, depth)
            pkg_name = mod_name.rpartition('.')[0]
            if verbose > 1: print("Running from source:", mod_name)
            d1 = run_module(mod_name, run_name=run_name)  # Read from source
            self.assertEqual(d1["__name__"], expected_name)
            self.assertEqual(d1["__package__"], pkg_name)
            self.assertIn("sibling", d1)
            self.assertIn("nephew", d1)
            del d1  # Ensure __loader__ entry doesn't keep file open
            importlib.invalidate_caches()
            __import__(mod_name)
            os.remove(mod_fname)
            if not sys.dont_write_bytecode:
                make_legacy_pyc(mod_fname)
                unload(mod_name)  # In case the loader caches paths
                if verbose > 1: print("Running from compiled:", mod_name)
                importlib.invalidate_caches()
                d2 = run_module(mod_name,
                                run_name=run_name)  # Read from bytecode
                self.assertEqual(d2["__name__"], expected_name)
                self.assertEqual(d2["__package__"], pkg_name)
                self.assertIn("sibling", d2)
                self.assertIn("nephew", d2)
                del d2  # Ensure __loader__ entry doesn't keep file open
        finally:
            self._del_pkg(pkg_dir)
        if verbose > 1: print("Module executed successfully")
Exemplo n.º 33
0
    def _check_module(self, depth, alter_sys=False, *, namespace=False, parent_namespaces=False):
        pkg_dir, mod_fname, mod_name, mod_spec = self._make_pkg(
            example_source, depth, namespace=namespace, parent_namespaces=parent_namespaces
        )
        forget(mod_name)
        expected_ns = example_namespace.copy()
        expected_ns.update(
            {
                "__name__": mod_name,
                "__file__": mod_fname,
                "__cached__": mod_spec.cached,
                "__package__": mod_name.rpartition(".")[0],
                "__spec__": mod_spec,
            }
        )
        if alter_sys:
            expected_ns.update({"run_argv0": mod_fname, "run_name_in_sys_modules": True, "module_in_sys_modules": True})

        def create_ns(init_globals):
            return run_module(mod_name, init_globals, alter_sys=alter_sys)

        try:
            if verbose > 1:
                print("Running from source:", mod_name)
            self.check_code_execution(create_ns, expected_ns)
            importlib.invalidate_caches()
            __import__(mod_name)
            os.remove(mod_fname)
            if not sys.dont_write_bytecode:
                make_legacy_pyc(mod_fname)
                unload(mod_name)  # In case loader caches paths
                importlib.invalidate_caches()
                if verbose > 1:
                    print("Running from compiled:", mod_name)
                self._fix_ns_for_legacy_pyc(expected_ns, alter_sys)
                self.check_code_execution(create_ns, expected_ns)
        finally:
            self._del_pkg(pkg_dir)
        if verbose > 1:
            print("Module executed successfully")
Exemplo n.º 34
0
 def _check_package(self, depth, alter_sys=False,
                       *, namespace=False, parent_namespaces=False):
     pkg_dir, mod_fname, mod_name, mod_spec = (
            self._make_pkg(example_source, depth, "__main__",
                           namespace=namespace,
                           parent_namespaces=parent_namespaces))
     pkg_name = mod_name.rpartition(".")[0]
     forget(mod_name)
     expected_ns = example_namespace.copy()
     expected_ns.update({
         "__name__": mod_name,
         "__file__": mod_fname,
         "__cached__": importlib.util.cache_from_source(mod_fname),
         "__package__": pkg_name,
         "__spec__": mod_spec,
     })
     if alter_sys:
         expected_ns.update({
             "run_argv0": mod_fname,
             "run_name_in_sys_modules": True,
             "module_in_sys_modules": True,
         })
     def create_ns(init_globals):
         return run_module(pkg_name, init_globals, alter_sys=alter_sys)
     try:
         if verbose > 1: print("Running from source:", pkg_name)
         self.check_code_execution(create_ns, expected_ns)
         importlib.invalidate_caches()
         __import__(mod_name)
         os.remove(mod_fname)
         if not sys.dont_write_bytecode:
             make_legacy_pyc(mod_fname)
             unload(mod_name)  # In case loader caches paths
             if verbose > 1: print("Running from compiled:", pkg_name)
             importlib.invalidate_caches()
             self._fix_ns_for_legacy_pyc(expected_ns, alter_sys)
             self.check_code_execution(create_ns, expected_ns)
     finally:
         self._del_pkg(pkg_dir)
     if verbose > 1: print("Package executed successfully")
Exemplo n.º 35
0
    def test_module_with_large_stack(self, module='longlist'):
        # Regression test for http://bugs.python.org/issue561858.
        filename = module + '.py'

        # Create a file with a list of 65000 elements.
        with open(filename, 'w') as f:
            f.write('d = [\n')
            for i in range(65000):
                f.write('"",\n')
            f.write(']')

        try:
            # Compile & remove .py file; we only need .pyc.
            # Bytecode must be relocated from the PEP 3147 bytecode-only location.
            py_compile.compile(filename)
        finally:
            unlink(filename)

        # Need to be able to load from current dir.
        sys.path.append('')
        importlib.invalidate_caches()

        namespace = {}
        try:
            make_legacy_pyc(filename)
            # This used to crash.
            exec('import ' + module, None, namespace)
        finally:
            # Cleanup.
            del sys.path[-1]
            unlink(filename + 'c')
            unlink(filename + 'o')

            # Remove references to the module (unload the module)
            namespace.clear()
            try:
                del sys.modules[module]
            except KeyError:
                pass
Exemplo n.º 36
0
 def test___cached___legacy_pyc(self):
     # Like test___cached__() except that for backward compatibility,
     # when the pyc file lives where the py file would have been (and named
     # without the tag), it is importable.  The __cached__ of the imported
     # module is the pyc location.
     __import__(TESTFN)
     # pyc_file gets removed in _clean() via tearDown().
     pyc_file = make_legacy_pyc(self.source)
     os.remove(self.source)
     unload(TESTFN)
     m = __import__(TESTFN)
     self.assertEqual(m.__cached__,
                      os.path.join(os.curdir, os.path.relpath(pyc_file)))
Exemplo n.º 37
0
 def _check_module(self, depth):
     pkg_dir, mod_fname, mod_name = (
            self._make_pkg("x=1\n", depth))
     forget(mod_name)
     try:
         if verbose: print("Running from source:", mod_name)
         d1 = run_module(mod_name) # Read from source
         self.assertIn("x", d1)
         self.assertEqual(d1["x"], 1)
         del d1 # Ensure __loader__ entry doesn't keep file open
         __import__(mod_name)
         os.remove(mod_fname)
         make_legacy_pyc(mod_fname)
         unload(mod_name)  # In case loader caches paths
         if verbose: print("Running from compiled:", mod_name)
         d2 = run_module(mod_name) # Read from bytecode
         self.assertIn("x", d2)
         self.assertEqual(d2["x"], 1)
         del d2 # Ensure __loader__ entry doesn't keep file open
     finally:
         self._del_pkg(pkg_dir, depth, mod_name)
     if verbose: print("Module executed successfully")
 def test___cached___legacy_pyc(self):
     # Like test___cached__() except that for backward compatibility,
     # when the pyc file lives where the py file would have been (and named
     # without the tag), it is importable.  The __cached__ of the imported
     # module is the pyc location.
     __import__(TESTFN)
     # pyc_file gets removed in _clean() via tearDown().
     pyc_file = make_legacy_pyc(self.source)
     os.remove(self.source)
     unload(TESTFN)
     m = __import__(TESTFN)
     self.assertEqual(m.__cached__,
                      os.path.join(os.curdir, os.path.relpath(pyc_file)))
Exemplo n.º 39
0
 def test_directory_compiled(self):
     with temp_dir() as script_dir:
         mod_name = '__main__'
         script_name = self._make_test_script(script_dir, mod_name)
         compiled_name = py_compile.compile(script_name, doraise=True)
         os.remove(script_name)
         if not sys.dont_write_bytecode:
             legacy_pyc = make_legacy_pyc(script_name)
             self._check_script(script_dir,
                                '<run_path>',
                                legacy_pyc,
                                script_dir,
                                mod_name=mod_name)
Exemplo n.º 40
0
def make_zip_script(zip_dir, zip_basename, script_name, name_in_zip=None):
    zip_filename = zip_basename + os.extsep + 'zip'
    zip_name = os.path.join(zip_dir, zip_filename)
    zip_file = zipfile.ZipFile(zip_name, 'w')
    if name_in_zip is None:
        parts = script_name.split(os.sep)
        if len(parts) >= 2 and parts[-2] == '__pycache__':
            legacy_pyc = make_legacy_pyc(source_from_cache(script_name))
            name_in_zip = os.path.basename(legacy_pyc)
            script_name = legacy_pyc
        else:
            name_in_zip = os.path.basename(script_name)
    zip_file.write(script_name, name_in_zip)
    zip_file.close()
    return zip_name, os.path.join(zip_name, name_in_zip)
Exemplo n.º 41
0
def make_zip_script(zip_dir, zip_basename, script_name, name_in_zip=None):
    zip_filename = zip_basename+os.extsep+'zip'
    zip_name = os.path.join(zip_dir, zip_filename)
    with zipfile.ZipFile(zip_name, 'w') as zip_file:
        if name_in_zip is None:
            parts = script_name.split(os.sep)
            if len(parts) >= 2 and parts[-2] == '__pycache__':
                legacy_pyc = make_legacy_pyc(source_from_cache(script_name))
                name_in_zip = os.path.basename(legacy_pyc)
                script_name = legacy_pyc
            else:
                name_in_zip = os.path.basename(script_name)
        zip_file.write(script_name, name_in_zip)
    #if test.support.verbose:
    #    with zipfile.ZipFile(zip_name, 'r') as zip_file:
    #        print 'Contents of %r:' % zip_name
    #        zip_file.printdir()
    return zip_name, os.path.join(zip_name, name_in_zip)
Exemplo n.º 42
0
def make_zip_script(zip_dir, zip_basename, script_name, name_in_zip=None):
    zip_filename = zip_basename+os.extsep+'zip'
    zip_name = os.path.join(zip_dir, zip_filename)
    with zipfile.ZipFile(zip_name, 'w') as zip_file:
        if name_in_zip is None:
            parts = script_name.split(os.sep)
            if len(parts) >= 2 and parts[-2] == '__pycache__':
                legacy_pyc = make_legacy_pyc(source_from_cache(script_name))
                name_in_zip = os.path.basename(legacy_pyc)
                script_name = legacy_pyc
            else:
                name_in_zip = os.path.basename(script_name)
        zip_file.write(script_name, name_in_zip)
    #if test.support.verbose:
    #    with zipfile.ZipFile(zip_name, 'r') as zip_file:
    #        print 'Contents of %r:' % zip_name
    #        zip_file.printdir()
    return zip_name, os.path.join(zip_name, name_in_zip)
Exemplo n.º 43
0
 def manipulate_bytecode(self, name, mapping, manipulator, *, del_source=False):
     """Manipulate the bytecode of a module by passing it into a callable
     that returns what to use as the new bytecode."""
     try:
         del sys.modules["_temp"]
     except KeyError:
         pass
     py_compile.compile(mapping[name])
     if not del_source:
         bytecode_path = imp.cache_from_source(mapping[name])
     else:
         os.unlink(mapping[name])
         bytecode_path = make_legacy_pyc(mapping[name])
     if manipulator:
         with open(bytecode_path, "rb") as file:
             bc = file.read()
             new_bc = manipulator(bc)
         with open(bytecode_path, "wb") as file:
             if new_bc is not None:
                 file.write(new_bc)
     return bytecode_path
Exemplo n.º 44
0
 def manipulate_bytecode(self, name, mapping, manipulator, *,
                         del_source=False):
     """Manipulate the bytecode of a module by passing it into a callable
     that returns what to use as the new bytecode."""
     try:
         del sys.modules['_temp']
     except KeyError:
         pass
     py_compile.compile(mapping[name])
     if not del_source:
         bytecode_path = imp.cache_from_source(mapping[name])
     else:
         os.unlink(mapping[name])
         bytecode_path = make_legacy_pyc(mapping[name])
     if manipulator:
         with open(bytecode_path, 'rb') as file:
             bc = file.read()
             new_bc = manipulator(bc)
         with open(bytecode_path, 'wb') as file:
             if new_bc is not None:
                 file.write(new_bc)
     return bytecode_path
Exemplo n.º 45
0
 def manipulate_bytecode(self,
                         name, mapping, manipulator, *,
                         del_source=False,
                         invalidation_mode=py_compile.PycInvalidationMode.TIMESTAMP):
     """Manipulate the bytecode of a module by passing it into a callable
     that returns what to use as the new bytecode."""
     try:
         del sys.modules['_temp']
     except KeyError:
         pass
     py_compile.compile(mapping[name], invalidation_mode=invalidation_mode)
     if not del_source:
         bytecode_path = self.util.cache_from_source(mapping[name])
     else:
         os.unlink(mapping[name])
         bytecode_path = make_legacy_pyc(mapping[name])
     if manipulator:
         with open(bytecode_path, 'rb') as file:
             bc = file.read()
             new_bc = manipulator(bc)
         with open(bytecode_path, 'wb') as file:
             if new_bc is not None:
                 file.write(new_bc)
     return bytecode_path