from db import db from sqlalchemy import func from workers.base_worker import BaseWorker from models import RawStreamRates, StreamRate, ProjectsImportInfo, Territory from decimal import Decimal class PRSStreamRatesWorker(BaseWorker): worker_name = "PRSStreamRatesWorker" mapped_countries = {"WW": 0} def execute(self): self.logger.info("PRS StreamRates import", "Importing stream rates revenue...") imported_date = ProjectsImportInfo.get_imported_streams_rate_date() last_imported_stream_rate_date = self.__get_stream_rates_max_imported_date() if last_imported_stream_rate_date and imported_date == last_imported_stream_rate_date: self.logger.info("PRS StreamRates import", "No new updates") return raw_stream_rates = db.session.query(RawStreamRates).all() self.logger.info("PRS StreamRates import", f"Importing new {len(raw_stream_rates)} count...") stream_rates_country_codes = [rate.country_code for rate in raw_stream_rates] territories = db.session.query(Territory).filter(Territory.code.in_(stream_rates_country_codes)).all() for territory in territories: self.mapped_countries[territory.code] = territory.id for rate in raw_stream_rates: if rate.country_code not in self.mapped_countries.keys(): self.logger.info("PRS StreamRates import", f"Unknown country with country code '{rate.country_code}'") continue db.session.add( self.__map_stream( territory_id=self.mapped_countries[rate.country_code], rate=rate, imported_date=imported_date ) ) db.session.commit() db.session.close() self.logger.info("PRS StreamRates import", "Import finished") def __get_stream_rates_max_imported_date(self): max_stream_rate_date = ( db.session.query(func.max(StreamRate.imported_date).label("max_imported_date")) .group_by(StreamRate.imported_date) .one_or_none() ) if max_stream_rate_date: return max_stream_rate_date.max_imported_date return None def __map_stream(self, territory_id, rate, imported_date): return StreamRate( territory_id=territory_id, cross_platform_blended_rate=Decimal(rate.cross_platform_blended_rate), spotify_blended_rate=Decimal(rate.spotify_blended_rate), apple_blended_rate=Decimal(rate.apple_blended_rate), amazon_blended_rate=Decimal(rate.amazon_blended_rate), youtube_blended_rate=Decimal(rate.youtube_blended_rate), imported_date=imported_date, )