Changeset View
Changeset View
Standalone View
Standalone View
swh/model/model.py
Show First 20 Lines • Show All 1,839 Lines • ▼ Show 20 Lines | |||||
class ExtID(HashableObject, BaseModel): | class ExtID(HashableObject, BaseModel): | ||||
object_type: Final = "extid" | object_type: Final = "extid" | ||||
extid_type = attr.ib(type=str, validator=generic_type_validator) | extid_type = attr.ib(type=str, validator=generic_type_validator) | ||||
extid = attr.ib(type=bytes, validator=generic_type_validator) | extid = attr.ib(type=bytes, validator=generic_type_validator) | ||||
target = attr.ib(type=CoreSWHID, validator=generic_type_validator) | target = attr.ib(type=CoreSWHID, validator=generic_type_validator) | ||||
extid_version = attr.ib(type=int, validator=generic_type_validator, default=0) | extid_version = attr.ib(type=int, validator=generic_type_validator, default=0) | ||||
id = attr.ib( | payload_type = attr.ib(type=Optional[str], validator=generic_type_validator, default=None) | ||||
type=Sha1Git, validator=generic_type_validator, default=b"", repr=hash_repr | payload = attr.ib( | ||||
) | type=Optional[Sha1], validator=generic_type_validator, default=None, repr=hash_repr | ||||
) | |||||
id = attr.ib(type=Sha1Git, validator=generic_type_validator, default=b"", repr=hash_repr) | |||||
@payload_type.validator | |||||
def check_payload_type(self, attribute, value): | |||||
if value is not None and self.payload is None: | |||||
raise ValueError("'payload' must be set if 'payload_type' is.") | |||||
@payload.validator | |||||
def check_payload(self, attribute, value): | |||||
if value is not None and self.payload_type is None: | |||||
raise ValueError("'payload_type' must be set if 'payload' is.") | |||||
@classmethod | @classmethod | ||||
def from_dict(cls, d): | def from_dict(cls, d): | ||||
return cls( | return cls( | ||||
extid=d["extid"], | extid=d["extid"], | ||||
extid_type=d["extid_type"], | extid_type=d["extid_type"], | ||||
target=CoreSWHID.from_string(d["target"]), | target=CoreSWHID.from_string(d["target"]), | ||||
extid_version=d.get("extid_version", 0), | extid_version=d.get("extid_version", 0), | ||||
payload_type=d.get("payload_type"), | |||||
payload=d.get("payload"), | |||||
) | ) | ||||
def _compute_hash_from_attributes(self) -> bytes: | def _compute_hash_from_attributes(self) -> bytes: | ||||
return _compute_hash_from_manifest(git_objects.extid_git_object(self)) | return _compute_hash_from_manifest(git_objects.extid_git_object(self)) | ||||
# Note: we need the type ignore stanza here because mypy cannot figure that all | # Note: we need the type ignore stanza here because mypy cannot figure that all | ||||
# subclasses of BaseModel do have an object_type attribute, even if BaseModel | # subclasses of BaseModel do have an object_type attribute, even if BaseModel | ||||
Show All 24 Lines |