Changeset View
Changeset View
Standalone View
Standalone View
swh/loader/package/npm/loader.py
# Copyright (C) 2019-2020 The Software Heritage developers | # Copyright (C) 2019-2020 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 codecs import BOM_UTF8 | from codecs import BOM_UTF8 | ||||
from typing import Any, Dict, Generator, List, Mapping, Optional, Sequence, Tuple, Union | from typing import Any, Dict, Iterator, List, Optional, Sequence, Tuple, Union | ||||
import attr | import attr | ||||
import chardet | import chardet | ||||
from urllib.parse import quote | from urllib.parse import quote | ||||
from swh.model.model import ( | from swh.model.model import ( | ||||
Person, | Person, | ||||
RevisionType, | RevisionType, | ||||
Revision, | Revision, | ||||
TimestampWithTimezone, | TimestampWithTimezone, | ||||
Sha1Git, | Sha1Git, | ||||
) | ) | ||||
from swh.loader.package.loader import PackageLoader | from swh.loader.package.loader import BasePackageInfo, PackageLoader | ||||
from swh.loader.package.utils import api_info, release_name | from swh.loader.package.utils import api_info, release_name | ||||
logger = logging.getLogger(__name__) | logger = logging.getLogger(__name__) | ||||
EMPTY_PERSON = Person(fullname=b"", name=None, email=None) | EMPTY_PERSON = Person(fullname=b"", name=None, email=None) | ||||
class NpmLoader(PackageLoader): | class NpmPackageInfo(BasePackageInfo): | ||||
raw = attr.ib(type=Dict[str, Any]) | |||||
class NpmLoader(PackageLoader[NpmPackageInfo]): | |||||
"""Load npm origin's artifact releases into swh archive. | """Load npm origin's artifact releases into swh archive. | ||||
""" | """ | ||||
visit_type = "npm" | visit_type = "npm" | ||||
def __init__(self, url: str): | def __init__(self, url: str): | ||||
"""Constructor | """Constructor | ||||
Show All 18 Lines | def info(self) -> Dict[str, Any]: | ||||
return self._info | return self._info | ||||
def get_versions(self) -> Sequence[str]: | def get_versions(self) -> Sequence[str]: | ||||
return sorted(list(self.info["versions"].keys())) | return sorted(list(self.info["versions"].keys())) | ||||
def get_default_version(self) -> str: | def get_default_version(self) -> str: | ||||
return self.info["dist-tags"].get("latest", "") | return self.info["dist-tags"].get("latest", "") | ||||
def get_package_info( | def get_package_info(self, version: str) -> Iterator[Tuple[str, NpmPackageInfo]]: | ||||
ardumont: Iterator... | |||||
self, version: str | |||||
) -> Generator[Tuple[str, Mapping[str, Any]], None, None]: | |||||
meta = self.info["versions"][version] | meta = self.info["versions"][version] | ||||
url = meta["dist"]["tarball"] | url = meta["dist"]["tarball"] | ||||
p_info = { | p_info = NpmPackageInfo(url=url, filename=os.path.basename(url), raw=meta,) | ||||
"url": url, | |||||
"filename": os.path.basename(url), | |||||
"raw": meta, | |||||
} | |||||
yield release_name(version), p_info | yield release_name(version), p_info | ||||
def resolve_revision_from( | def resolve_revision_from( | ||||
self, known_artifacts: Dict, artifact_metadata: Dict | self, known_artifacts: Dict, artifact_metadata: Dict | ||||
) -> Optional[bytes]: | ) -> Optional[bytes]: | ||||
return artifact_to_revision_id(known_artifacts, artifact_metadata) | return artifact_to_revision_id(known_artifacts, artifact_metadata) | ||||
def build_revision( | def build_revision( | ||||
▲ Show 20 Lines • Show All 215 Lines • Show Last 20 Lines |
Iterator...