def _get_key( self, object_type: str, object_: BaseModel) -> Union[bytes, Dict]: if object_type in ('revision', 'release', 'directory', 'snapshot'): object_ = cast( Union[Revision, Release, Directory, Snapshot], object_) return object_.id elif object_type == 'content': object_ = cast(Content, object_) return object_.sha1 # TODO: use a dict of hashes elif object_type == 'skipped_content': return { hash: getattr(object_, hash) for hash in DEFAULT_ALGORITHMS } elif object_type == 'origin': object_ = cast(Origin, object_) return {'url': object_.url} elif object_type == 'origin_visit': object_ = cast(OriginVisit, object_) return { 'origin': object_.origin, 'date': str(object_.date), } else: raise ValueError('Unknown object type: %s.' % object_type)