Changeset View
Changeset View
Standalone View
Standalone View
swh/loader/package/pypi/loader.py
# Copyright (C) 2019-2020 The Software Heritage developers | # Copyright (C) 2019-2021 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
import json | import json | ||||
import logging | import logging | ||||
import os | import os | ||||
from typing import Any, Dict, Iterator, Optional, Sequence, Tuple | from typing import Any, Dict, Iterator, Optional, Sequence, Tuple | ||||
from urllib.parse import urlparse | from urllib.parse import urlparse | ||||
import attr | import attr | ||||
from pkginfo import UnpackedSDist | from pkginfo import UnpackedSDist | ||||
from swh.loader.exception import NotFound | |||||
from swh.loader.package.loader import ( | from swh.loader.package.loader import ( | ||||
BasePackageInfo, | BasePackageInfo, | ||||
PackageLoader, | PackageLoader, | ||||
RawExtrinsicMetadataCore, | RawExtrinsicMetadataCore, | ||||
) | ) | ||||
from swh.loader.package.utils import EMPTY_AUTHOR, api_info, cached_method, release_name | from swh.loader.package.utils import EMPTY_AUTHOR, api_info, cached_method, release_name | ||||
from swh.model.model import ( | from swh.model.model import ( | ||||
MetadataAuthority, | MetadataAuthority, | ||||
▲ Show 20 Lines • Show All 41 Lines • ▼ Show 20 Lines | class PyPILoader(PackageLoader[PyPIPackageInfo]): | ||||
visit_type = "pypi" | visit_type = "pypi" | ||||
def __init__(self, url): | def __init__(self, url): | ||||
super().__init__(url=url) | super().__init__(url=url) | ||||
self.provider_url = pypi_api_url(self.url) | self.provider_url = pypi_api_url(self.url) | ||||
@cached_method | @cached_method | ||||
def _raw_info(self) -> bytes: | def _raw_info(self) -> bytes: | ||||
try: | |||||
return api_info(self.provider_url) | return api_info(self.provider_url) | ||||
except ValueError as e: | |||||
raise NotFound(e) | |||||
@cached_method | @cached_method | ||||
def info(self) -> Dict: | def info(self) -> Dict: | ||||
"""Return the project metadata information (fetched from pypi registry) | """Return the project metadata information (fetched from pypi registry) | ||||
""" | """ | ||||
return json.loads(self._raw_info()) | return json.loads(self._raw_info()) | ||||
▲ Show 20 Lines • Show All 204 Lines • Show Last 20 Lines |