import json import flag from redis import StrictRedis from sqlalchemy.orm.session import Session from apollo_main_db.apollo import PlaylistBlacklist from spotify_playlists_additions_notifications import constants from spotify_playlists_additions_notifications.redis_db import get_key def is_new_track( date: str, playlist_id: str, track_id: str, market: str, user_id: str, redis_client: StrictRedis) -> bool: """Checking is track new or we have already fetch it today Args: date (str): Date with %Y-%m-%d format. playlist_id (str): Playlist ID. track_id (str): Track ID. market (str): Market short name. user_id (str): User ID. redis_client (StrictRedis): Redis client. Returns: Boolean """ redis_key = get_key(f'{date}/{market}/{playlist_id}/{user_id}') if redis_client.sismember(redis_key, track_id): return False redis_client.sadd(redis_key, track_id) redis_client.expire(redis_key, constants.REDIS_KEY_TTL) return True def get_blacklisted_ids(db_session: Session, redis_client: StrictRedis) -> list: redis_key = get_key(f'blacklist/{constants.VENDOR_NAME}') cached_value = redis_client.get(redis_key) if cached_value: return json.loads(cached_value) query = db_session.query( PlaylistBlacklist.playlist_id ).filter( PlaylistBlacklist.vendor == constants.VENDOR_NAME ) playlist_ids = [str(q.playlist_id) for q in query] redis_client.setex(redis_key, constants.BLACKLIST_TTL, json.dumps(playlist_ids, default=str)) return playlist_ids def get_country_code(country_code: str or None) -> str: if not country_code: return '' _country_code = country_code.lower() if _country_code in [constants.APOLLO_GLOBAL_MARKET, constants.SPOTIFY_GLOBAL_MARKET]: return constants.APOLLO_GLOBAL_MARKET return _country_code def get_country_flag(country_code: str or None) -> str: if not country_code: return '' return '🌍' if country_code == constants.APOLLO_GLOBAL_MARKET else flag.flag(country_code) def build_push_message(track: object, country_flag: str) -> str: message = constants.MESSAGE_TEMPLATE.format( artist_name=track.artist_name, track_name=track.track_name, playlist_name=track.playlist_name, position=track.position, country_flag=country_flag ) return message.strip()