python-threatexchange/threatexchange/fb_threatexchange/api_representations.py (29 lines of code) (raw):

# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved """ Typed representations (dataclasses only) for interfacing with the threatexchange API. """ from datetime import datetime from dateutil.parser import parse from dataclasses import dataclass def _parse_datetime_from_iso_8601(datestr: str) -> datetime: """ Parses strings representing date like 2019-05-20T16:44:47+0000 from the graph api into datetime objects. """ return parse(datestr) @dataclass class ThreatPrivacyGroup: id: int name: str description: str members_can_see: bool members_can_use: bool threat_updates_enabled: bool last_updated: datetime def __eq__(self, other) -> bool: return self.id == other.id def __hash__(self) -> int: return hash(self.id) @classmethod def from_graph_api_dict(cls, d: dict) -> "ThreatPrivacyGroup": return cls( d["id"], d["name"], d["description"], bool(d["members_can_see"]), bool(d["members_can_use"]), bool(d["threat_updates_enabled"]), _parse_datetime_from_iso_8601(d["last_updated"]), )