Changeset View
Changeset View
Standalone View
Standalone View
swh/loader/package/npm/loader.py
Show First 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | |||||
@attr.s | @attr.s | ||||
class NpmPackageInfo(BasePackageInfo): | class NpmPackageInfo(BasePackageInfo): | ||||
raw_info = attr.ib(type=Dict[str, Any]) | raw_info = attr.ib(type=Dict[str, Any]) | ||||
date = attr.ib(type=Optional[str]) | date = attr.ib(type=Optional[str]) | ||||
shasum = attr.ib(type=str) | shasum = attr.ib(type=str) | ||||
"""sha1 checksum""" | """sha1 checksum""" | ||||
version = attr.ib(type=str) | |||||
@classmethod | @classmethod | ||||
def from_metadata( | def from_metadata( | ||||
cls, project_metadata: Dict[str, Any], version: str | cls, project_metadata: Dict[str, Any], version: str | ||||
) -> "NpmPackageInfo": | ) -> "NpmPackageInfo": | ||||
package_metadata = project_metadata["versions"][version] | package_metadata = project_metadata["versions"][version] | ||||
url = package_metadata["dist"]["tarball"] | url = package_metadata["dist"]["tarball"] | ||||
▲ Show 20 Lines • Show All 77 Lines • ▼ Show 20 Lines | class NpmLoader(PackageLoader[NpmPackageInfo]): | ||||
def get_package_info(self, version: str) -> Iterator[Tuple[str, NpmPackageInfo]]: | def get_package_info(self, version: str) -> Iterator[Tuple[str, NpmPackageInfo]]: | ||||
p_info = NpmPackageInfo.from_metadata( | p_info = NpmPackageInfo.from_metadata( | ||||
project_metadata=self.info(), version=version | project_metadata=self.info(), version=version | ||||
) | ) | ||||
yield release_name(version), p_info | yield release_name(version), p_info | ||||
def build_release( | def build_release( | ||||
self, | self, p_info: NpmPackageInfo, uncompressed_path: str, directory: Sha1Git | ||||
version: str, | |||||
p_info: NpmPackageInfo, | |||||
uncompressed_path: str, | |||||
directory: Sha1Git, | |||||
) -> Optional[Release]: | ) -> Optional[Release]: | ||||
i_metadata = extract_intrinsic_metadata(uncompressed_path) | i_metadata = extract_intrinsic_metadata(uncompressed_path) | ||||
if not i_metadata: | if not i_metadata: | ||||
return None | return None | ||||
author = extract_npm_package_author(i_metadata) | author = extract_npm_package_author(i_metadata) | ||||
message = i_metadata["version"].encode("ascii") | message = i_metadata["version"].encode("ascii") | ||||
if p_info.date is None: | if p_info.date is None: | ||||
url = p_info.url | url = p_info.url | ||||
artifact_name = os.path.basename(url) | artifact_name = os.path.basename(url) | ||||
raise ValueError( | raise ValueError( | ||||
"Origin %s: Cannot determine upload time for artifact %s." | "Origin %s: Cannot determine upload time for artifact %s." | ||||
% (p_info.url, artifact_name) | % (p_info.url, artifact_name) | ||||
) | ) | ||||
date = TimestampWithTimezone.from_iso8601(p_info.date) | date = TimestampWithTimezone.from_iso8601(p_info.date) | ||||
# FIXME: this is to remain bug-compatible with earlier versions: | # FIXME: this is to remain bug-compatible with earlier versions: | ||||
date = attr.evolve(date, timestamp=attr.evolve(date.timestamp, microseconds=0)) | date = attr.evolve(date, timestamp=attr.evolve(date.timestamp, microseconds=0)) | ||||
r = Release( | r = Release( | ||||
name=version.encode(), | name=p_info.version.encode(), | ||||
message=message, | message=message, | ||||
author=author, | author=author, | ||||
date=date, | date=date, | ||||
target=directory, | target=directory, | ||||
target_type=ObjectType.DIRECTORY, | target_type=ObjectType.DIRECTORY, | ||||
synthetic=True, | synthetic=True, | ||||
) | ) | ||||
return r | return r | ||||
▲ Show 20 Lines • Show All 118 Lines • Show Last 20 Lines |