Changeset View
Changeset View
Standalone View
Standalone View
swh/loader/package/puppet/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 json | import json | ||||
from pathlib import Path | from pathlib import Path | ||||
from typing import Any, Dict, Iterator, 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 swh.loader.package.loader import BasePackageInfo, PackageLoader | from swh.loader.package.loader import BasePackageInfo, PackageLoader | ||||
from swh.loader.package.utils import Person, release_name | from swh.loader.package.utils import Person, release_name | ||||
from swh.model.model import ObjectType, Release, Sha1Git, TimestampWithTimezone | from swh.model.model import ObjectType, Release, Sha1Git, TimestampWithTimezone | ||||
Show All 36 Lines | |||||
class PuppetLoader(PackageLoader[PuppetPackageInfo]): | class PuppetLoader(PackageLoader[PuppetPackageInfo]): | ||||
visit_type = "puppet" | visit_type = "puppet" | ||||
def __init__( | def __init__( | ||||
self, | self, | ||||
storage: StorageInterface, | storage: StorageInterface, | ||||
url: str, | url: str, | ||||
artifacts: Dict[str, Any], | artifacts: List[Dict[str, Any]], | ||||
**kwargs, | **kwargs, | ||||
): | ): | ||||
super().__init__(storage=storage, url=url, **kwargs) | super().__init__(storage=storage, url=url, **kwargs) | ||||
self.url = url | self.url = url | ||||
self.artifacts = artifacts | self.artifacts: Dict[str, Dict] = { | ||||
artifact["version"]: artifact for artifact in artifacts | |||||
} | |||||
def get_versions(self) -> Sequence[str]: | def get_versions(self) -> Sequence[str]: | ||||
"""Get all released versions of a Puppet module | """Get all released versions of a Puppet module | ||||
Returns: | Returns: | ||||
A sequence of versions | A sequence of versions | ||||
Example:: | Example:: | ||||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | ) -> Optional[Release]: | ||||
# Extract intrinsic metadata from uncompressed_path/{dirname}/metadata.json | # Extract intrinsic metadata from uncompressed_path/{dirname}/metadata.json | ||||
intrinsic_metadata = extract_intrinsic_metadata( | intrinsic_metadata = extract_intrinsic_metadata( | ||||
Path(uncompressed_path) / f"{dirname}" | Path(uncompressed_path) / f"{dirname}" | ||||
) | ) | ||||
version: str = intrinsic_metadata["version"] | version: str = intrinsic_metadata["version"] | ||||
assert version == p_info.version | assert version == p_info.version | ||||
description = intrinsic_metadata["summary"] | |||||
author = Person.from_fullname(intrinsic_metadata["author"].encode()) | author = Person.from_fullname(intrinsic_metadata["author"].encode()) | ||||
message = ( | message = ( | ||||
f"Synthetic release for Puppet source package {p_info.name} " | f"Synthetic release for Puppet source package {p_info.name} " | ||||
f"version {version}\n\n" | f"version {version}\n" | ||||
f"{description}\n" | |||||
) | ) | ||||
return Release( | return Release( | ||||
name=version.encode(), | name=version.encode(), | ||||
author=author, | author=author, | ||||
date=TimestampWithTimezone.from_datetime(p_info.last_modified), | date=TimestampWithTimezone.from_datetime(p_info.last_modified), | ||||
message=message.encode(), | message=message.encode(), | ||||
target_type=ObjectType.DIRECTORY, | target_type=ObjectType.DIRECTORY, | ||||
target=directory, | target=directory, | ||||
synthetic=True, | synthetic=True, | ||||
) | ) |