""" Constants and utilities for working with Redis keys. Contains: 1. Constants for all keys used in the application. 2. Constants with expiration time for all keys. 3. Useful utilities for handling keys. """ import os from flask import current_app as app def get_key(key, *args, **kwargs): """ Compose a Redis key. Args: key (str): Key as a format string with placeholders. *args: Arguments for substituting the placeholders in the key. **kwargs: Named key parts. Returns: str: Complete key constructed by substituting placeholders with provided arguments and adding prefix from config. """ return app.config["REDIS_KEY_PREFIX"] + key.format(*args, **kwargs) # Current state of comparison page. Expires in 30 days since last access. COMPARED_TRACKS = "compared_tracks/{}" COMPARED_TRACKS_TTL = int(os.environ.get("COMPARED_TRACKS_TTL", 2592000)) AUTH0_MANAGEMENT_TOKEN = "auth0_management_token/{}" # nosec AUTH0_MANAGEMENT_TOKEN_TTL = 86400 # nosec (24 hours) TRACK_RELEASE_DATE = "track_release/{}" TRACK_RELEASE_DATE_TTL = int(os.environ.get("TRACK_RELEASE_DATE_TTL", 86400)) ALBUMS_DSP_INFO = "album/{}/{}/{}" DSP_CACHE_TTL = int(os.environ.get("DSP_CACHE_TTL", 86400)) SPOTIFY_TRACK_IS_SONY = "is_sony/spotify/{}/{}" TWO_LAST_CHARTS_SPOTIFY = "2charts/{}/{}/{}/{}" TWO_LAST_CHARTS_APPLE = "2charts/{}/{}" TWO_LAST_CHARTS_TTL = int(os.environ.get("TWO_LAST_CHARTS_TTL", 1200)) CHART_TRACK_STATS = "chart/stats/{}/{}/{}/{}" SPOTIFY_TRACK_PLAYLISTS_STATS = "spotify/playlists-stats/{}/{}/{}" APPLE_PLAYLISTS_ADDED_DATES = "apple-music/track-playlists/added-dates/{}/{}/{}" APPLE_PLAYLISTS_ADDED_DATES_TTL = 86400 CHARTS_RESPONSE = ( "chart/{vendor},{market},{chart_type},{position_start},{position_end}" + ",{is_position_out},{position_change},{is_new},{is_removed},{is_sony}" ) CHARTS_BUILDER_FIELDS_DELIMITER = "-F-" CHARTS_BUILDER_BASE_QUERY_PATTERN = ( "charts/{builder_name}/{vendor}/{market}/{chart_type}/{chart_date}/{is_sony}" + "/{start_position}/{end_position}/{change}/{compact}" ) CHARTS_RESPONSE_TTL = 14400 SPOTIFY_TRACK_PLAYLISTS_STATS_TTL = int(os.environ.get("SPOTIFY_TRACK_PLAYLISTS_STATS_TTL", 1200)) CHART_AVAILABILITY_TTL = 86400 CHART_AVAILABILITY = "chart/availability/{}/{}" APPLICATION_MARKETS = "app-markets" APPLICATION_MARKETS_TTL = int(os.environ.get("APPLICATION_MARKETS_TTL", 86400)) APOLLO_MARKETS = "apollo-markets/{}" APOLLO_MARKETS_TTL = int(os.environ.get("APOLLO_MARKETS_TTL", 86400)) FILTR_SPOTIFY_PLAYLISTS_WITH_TRACK = "spotify/filtr/pl-tracks/{}/{}/{}/{}" FILTR_SPOTIFY_PLAYLISTS_WITH_TRACK_TTL = int(os.environ.get("FILTR_SPOTIFY_PLAYLISTS_WITH_TRACK_TTL", 900)) FILTR_SPOTIFY_PLAYLISTS_WITH_TRACK_HISTORY = "spotify/filtr/pl-tracks-history/{}/{}/{}/{}/{}" FILTR_SPOTIFY_PLAYLISTS_WITH_TRACK_HISTORY_TTL = int( os.environ.get("FILTR_SPOTIFY_PLAYLISTS_WITH_TRACK_HISTORY_TTL", 900) ) PERSONALIZED_PLAYLISTS_IDS = "personalized-playlists-ids" PERSONALIZED_PLAYLISTS_IDS_TTL = int(os.environ.get("PERSONALIZED_PALYLISTS_IDS_TTL", 14400)) APOLLO_MOBILE_VERSION = "apollo_go/latest_version/{}" APOLLO_MOBILE_VERSION_TTL = 1800 APOLLO_VERSION_COPIES = "copies/{}/{}" APOLLO_VERSION_COPIES_TTL = 10800 DEFAULT_PAGINATION_TLL = int(os.environ.get("DEFAULT_PAGINATION_TLL", 180)) CHARTS_TRACK_SUMMARY = "charts_track_summary/{isrc},{vendor},{search}" RAW_APPLE_TRACK_PLAYLISTS_TTL = 900 RAW_APPLE_TRACK_PLAYLISTS = "apple-music/track-playlists/db/{}/{}" APPLE_TRACK_PLAYLISTS = "apple-music/track-playlists/{isrc}/{market}/{is_sony}/{search}/{image_size}" SPOTIFY_TRACK_PLAYLISTS = "spotify/track-playlists/{isrc}/{market}/{is_sony}/{search}" GLOBAL_TRACK_PRIORITIES_TRACKS = "gtp-tracks/{type_id}/{gtp_date}/{market}/{include}" GLOBAL_TRACK_PRIORITIES_TRACKS_TTL = int(os.environ.get("GLOBAL_TRACK_PRIORITIES_TRACKS_TTL", 3600)) GLOBAL_TRACK_HOT_HITS_DATE = "gtp-hh-date" GLOBAL_TRACK_HOT_HITS_DATE_TTL = int(os.environ.get("GLOBAL_TRACK_HOT_HITS_DATE_TTL", 3600)) GLOBAL_TRACK_CHART_DATE = "gtp-chart-date/{market}" GLOBAL_TRACK_CHART_DATE_TTL = int(os.environ.get("GLOBAL_TRACK_CHART_DATE_TTL", 3600)) GLOBAL_TRACK_STREAMS = "gtp-streams/{}/{streams_date}/{market}/{date_shift}" GLOBAL_TRACK_STREAMS_TTL = int(os.environ.get("GLOBAL_TRACK_STREAMS_TTL", 1800)) GLOBAL_TRACK_CHART_POSITIONS = "gtp-chart-positions/{}/{market}/{start_date}/{end_date}" GLOBAL_TRACK_CHART_POSITIONS_TTL = int(os.environ.get("GLOBAL_TRACK_CHART_POSITIONS_TTL", 3600))