def test_package_data(self): sources = self.mkdtemp() pkg_dir = os.path.join(sources, 'pkg') os.mkdir(pkg_dir) f = open(os.path.join(pkg_dir, "__init__.py"), "w") try: f.write("# Pretend this is a package.") finally: f.close() # let's have two files to make sure globbing works f = open(os.path.join(pkg_dir, "README.txt"), "w") try: f.write("Info about this package") finally: f.close() f = open(os.path.join(pkg_dir, "HACKING.txt"), "w") try: f.write("How to contribute") finally: f.close() destination = self.mkdtemp() dist = Distribution({"packages": ["pkg"], "package_dir": sources}) dist.command_obj["build"] = support.DummyCommand( force=False, build_lib=destination, use_2to3_fixers=None, convert_2to3_doctests=None, use_2to3=False) dist.packages = ["pkg"] dist.package_data = {"pkg": ["*.txt"]} dist.package_dir = sources cmd = build_py(dist) cmd.compile = True cmd.ensure_finalized() self.assertEqual(cmd.package_data, dist.package_data) cmd.run() # This makes sure the list of outputs includes byte-compiled # files for Python modules but not for package data files # (there shouldn't *be* byte-code files for those!). # FIXME the test below is not doing what the comment above says, and # if it did it would show a code bug: if we add a demo.py file to # package_data, it gets byte-compiled! outputs = cmd.get_outputs() self.assertEqual(len(outputs), 4, outputs) pkgdest = os.path.join(destination, "pkg") files = os.listdir(pkgdest) self.assertEqual(sorted(files), ["HACKING.txt", "README.txt", "__init__.py", "__init__.pyc"])
def get_cmd(self, metadata=None): """Returns a cmd""" if metadata is None: metadata = {'name': 'fake', 'version': '1.0', 'home_page': 'xxx', 'author': 'xxx', 'author_email': 'xxx'} dist = Distribution(metadata) dist.packages = ['somecode'] cmd = sdist(dist) cmd.dist_dir = 'dist' return dist, cmd
def test_package_data(self): sources = self.mkdtemp() pkg_dir = os.path.join(sources, 'pkg') os.mkdir(pkg_dir) f = open(os.path.join(pkg_dir, "__init__.py"), "w") try: f.write("# Pretend this is a package.") finally: f.close() # let's have two files to make sure globbing works f = open(os.path.join(pkg_dir, "README.txt"), "w") try: f.write("Info about this package") finally: f.close() f = open(os.path.join(pkg_dir, "HACKING.txt"), "w") try: f.write("How to contribute") finally: f.close() destination = self.mkdtemp() dist = Distribution({"packages": ["pkg"], "package_dir": sources}) dist.command_obj["build"] = support.DummyCommand( force=False, build_lib=destination, use_2to3_fixers=None, convert_2to3_doctests=None, use_2to3=False) dist.packages = ["pkg"] dist.package_data = {"pkg": ["*.txt"]} dist.package_dir = sources cmd = build_py(dist) cmd.compile = True cmd.ensure_finalized() self.assertEqual(cmd.package_data, dist.package_data) cmd.run() # This makes sure the list of outputs includes byte-compiled # files for Python modules but not for package data files # (there shouldn't *be* byte-code files for those!). # FIXME the test below is not doing what the comment above says, and # if it did it would show a code bug: if we add a demo.py file to # package_data, it gets byte-compiled! outputs = cmd.get_outputs() self.assertEqual(len(outputs), 4, outputs) pkgdest = os.path.join(destination, "pkg") files = os.listdir(pkgdest) wanted = ["__init__.py", "HACKING.txt", "README.txt"] if sys.version_info[:2] == (3, 1): wanted.append("__init__.pyc") else: wanted.append("__pycache__") self.assertEqual(sorted(files), sorted(wanted)) if sys.version_info[:2] >= (3, 2): pycache_dir = os.path.join(pkgdest, "__pycache__") pyc_files = os.listdir(pycache_dir) self.assertEqual(["__init__.%s.pyc" % imp.get_tag()], pyc_files)