Source code for swh.alter.notifications

# Copyright (C) 2024 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information

from typing import Any, Dict, List, Optional, Self

import attr

from swh.model.model import Origin
from swh.model.swhids import ExtendedSWHID


[docs] @attr.s class RemovalNotification: removal_identifier = attr.ib(type=str) reason = attr.ib(type=str) requested = attr.ib(type=List[Origin | ExtendedSWHID]) removed_objects = attr.ib(type=List[ExtendedSWHID])
[docs] def anonymize(self) -> Optional[Self]: return None
[docs] def to_dict(self) -> Dict[str, Any]: return { "removal_identifier": self.removal_identifier, "reason": self.reason, "requested": [ ( str(swhid_or_origin) if isinstance(swhid_or_origin, ExtendedSWHID) else swhid_or_origin.url ) for swhid_or_origin in self.requested ], "removed_objects": [str(swhid) for swhid in self.removed_objects], }
[docs] @classmethod def from_dict(cls: type[Self], d: Dict[str, Any]) -> Self: return cls( **{ **d, "requested": [ ( ExtendedSWHID.from_string(s) if s.startswith("swh:1:") else Origin(url=s) ) for s in d["requested"] ], "removed_objects": [ ExtendedSWHID.from_string(s) for s in d["removed_objects"] ], } )
[docs] def unique_key(self) -> bytes: return self.removal_identifier.encode("utf-8")