Changeset View
Changeset View
Standalone View
Standalone View
swh/loader/package/cran/loader.py
Show All 10 Lines | |||||
import re | import re | ||||
import string | import string | ||||
from typing import Any, Dict, Iterator, List, Optional, Tuple | from typing import Any, Dict, Iterator, List, Optional, Tuple | ||||
import attr | import attr | ||||
import dateutil.parser | import dateutil.parser | ||||
from debian.deb822 import Deb822 | from debian.deb822 import Deb822 | ||||
from swh.loader.package.loader import BasePackageInfo, PackageLoader, PartialExtID | from swh.loader.package.loader import BasePackageInfo, PackageLoader | ||||
from swh.loader.package.utils import release_name | from swh.loader.package.utils import release_name | ||||
from swh.model.model import ( | from swh.model.model import ( | ||||
Person, | Person, | ||||
Revision, | Revision, | ||||
RevisionType, | RevisionType, | ||||
Sha1Git, | Sha1Git, | ||||
TimestampWithTimezone, | TimestampWithTimezone, | ||||
) | ) | ||||
▲ Show 20 Lines • Show All 55 Lines • ▼ Show 20 Lines | def get_default_version(self) -> str: | ||||
return self.artifacts[-1]["version"] | return self.artifacts[-1]["version"] | ||||
def get_package_info(self, version: str) -> Iterator[Tuple[str, CRANPackageInfo]]: | def get_package_info(self, version: str) -> Iterator[Tuple[str, CRANPackageInfo]]: | ||||
for a_metadata in self.artifacts: | for a_metadata in self.artifacts: | ||||
p_info = CRANPackageInfo.from_metadata(a_metadata) | p_info = CRANPackageInfo.from_metadata(a_metadata) | ||||
if version == p_info.version: | if version == p_info.version: | ||||
yield release_name(version), p_info | yield release_name(version), p_info | ||||
@staticmethod | |||||
def known_artifact_to_extid(known_artifact: Dict) -> Optional[PartialExtID]: | |||||
return CRANPackageInfo.from_metadata(known_artifact["extrinsic"]["raw"]).extid() | |||||
def build_revision( | def build_revision( | ||||
self, p_info: CRANPackageInfo, uncompressed_path: str, directory: Sha1Git | self, p_info: CRANPackageInfo, uncompressed_path: str, directory: Sha1Git | ||||
) -> Optional[Revision]: | ) -> Optional[Revision]: | ||||
# a_metadata is empty | # a_metadata is empty | ||||
metadata = extract_intrinsic_metadata(uncompressed_path) | metadata = extract_intrinsic_metadata(uncompressed_path) | ||||
date = parse_date(metadata.get("Date")) | date = parse_date(metadata.get("Date")) | ||||
author = Person.from_fullname(metadata.get("Maintainer", "").encode()) | author = Person.from_fullname(metadata.get("Maintainer", "").encode()) | ||||
version = metadata.get("Version", p_info.version) | version = metadata.get("Version", p_info.version) | ||||
return Revision( | return Revision( | ||||
message=version.encode("utf-8"), | message=version.encode("utf-8"), | ||||
type=RevisionType.TAR, | type=RevisionType.TAR, | ||||
date=date, | date=date, | ||||
author=author, | author=author, | ||||
committer=author, | committer=author, | ||||
committer_date=date, | committer_date=date, | ||||
parents=(), | parents=(), | ||||
directory=directory, | directory=directory, | ||||
synthetic=True, | synthetic=True, | ||||
metadata={ | |||||
"intrinsic": {"tool": "DESCRIPTION", "raw": metadata,}, | |||||
"extrinsic": { | |||||
"provider": self.url, | |||||
"when": self.visit_date.isoformat(), | |||||
"raw": p_info.raw_info, | |||||
}, | |||||
}, | |||||
) | ) | ||||
def parse_debian_control(filepath: str) -> Dict[str, Any]: | def parse_debian_control(filepath: str) -> Dict[str, Any]: | ||||
"""Parse debian control at filepath""" | """Parse debian control at filepath""" | ||||
metadata: Dict = {} | metadata: Dict = {} | ||||
logger.debug("Debian control file %s", filepath) | logger.debug("Debian control file %s", filepath) | ||||
for paragraph in Deb822.iter_paragraphs(open(filepath, "rb")): | for paragraph in Deb822.iter_paragraphs(open(filepath, "rb")): | ||||
▲ Show 20 Lines • Show All 69 Lines • Show Last 20 Lines |