from sqlalchemy import or_ from db import db from workers.base_worker import BaseWorker from models.artists import Artist from utils.snowflake.gras_data.artists_importer import ArtistsImporter class UnknownArtistsWorker(BaseWorker): def execute(self): unknown_artists = db.session.query(Artist.external_id).filter(Artist.name.ilike("unknown")).all() self.logger.info("Unknown Artists fixer", f"Fixing {len(unknown_artists)} artists") external_ids = [self.__extract_particip_no(artist.external_id) for artist in unknown_artists] artists_from_gras = ArtistsImporter().fetch(external_ids) for artist in artists_from_gras: ( db.session.query(Artist) .filter(Artist.external_id == f"GRAS_{artist.external_id}") .update({Artist.name: artist.name}, synchronize_session=False) ) ( db.session.query(Artist) .filter(or_(Artist.name == "Unknown", Artist.name.ilike("%Various%"))) .update({Artist.is_unknown: True}, synchronize_session=False) ) db.session.commit() db.session.close() self.logger.success("Unknown Artists fixer", f"Fixed {len(artists_from_gras)} artists") def __extract_particip_no(self, name: str) -> str: return name.split("_")[1]