Changeset View
Changeset View
Standalone View
Standalone View
swh/loader/package/cpan/loader.py
# Copyright (C) 2022 The Software Heritage developers | # Copyright (C) 2022 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 | ||||
from datetime import datetime | from datetime import datetime | ||||
import logging | import logging | ||||
import string | |||||
from typing import Any, Dict, Iterator, List, Optional, Sequence, Tuple | from typing import Any, Dict, Iterator, List, Optional, Sequence, Tuple | ||||
import attr | import attr | ||||
import iso8601 | import iso8601 | ||||
from packaging.version import parse as parse_version | from packaging.version import parse as parse_version | ||||
from requests import HTTPError | from requests import HTTPError | ||||
from swh.loader.package.loader import ( | from swh.loader.package.loader import ( | ||||
Show All 13 Lines | |||||
from swh.storage.interface import StorageInterface | from swh.storage.interface import StorageInterface | ||||
logger = logging.getLogger(__name__) | logger = logging.getLogger(__name__) | ||||
@attr.s | @attr.s | ||||
class CpanPackageInfo(BasePackageInfo): | class CpanPackageInfo(BasePackageInfo): | ||||
EXTID_TYPE = "cpan-manifest-sha256" | |||||
EXTID_VERSION = 0 | |||||
MANIFEST_FORMAT = string.Template( | |||||
"name $name\nversion $version\ndate $last_modified\nshasum $sha256sum" | |||||
) | |||||
name = attr.ib(type=str) | name = attr.ib(type=str) | ||||
"""Name of the package""" | """Name of the package""" | ||||
version = attr.ib(type=str) | version = attr.ib(type=str) | ||||
"""Current version""" | """Current version""" | ||||
last_modified = attr.ib(type=datetime) | last_modified = attr.ib(type=datetime) | ||||
"""File last modified date as release date.""" | """File last modified date as release date.""" | ||||
author = attr.ib(type=Person) | author = attr.ib(type=Person) | ||||
"""Author""" | """Author""" | ||||
sha256sum = attr.ib(type=str) | |||||
"""sha256 checksum of package tarball""" | |||||
class CpanLoader(PackageLoader[CpanPackageInfo]): | class CpanLoader(PackageLoader[CpanPackageInfo]): | ||||
visit_type = "cpan" | visit_type = "cpan" | ||||
EXTRINSIC_METADATA_URL_PATTERN = "{api_base_url}/release/{author}/{release_name}" | EXTRINSIC_METADATA_URL_PATTERN = "{api_base_url}/release/{author}/{release_name}" | ||||
def __init__( | def __init__( | ||||
self, | self, | ||||
▲ Show 20 Lines • Show All 95 Lines • ▼ Show 20 Lines | def get_package_info(self, version: str) -> Iterator[Tuple[str, CpanPackageInfo]]: | ||||
name=metadata["name"], | name=metadata["name"], | ||||
filename=artifact["filename"], | filename=artifact["filename"], | ||||
url=artifact["url"], | url=artifact["url"], | ||||
version=version, | version=version, | ||||
last_modified=last_modified, | last_modified=last_modified, | ||||
author=author, | author=author, | ||||
checksums=artifact["checksums"], | checksums=artifact["checksums"], | ||||
directory_extrinsic_metadata=directory_extrinsic_metadata, | directory_extrinsic_metadata=directory_extrinsic_metadata, | ||||
sha256sum=artifact["checksums"]["sha256"], | |||||
) | ) | ||||
yield release_name(version), p_info | yield release_name(version), p_info | ||||
def build_release( | def build_release( | ||||
self, p_info: CpanPackageInfo, uncompressed_path: str, directory: Sha1Git | self, p_info: CpanPackageInfo, uncompressed_path: str, directory: Sha1Git | ||||
) -> Optional[Release]: | ) -> Optional[Release]: | ||||
message = ( | message = ( | ||||
Show All 13 Lines |