Example #1
0
def _create_entry(entry: dict, source: Source = None) -> dict:
    """Filter and normalize the output of pipdeptree entry."""
    entry["package_name"] = entry["package"].pop("package_name")
    entry["package_version"] = entry["package"].pop("installed_version")
    entry["requested_package_version"] = entry["package"].pop(
        "requested_package_version", entry["package_version"])

    if source:
        entry["index_url"] = source.url
        entry["sha256"] = []
        try:
            package_hashes = source.get_package_hashes(
                entry["package_name"], entry["package_version"])
        except NotFound:
            package_hashes = source.get_package_hashes(
                entry["package_name"], entry["requested_package_version"])
        for item in package_hashes:
            entry["sha256"].append(item["sha256"])

    entry.pop("package")
    for dependency in entry["dependencies"]:
        dependency.pop("key", None)
        dependency.pop("installed_version", None)

    return entry
Example #2
0
class PythonDigestsFetcher(FetcherBase):
    """Fetch digests of python package artifacts and all the files present in artifacts."""

    def __init__(self, index_url: str):
        """Initialize Python package analyzer."""
        self.source = Source(index_url)

    def fetch(self, package_name: str, package_version: str) -> dict:
        """Fetch digests of files present in artifacts for the given package."""
        _LOGGER.info(
            "Fetching digests for package %r in version %r from %r", package_name, package_version, self.source.url
        )

        error = False
        error_message = ""
        artifacts = []

        try:
            artifacts = self.source.get_package_hashes(package_name, package_version, True)
        except NotFound as exc:
            error = True
            error_message = str(exc)
            _LOGGER.warning(error_message)

        return {
            "package_name": package_name,
            "package_version": package_version,
            "index_url": self.source.url,
            "error": error,
            "error_message": error_message,
            "artifacts": artifacts,
        }
Example #3
0
class PythonDigestsFetcher(FetcherBase):
    """Fetch digests of python package artifacts and all the files present in artifacts."""
    def __init__(self, index_url: str):
        """Initialize Python package analyzer."""
        self.source = Source(index_url)

    def fetch(self, package_name: str, package_version: str) -> dict:
        """Fetch digests of files present in artifacts for the given package."""
        _LOGGER.info("Fetching digests for package %r in version %r from %r",
                     package_name, package_version, self.source.url)

        artifacts = self.source.get_package_hashes(package_name,
                                                   package_version, True)

        return {
            "package_name": package_name,
            "package_version": package_version,
            "index_url": self.source.url,
            "artifacts": artifacts,
        }