"""Features""" from enum import Enum class FEATURES(Enum): AUDIO_RELEASE_BUILDER = 1 MUSIC_VIDEO_RELEASE_BUILDER = 2 FILM_RELEASE_BUILDER = 3 ARTIST_BUILDER = 4 MARKETPLACE = 5 ACCOUNTING = 6 VENDOR_IDENTIFIERS = 7 ANALYTICS = 9 PERFORMANCE_RIGHTS = 10 ALL_TIME_ACCOUNTING = 11 LOCALIZATIONS = 12 PROJECT_MODE = 13 PHYSICAL_PRODUCT_BUILDER = 14 FILM_TRANSPARENCY = 15 SOURCE_OF_STREAM = 16 PHYSICAL_UPC_GENERATION = 18 WORKSTATION_PHYSICAL_REPORTING = 19 ADVERTISING_CAMPAIGN_CONTROL = 20 ORCHARD_ADVERTISING = 21 ORCHARD_ADVERTISING_TIER_1 = 22 SHOW_GROSS_ACCOUNTING = 23 FACEBOOK_CAMPAIGN_BOOST = 25 FACEBOOK_ADVERTISING_BANNER = 26 JAPAN_PHYSICAL_PRODUCT_BUILDER = 27 WORKSTATION_BULK_UPLOAD = 28 ORCHARDGO_BANNER = 29 ORCHARDGO_NEW_BANNER = 30 DYI = 32 ORCHARDGO_SURVEY_BANNER = 31 WORKSTATION_ANALYTICS_OVERVIEW = 33 FANSIFTER = 34 COLLABORATORS_DIRECT_PAYMENTS = 35 DEFAULT_PROMO_PLAYER_TO_ON = 36 FANSIFTER_AD_REPORTING = 37 FANSIFTER_AD_CAMPAIGN_AUDIENCES = 38 FANSIFTER_EMAIL_CAMPAIGNS = 39 FANSIFTER_SMS_CAMPAIGNS = 40 FANSIFTER_GLOBAL_FAN_DATA_LISTS = 41 TIMED_RELEASES = 42 BULK_UPLOADER_TOOL = 43 SONGWHIP = 44 # used in model/features.py FEATURES_SET = set(item.value for item in FEATURES) AWAL_ENABLED_FEATURES = { FEATURES.AUDIO_RELEASE_BUILDER, FEATURES.PROJECT_MODE, FEATURES.DYI, } ALTAFONTE_ENABLED_FEATURES = { FEATURES.ACCOUNTING, FEATURES.ANALYTICS, FEATURES.AUDIO_RELEASE_BUILDER, FEATURES.MUSIC_VIDEO_RELEASE_BUILDER, FEATURES.PROJECT_MODE, FEATURES.MARKETPLACE, FEATURES.SHOW_GROSS_ACCOUNTING, } FOUNDATION_ENABLED_FEATURES = { FEATURES.ANALYTICS, FEATURES.AUDIO_RELEASE_BUILDER, FEATURES.MARKETPLACE, FEATURES.MUSIC_VIDEO_RELEASE_BUILDER, FEATURES.PROJECT_MODE, } SME_ENABLED_FEATURES = { FEATURES.ANALYTICS, FEATURES.AUDIO_RELEASE_BUILDER, FEATURES.MARKETPLACE, FEATURES.MUSIC_VIDEO_RELEASE_BUILDER, FEATURES.PROJECT_MODE, } THEORCHARD_ENABLED_FEATURES = { FEATURES.AUDIO_RELEASE_BUILDER, FEATURES.MUSIC_VIDEO_RELEASE_BUILDER, FEATURES.MARKETPLACE, FEATURES.ACCOUNTING, FEATURES.ANALYTICS, FEATURES.PROJECT_MODE, } FEATURES_SET_SYMBOLS = set(item for item in FEATURES) def restricted_features(enabled_features: set[FEATURES] | None = None) -> list[int]: """ Returns the sorted list of restricted feature values. If enabled_features is provided, it subtracts that set from all features. """ features = FEATURES_SET_SYMBOLS # all features if enabled_features is not None: restricted = features - enabled_features else: restricted = features return sorted(feature.value for feature in restricted) # Owner value for 3rd Party Payee Accounts # Truncated name intentional, corresponds to owner_abbrivation [sic] value # for record with name 3rd Party Payee Account - Non Distro" [sic] in owners table THIRD_PARTY_PAYEE_OWNER = '3rd Party Payee Acco' # 3rd Party Payee Accounts should only have accounting features THIRD_PARTY_PAYEE_ENABLED_FEATURES = { FEATURES.ACCOUNTING, } BRAND_TO_RESTRICTED_FEATURES = { 'awal': restricted_features(AWAL_ENABLED_FEATURES), 'knr': restricted_features(), 'altafonte': restricted_features(ALTAFONTE_ENABLED_FEATURES), 'sme': restricted_features(SME_ENABLED_FEATURES), 'theorchard': restricted_features(THEORCHARD_ENABLED_FEATURES), 'hrs': restricted_features(THEORCHARD_ENABLED_FEATURES), 'msk': restricted_features(THEORCHARD_ENABLED_FEATURES), 'ab': restricted_features(THEORCHARD_ENABLED_FEATURES), 'drm': restricted_features(THEORCHARD_ENABLED_FEATURES), 'ma': restricted_features(THEORCHARD_ENABLED_FEATURES), 'foundation': restricted_features(FOUNDATION_ENABLED_FEATURES), } THIRD_PARTY_PAYEE_RESTRICTED_FEATURES = restricted_features(THIRD_PARTY_PAYEE_ENABLED_FEATURES)