def main(): logger = StreamLogger(sys.stdout) pypi = Pypi(logger=logger) requirements = ["pip", "setuptools", "wheel"] for name in requirements: package = pypi.get_package(name) source_release = pypi.get_source_release(name=name, version=package.version) if source_release is None: logger.warning(f"Could not update source for package `{name}`") continue INDEX[name] = INDEX.Entry( url=source_release.url, sha256=source_release.sha256_digest )
def build_wheel(target_directory: str, requirement: str) -> str: logger = StreamLogger(sys.stdout) requirement_parser = RequirementParser(logger=logger) package_directory = os.path.join(ROOT, "unittests", "data") escaped_requirement = shlex.quote(requirement) target_directory = os.path.abspath(target_directory) with tempfile.TemporaryDirectory() as build_directory: os.chdir(build_directory) nix = Nix(logger=logger) nix.shell( command=f"pip wheel {escaped_requirement} --find-links {package_directory} --no-deps", derivation_path=DERIVATION_PATH, nix_arguments=dict(), ) try: parsed_requirement = requirement_parser.parse(requirement) except ParsingFailed: for path in os.listdir("."): if path.endswith(".whl"): wheel_path = path break else: raise Exception("Build process did not produce .whl file") else: for path in os.listdir("."): if path.endswith(".whl") and parsed_requirement.name() in path: wheel_path = path break else: raise Exception("Build process did not produce .whl file") target_file_name = os.path.basename(wheel_path) target_path = os.path.join(target_directory, target_file_name) shutil.move(wheel_path, target_path) return target_file_name
def logger(request): stream = StringIO("") stream_logger = StreamLogger(output=stream) if request.param == "stream": return stream_logger elif request.param == "proxy": proxy_logger = ProxyLogger() proxy_logger.set_target_logger(stream_logger) return proxy_logger
def main(): logger = StreamLogger(sys.stdout) pypi = Pypi(logger=logger) pip_requirements: List[str] = ["setuptools", "wheel", "pip"] git_requirements: List[str] = [] index = Index(logger=logger) package_source = PackageSource(index=index, pypi=pypi, logger=logger) for requirement in pip_requirements: package_source.update_package_from_pip(requirement) for requirement in git_requirements: package_source.update_package_from_master(requirement)
def main(): logger = StreamLogger(sys.stdout) pypi = Pypi(logger=logger) pip_requirements = ["setuptools", "wheel"] git_requirements = [("pip", "https://github.com/pypa/pip.git")] index = Index(logger=logger) for name in pip_requirements: insert_pip_requirement(index, name, logger, pypi) for name, url in git_requirements: insert_git_requirement(index, name, url) assert index.is_valid()
def _url_to_network_file(self, url_string: str) -> NetworkFile: url = urlparse(url_string) if url.scheme == "": return DiskTextFile(url.path) elif url.scheme == "file": return DiskTextFile(url.path) elif url.scheme == "http" or url.scheme == "https": return UrlTextFile(url.geturl(), StreamLogger.stdout_logger()) elif url.scheme.startswith("git+"): return self._handle_git_override_url(url, url_string) else: raise UnsupportedUrlError("Cannot handle common overrides url %s" % url_string)
def _handle_git_override_url(self, url: urllib.parse.ParseResult, url_string: str) -> GitTextFile: if not url.fragment: raise UnsupportedUrlError(( "Cannot handle overrides with no path given, offending url was" " {url}.").format(url=url_string)) fragments: Dict[str, str] = dict() for fragment_item in url.fragment.split("&"): try: fragment_name, fragment_value = fragment_item.split() except ValueError: raise UnsupportedUrlError( f"Encountered deformed URL fragment `{fragment_item}` " f"in url `{url_string}`") else: fragments[fragment_name] = fragment_value return GitTextFile( repository_url=urldefrag(url.geturl()[4:])[0], path=fragments["path"], revision_name=fragments.get("rev", "master"), logger=StreamLogger.stdout_logger(), )
def setUp(self) -> None: self.logger = StreamLogger(output=sys.stdout) self.nix = Nix(nix_path=[NIX_PATH], logger=self.logger) self.assertNotEqual(self.name_of_testcase, "undefined")
def logger(): with StringIO() as f: yield StreamLogger(output=f)
def initialize_logger() -> Logger: return StreamLogger(output=sys.stdout)
def logger(self) -> Logger: logger: Logger = StreamLogger(output=sys.stdout) logger.set_verbosity(self.configuration.verbosity) return logger
def logger() -> Generator[Logger, None, None]: with StringIO() as f: yield StreamLogger(output=f)
def setUp(self) -> None: self.logger = StreamLogger(output=sys.stdout) self.nix = Nix(logger=self.logger) self.assertNotEqual(self.name_of_testcase, "undefined") self.requirement_parser = RequirementParser(self.logger)
from io import StringIO from hypothesis import given from hypothesis.strategies import booleans from hypothesis.strategies import composite from hypothesis.strategies import integers from hypothesis.strategies import lists from hypothesis.strategies import text from pypi2nix.dependency_graph import CyclicDependencyOccured from pypi2nix.dependency_graph import DependencyGraph from pypi2nix.external_dependencies import ExternalDependency from pypi2nix.logger import StreamLogger from pypi2nix.requirements import VersionRequirement logger = StreamLogger(output=StringIO()) @composite def requirement(draw, name=text(min_size=1)): return VersionRequirement( name=draw(name), logger=logger, versions=[], extras=set(), environment_markers=None, ) @composite def external_dependency(draw, attribute_name=text(min_size=1)):