Changeset View
Changeset View
Standalone View
Standalone View
swh/model/model.py
Show All 16 Lines | |||||
from .collections import ImmutableDict | from .collections import ImmutableDict | ||||
from .hashutil import DEFAULT_ALGORITHMS, MultiHash, hash_to_bytes | from .hashutil import DEFAULT_ALGORITHMS, MultiHash, hash_to_bytes | ||||
from .identifiers import ( | from .identifiers import ( | ||||
SWHID, | SWHID, | ||||
directory_identifier, | directory_identifier, | ||||
normalize_timestamp, | normalize_timestamp, | ||||
parse_swhid, | parse_swhid, | ||||
raw_extrinsic_metadata_identifier, | |||||
release_identifier, | release_identifier, | ||||
revision_identifier, | revision_identifier, | ||||
snapshot_identifier, | snapshot_identifier, | ||||
) | ) | ||||
class MissingData(Exception): | class MissingData(Exception): | ||||
"""Raised by `Content.with_data` when it has no way of fetching the | """Raised by `Content.with_data` when it has no way of fetching the | ||||
▲ Show 20 Lines • Show All 824 Lines • ▼ Show 20 Lines | class MetadataTargetType(Enum): | ||||
DIRECTORY = "directory" | DIRECTORY = "directory" | ||||
REVISION = "revision" | REVISION = "revision" | ||||
RELEASE = "release" | RELEASE = "release" | ||||
SNAPSHOT = "snapshot" | SNAPSHOT = "snapshot" | ||||
ORIGIN = "origin" | ORIGIN = "origin" | ||||
@attr.s(frozen=True, slots=True) | @attr.s(frozen=True, slots=True) | ||||
class RawExtrinsicMetadata(BaseModel): | class RawExtrinsicMetadata(HashableObject, BaseModel): | ||||
object_type: Final = "raw_extrinsic_metadata" | object_type: Final = "raw_extrinsic_metadata" | ||||
# target object | # target object | ||||
type = attr.ib(type=MetadataTargetType, validator=type_validator()) | type = attr.ib(type=MetadataTargetType, validator=type_validator()) | ||||
target = attr.ib(type=Union[str, SWHID], validator=type_validator()) | target = attr.ib(type=Union[str, SWHID], validator=type_validator()) | ||||
"""URL if type=MetadataTargetType.ORIGIN, else core SWHID""" | """URL if type=MetadataTargetType.ORIGIN, else core SWHID""" | ||||
# source | # source | ||||
Show All 9 Lines | class RawExtrinsicMetadata(HashableObject, BaseModel): | ||||
origin = attr.ib(type=Optional[str], default=None, validator=type_validator()) | origin = attr.ib(type=Optional[str], default=None, validator=type_validator()) | ||||
visit = attr.ib(type=Optional[int], default=None, validator=type_validator()) | visit = attr.ib(type=Optional[int], default=None, validator=type_validator()) | ||||
snapshot = attr.ib(type=Optional[SWHID], default=None, validator=type_validator()) | snapshot = attr.ib(type=Optional[SWHID], default=None, validator=type_validator()) | ||||
release = attr.ib(type=Optional[SWHID], default=None, validator=type_validator()) | release = attr.ib(type=Optional[SWHID], default=None, validator=type_validator()) | ||||
revision = attr.ib(type=Optional[SWHID], default=None, validator=type_validator()) | revision = attr.ib(type=Optional[SWHID], default=None, validator=type_validator()) | ||||
path = attr.ib(type=Optional[bytes], default=None, validator=type_validator()) | path = attr.ib(type=Optional[bytes], default=None, validator=type_validator()) | ||||
directory = attr.ib(type=Optional[SWHID], default=None, validator=type_validator()) | directory = attr.ib(type=Optional[SWHID], default=None, validator=type_validator()) | ||||
id = attr.ib(type=Sha1Git, validator=type_validator(), default=b"") | |||||
def compute_hash(self) -> bytes: | |||||
return hash_to_bytes(raw_extrinsic_metadata_identifier(self.to_dict())) | |||||
@target.validator | @target.validator | ||||
def check_target(self, attribute, value): | def check_target(self, attribute, value): | ||||
if self.type == MetadataTargetType.ORIGIN: | if self.type == MetadataTargetType.ORIGIN: | ||||
if isinstance(value, SWHID) or value.startswith("swh:"): | if isinstance(value, SWHID) or value.startswith("swh:"): | ||||
raise ValueError( | raise ValueError( | ||||
"Got SWHID as target for origin metadata (expected an URL)." | "Got SWHID as target for origin metadata (expected an URL)." | ||||
) | ) | ||||
else: | else: | ||||
▲ Show 20 Lines • Show All 180 Lines • Show Last 20 Lines |