Changeset View
Changeset View
Standalone View
Standalone View
swh/model/identifiers.py
Show First 20 Lines • Show All 919 Lines • ▼ Show 20 Lines | class _BaseSWHID(Generic[_TObjectType]): | ||||
def from_string(cls: Type[_TSWHID], s: str) -> _TSWHID: | def from_string(cls: Type[_TSWHID], s: str) -> _TSWHID: | ||||
parts = _parse_swhid(s) | parts = _parse_swhid(s) | ||||
if parts.pop("qualifiers"): | if parts.pop("qualifiers"): | ||||
raise ValidationError(f"{cls.__name__} does not support qualifiers.") | raise ValidationError(f"{cls.__name__} does not support qualifiers.") | ||||
try: | try: | ||||
return cls(**parts) | return cls(**parts) | ||||
except ValueError as e: | except ValueError as e: | ||||
raise ValidationError( | raise ValidationError( | ||||
"ValueError: %(args)", params={"args": e.args} | "ValueError: %(args)s", params={"args": e.args} | ||||
) from None | ) from None | ||||
@attr.s(frozen=True, kw_only=True) | @attr.s(frozen=True, kw_only=True) | ||||
class CoreSWHID(_BaseSWHID[ObjectType]): | class CoreSWHID(_BaseSWHID[ObjectType]): | ||||
""" | """ | ||||
Dataclass holding the relevant info associated to a SoftWare Heritage | Dataclass holding the relevant info associated to a SoftWare Heritage | ||||
persistent IDentifier (SWHID). | persistent IDentifier (SWHID). | ||||
▲ Show 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | try: | ||||
return lines | return lines | ||||
elif "-" in lines: | elif "-" in lines: | ||||
(from_, to) = lines.split("-", 2) | (from_, to) = lines.split("-", 2) | ||||
return (int(from_), int(to)) | return (int(from_), int(to)) | ||||
else: | else: | ||||
return (int(lines), None) | return (int(lines), None) | ||||
except ValueError: | except ValueError: | ||||
raise ValidationError( | raise ValidationError( | ||||
"Invalid format for the lines qualifier: %(lines)", params={"lines": lines} | "Invalid format for the lines qualifier: %(lines)s", params={"lines": lines} | ||||
) | ) | ||||
def _parse_path_qualifier(path: Union[str, bytes, None]) -> Optional[bytes]: | def _parse_path_qualifier(path: Union[str, bytes, None]) -> Optional[bytes]: | ||||
if path is None or isinstance(path, bytes): | if path is None or isinstance(path, bytes): | ||||
return path | return path | ||||
else: | else: | ||||
return urllib.parse.unquote_to_bytes(path) | return urllib.parse.unquote_to_bytes(path) | ||||
▲ Show 20 Lines • Show All 139 Lines • ▼ Show 20 Lines | class QualifiedSWHID(_BaseSWHID[ObjectType]): | ||||
@classmethod | @classmethod | ||||
def from_string(cls, s: str) -> QualifiedSWHID: | def from_string(cls, s: str) -> QualifiedSWHID: | ||||
parts = _parse_swhid(s) | parts = _parse_swhid(s) | ||||
qualifiers = parts.pop("qualifiers") | qualifiers = parts.pop("qualifiers") | ||||
invalid_qualifiers = set(qualifiers) - SWHID_QUALIFIERS | invalid_qualifiers = set(qualifiers) - SWHID_QUALIFIERS | ||||
if invalid_qualifiers: | if invalid_qualifiers: | ||||
raise ValidationError( | raise ValidationError( | ||||
"Invalid qualifier(s): %(qualifiers)", | "Invalid qualifier(s): %(qualifiers)s", | ||||
params={"qualifiers": ", ".join(invalid_qualifiers)}, | params={"qualifiers": ", ".join(invalid_qualifiers)}, | ||||
) | ) | ||||
try: | try: | ||||
return QualifiedSWHID(**parts, **qualifiers) | return QualifiedSWHID(**parts, **qualifiers) | ||||
except ValueError as e: | except ValueError as e: | ||||
raise ValidationError( | raise ValidationError( | ||||
"ValueError: %(args)s", params={"args": e.args} | "ValueError: %(args)s", params={"args": e.args} | ||||
) from None | ) from None | ||||
▲ Show 20 Lines • Show All 78 Lines • Show Last 20 Lines |