from typing import List from models import ProjectTargetItem, Artist from workers.artist_moment_worker import ArtistMomentWorker, ArtistBindingModel class ArtistsMomentsFetcher: old_artists_ids: List[ArtistBindingModel] def __init__(self, target_items: List[ProjectTargetItem] = None): self.old_artists_ids = [] if target_items: self.old_artists_ids = self.__artists_models_from_targets(target_items) def fetch_moments_for_target_items_if_needed(self, target_items: List[ProjectTargetItem]): new_artists_ids = self.__artists_models_from_targets(target_items) added_artists = list(set(new_artists_ids) - set(self.old_artists_ids)) if added_artists: try: ArtistMomentWorker().perform_async(added_artists) except SystemExit: pass def fetch_moments_for_artist(self, artist: Artist): try: ArtistMomentWorker().perform_async( [ArtistBindingModel(decibel_id=artist.id, external_id=artist.external_id)] ) except SystemExit: pass def __artists_models_from_targets(self, target_items: List[ProjectTargetItem]) -> List[ArtistBindingModel]: return list(map(self.__artist_model_from_artist, filter(lambda x: x.is_primary_artist(), target_items))) def __artist_model_from_artist(self, item: ProjectTargetItem) -> ArtistBindingModel: return ArtistBindingModel(decibel_id=item.entity.id, external_id=item.entity.external_id)