Changeset View
Changeset View
Standalone View
Standalone View
swh/model/model.py
Show All 15 Lines | |||||
from typing_extensions import Final | from typing_extensions import Final | ||||
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 ( | ||||
directory_identifier, | directory_identifier, | ||||
normalize_timestamp, | normalize_timestamp, | ||||
origin_identifier, | origin_identifier, | ||||
raw_extrinsic_metadata_identifier, | |||||
release_identifier, | release_identifier, | ||||
revision_identifier, | revision_identifier, | ||||
snapshot_identifier, | snapshot_identifier, | ||||
) | ) | ||||
from .identifiers import CoreSWHID | from .identifiers import CoreSWHID | ||||
from .identifiers import ExtendedObjectType as SwhidExtendedObjectType | from .identifiers import ExtendedObjectType as SwhidExtendedObjectType | ||||
from .identifiers import ExtendedSWHID | from .identifiers import ExtendedSWHID | ||||
from .identifiers import ObjectType as SwhidObjectType | from .identifiers import ObjectType as SwhidObjectType | ||||
▲ Show 20 Lines • Show All 844 Lines • ▼ Show 20 Lines | def to_dict(self): | ||||
del d["metadata"] | del d["metadata"] | ||||
return d | return d | ||||
def unique_key(self) -> KeyType: | def unique_key(self) -> KeyType: | ||||
return {"name": self.name, "version": self.version} | return {"name": self.name, "version": self.version} | ||||
@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 | ||||
target = attr.ib(type=ExtendedSWHID, validator=type_validator()) | target = attr.ib(type=ExtendedSWHID, validator=type_validator()) | ||||
# source | # source | ||||
discovery_date = attr.ib(type=datetime.datetime, validator=type_validator()) | discovery_date = attr.ib(type=datetime.datetime, validator=type_validator()) | ||||
authority = attr.ib(type=MetadataAuthority, validator=type_validator()) | authority = attr.ib(type=MetadataAuthority, validator=type_validator()) | ||||
Show All 15 Lines | class RawExtrinsicMetadata(HashableObject, BaseModel): | ||||
revision = attr.ib( | revision = attr.ib( | ||||
type=Optional[CoreSWHID], default=None, validator=type_validator() | type=Optional[CoreSWHID], 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( | directory = attr.ib( | ||||
type=Optional[CoreSWHID], default=None, validator=type_validator() | type=Optional[CoreSWHID], 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())) | |||||
@discovery_date.validator | @discovery_date.validator | ||||
def check_discovery_date(self, attribute, value): | def check_discovery_date(self, attribute, value): | ||||
"""Checks the discovery_date has a timezone.""" | """Checks the discovery_date has a timezone.""" | ||||
if value is not None and value.tzinfo is None: | if value is not None and value.tzinfo is None: | ||||
raise ValueError("discovery_date must be a timezone-aware datetime.") | raise ValueError("discovery_date must be a timezone-aware datetime.") | ||||
@origin.validator | @origin.validator | ||||
def check_origin(self, attribute, value): | def check_origin(self, attribute, value): | ||||
▲ Show 20 Lines • Show All 176 Lines • Show Last 20 Lines |