def test_setup_py_context(): poetry = Factory().create_poetry(project("complete")) builder = SdistBuilder(poetry) project_setup_py = poetry.file.parent / "setup.py" assert not project_setup_py.exists() try: with builder.setup_py() as setup: assert setup.exists() assert project_setup_py == setup with open(str(setup), "rb") as f: # we convert to string and replace line endings here for compatibility data = to_str(encode(f.read())).replace("\r\n", "\n") assert data == to_str(builder.build_setup()) assert not project_setup_py.exists() finally: if project_setup_py.exists(): project_setup_py.unlink()
def build_pkg_info(self): return encode(self.get_metadata_content())
def build_setup(self): # type: () -> bytes before, extra, after = [], [], [] package_dir = {} # If we have a build script, use it if self._package.build_script: after += [ "from {} import *".format(self._package.build_script.split(".")[0]), "build(setup_kwargs)", ] modules = [] packages = [] package_data = {} for include in self._module.includes: if include.formats and "sdist" not in include.formats: continue if isinstance(include, PackageInclude): if include.is_package(): pkg_dir, _packages, _package_data = self.find_packages(include) if pkg_dir is not None: package_dir[""] = os.path.relpath(pkg_dir, str(self._path)) packages += [p for p in _packages if p not in packages] package_data.update(_package_data) else: module = include.elements[0].relative_to(include.base).stem if include.source is not None: package_dir[""] = str(include.base.relative_to(self._path)) if module not in modules: modules.append(module) else: pass if package_dir: before.append("package_dir = \\\n{}\n".format(pformat(package_dir))) extra.append("'package_dir': package_dir,") if packages: before.append("packages = \\\n{}\n".format(pformat(sorted(packages)))) extra.append("'packages': packages,") if package_data: before.append("package_data = \\\n{}\n".format(pformat(package_data))) extra.append("'package_data': package_data,") if modules: before.append("modules = \\\n{}".format(pformat(modules))) extra.append("'py_modules': modules,".format()) dependencies, extras = self.convert_dependencies( self._package, self._package.requires ) if dependencies: before.append( "install_requires = \\\n{}\n".format(pformat(sorted(dependencies))) ) extra.append("'install_requires': install_requires,") if extras: before.append("extras_require = \\\n{}\n".format(pformat(extras))) extra.append("'extras_require': extras_require,") entry_points = self.convert_entry_points() if entry_points: before.append("entry_points = \\\n{}\n".format(pformat(entry_points))) extra.append("'entry_points': entry_points,") if self._package.python_versions != "*": python_requires = self._meta.requires_python extra.append("'python_requires': {!r},".format(python_requires)) return encode( SETUP.format( before="\n".join(before), name=to_str(self._meta.name), version=to_str(self._meta.version), description=to_str(self._meta.summary), long_description=to_str(self._meta.description), author=to_str(self._meta.author), author_email=to_str(self._meta.author_email), maintainer=to_str(self._meta.maintainer), maintainer_email=to_str(self._meta.maintainer_email), url=to_str(self._meta.home_page), extra="\n ".join(extra), after="\n".join(after), ) )
def build_pkg_info(self): # type: () -> bytes return encode(self.get_metadata_content())