"""Core constants.""" from enum import Enum, Flag, IntEnum VENDOR_APPLE = "apple" VENDOR_SPOTIFY = "spotify" VENDOR_AMAZON = "amazon" VENDORS = (VENDOR_APPLE, VENDOR_SPOTIFY) ALL_VENDORS = (VENDOR_APPLE, VENDOR_SPOTIFY, VENDOR_AMAZON) # TODO: This value should be updated with AMAZON in the next release after "Track Page V2" CA_VENDORS = (VENDOR_APPLE, VENDOR_SPOTIFY) CLIENT_MOBILE = "mobile" CLIENT_PORTAL = "portal" CLIENTS_TYPES = (CLIENT_MOBILE, CLIENT_PORTAL) DEFAULT_PAGINATION_LIMIT = 10 AUTH0_USER_PREFIX = "auth0|" UNIX_EPOCH_START_DATE = "1970-01-01" EXECUTIVE = 1 SALES = 2 MARKETING = 3 A_AND_R = 4 ANALYTICS = 5 OTHER = 6 JOB_CATEGORIES = (EXECUTIVE, SALES, MARKETING, A_AND_R, ANALYTICS, OTHER) JOB_CHOICES = ( ("Executive", EXECUTIVE), ("Sales", SALES), ("Marketing", MARKETING), ("A&R", A_AND_R), ("Analytics", ANALYTICS), ("Other", OTHER), ) class VersionsAPI: v1 = 1 v2 = 2 class ReleaseTypes: SONY = 1 ORCHARD = 2 SONY_MUSIC_ENTERTAINMENT_JAPAN = 3 SONY_MUSIC_ENTERTAINMENT_JAPAN_INTERNATIONAL = 4 class MusicServices: SPOTIFY = 1 DEEZER = 2 YOUTUBE = 3 SOUNDCLOUD = 4 GROOVE = 5 APPLEMUSIC = 6 ALL = (SPOTIFY, DEEZER, YOUTUBE, SOUNDCLOUD, GROOVE, APPLEMUSIC) class BuzzCategories: SONY = 1 UNIVERSAL = 2 WARNER = 3 OTHER_LABEL = 4 SPOTIFY = 5 BRAND = 6 TASTEMAKER = 7 USER = 8 ARTIST = 9 APPLE_CURATORS = 11 ALL = (SONY, UNIVERSAL, WARNER, OTHER_LABEL, SPOTIFY, BRAND, TASTEMAKER, USER, ARTIST, APPLE_CURATORS) class IdType(IntEnum): ISRC = 1 ID = 2 class VendorType(Enum): # should contain all names from VendorBitMask SPOTIFY = VENDOR_SPOTIFY APPLE = VENDOR_APPLE class VendorBitMask(Flag): """Vendor bit flag class. Each value corresponds to particular bit mask. Use it to work with bit flags. Names should be equal to VendorType's names. Should be consistent with update_market_vendors lambda. """ # names should be equal to VendorType's names EMPTY = 0 APPLE = 1 SPOTIFY = 2 BOTH_VENDORS = 3 @classmethod def get_mask(cls, vendor: str) -> "VendorBitMask": """Returns concrete VendorBitMask object corresponding to vendor passed. :param vendor: one of supported vendors. """ if vendor not in VENDORS: raise ValueError(f"Unsupported vendor {vendor} was passed.") return cls[VendorType(vendor).name] def is_set(self, data: int) -> bool: """Check if value is set in data flag for concrete vendor. :param data: int bit flag to check. """ return bool(self.value & data) MARKET_GLOBAL = "global" SPOTIFY_MARKET_GLOBAL = "_gl" DEFAULT_IMAGE_SIZE = 640 DEFAULT_IMAGE_SIZE_MOBILE = 640 DEFAULT_DATE_FORMAT = "%Y-%m-%d" IOS = "ios" ANDROID = "android" ALL_OS = (IOS, ANDROID) class Service: AUTH0 = "auth0" DSP_API = "dsp" VENDOR_API = "vendor" CONSUMER_ANALYTICS_API = "ca" DB = "db" REDIS = "redis" ALL = "all" ALL_VALUES = (AUTH0, DSP_API, CONSUMER_ANALYTICS_API, DB, REDIS, ALL)