Changeset View
Changeset View
Standalone View
Standalone View
swh/loader/package/npm/loader.py
Show First 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | def __init__( | ||||
max_content_size: Optional[int] = None, | max_content_size: Optional[int] = None, | ||||
): | ): | ||||
"""Constructor | """Constructor | ||||
Args | Args | ||||
str: origin url (e.g. https://www.npmjs.com/package/<package-name>) | str: origin url (e.g. https://www.npmjs.com/package/<package-name>) | ||||
""" | """ | ||||
super().__init__(storage=storage, url=url, max_content_size=max_content_size) | super().__init__(storage=storage, url=url, max_content_size=max_content_size) | ||||
package_name = url.split("https://www.npmjs.com/package/")[1] | self.package_name = url.split("https://www.npmjs.com/package/")[1] | ||||
safe_name = quote(package_name, safe="") | safe_name = quote(self.package_name, safe="") | ||||
self.provider_url = f"https://replicate.npmjs.com/{safe_name}/" | self.provider_url = f"https://replicate.npmjs.com/{safe_name}/" | ||||
self._info: Dict[str, Any] = {} | self._info: Dict[str, Any] = {} | ||||
self._versions = None | self._versions = None | ||||
@cached_method | @cached_method | ||||
def _raw_info(self) -> bytes: | def _raw_info(self) -> bytes: | ||||
return api_info(self.provider_url) | return api_info(self.provider_url) | ||||
Show All 23 Lines | class NpmLoader(PackageLoader[NpmPackageInfo]): | ||||
def build_release( | def build_release( | ||||
self, p_info: NpmPackageInfo, uncompressed_path: str, directory: Sha1Git | self, 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") | msg = ( | ||||
f"Synthetic release for NPM source package {self.package_name} " | |||||
f"version {p_info.version}\n" | |||||
) | |||||
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=p_info.version.encode(), | name=p_info.version.encode(), | ||||
message=message, | message=msg.encode(), | ||||
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 117 Lines • Show Last 20 Lines |