Esempio n. 1
0
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
        )
Esempio n. 2
0
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
Esempio n. 3
0
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()
Esempio n. 6
0
 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)
Esempio n. 7
0
 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(),
     )
Esempio n. 8
0
 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")
Esempio n. 9
0
def logger():
    with StringIO() as f:
        yield StreamLogger(output=f)
Esempio n. 10
0
def initialize_logger() -> Logger:
    return StreamLogger(output=sys.stdout)
Esempio n. 11
0
 def logger(self) -> Logger:
     logger: Logger = StreamLogger(output=sys.stdout)
     logger.set_verbosity(self.configuration.verbosity)
     return logger
Esempio n. 12
0
def logger() -> Generator[Logger, None, None]:
    with StringIO() as f:
        yield StreamLogger(output=f)
Esempio n. 13
0
 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)
Esempio n. 14
0
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)):