"""Config for Spotify Statistics Workflow.""" import os import subprocess from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import serialization from fangare import catchers STATS_NAME = 'spotify_statistics' ENV = os.environ.get('Environment') if os.environ.get('Environment') == 'prod': try: GIT_HASH_OF_LAST_COMMIT = ( subprocess.check_output( 'git rev-parse HEAD', shell=True).decode().strip()) except subprocess.CalledProcessError: GIT_HASH_OF_LAST_COMMIT = 'spotify_statistics_commit' else: GIT_HASH_OF_LAST_COMMIT = 'spotify_statistics_dev_commit' SPOTIFY_LINK = 'https://open.spotify.com' SHA256HASH = "029348b4fc07a78511be6d4d30476f659ea3338956ced72fcda251c60dbee468" # get Snowflake private_key SNOWFLAKE_PRIVATE_KEY_PATH = os.getenv( 'SNOWFLAKE_PRIVATE_KEY_PATH', '{}/.ssh/snowflake/rsa_key.p8'.format(os.getenv('HOME'))) SNOWFLAKE_KEY_PASSPHRASE = os.getenv('SNOWFLAKE_KEY_PASSPHRASE') if SNOWFLAKE_KEY_PASSPHRASE: # Snowflake key with open(SNOWFLAKE_PRIVATE_KEY_PATH, 'rb') as key: p_key = serialization.load_pem_private_key( key.read(), password=SNOWFLAKE_KEY_PASSPHRASE.encode(), backend=default_backend() ) PRIVATE_KEY = p_key.private_bytes( encoding=serialization.Encoding.DER, format=serialization.PrivateFormat.PKCS8, encryption_algorithm=serialization.NoEncryption()) else: PRIVATE_KEY = None SF_CONFIG = { 'role': os.environ.get('SNOWFLAKE_ROLE'), 'warehouse': os.environ.get('SNOWFLAKE_WAREHOUSE'), 'db': os.environ.get('SNOWFLAKE_DATABASE'), 'schema': os.environ.get('SNOWFLAKE_SCHEMA'), 'user': os.environ.get('SNOWFLAKE_USER'), 'password': catchers.get_secret('SNOWFLAKE_PASSWORD', 'youtube-statistics', ENV), 'account': os.environ.get('SNOWFLAKE_ACCOUNT'), 'private_key': PRIVATE_KEY } aws = { 'aws_key_id': os.environ.get('AWS_ACCESS_KEY_ID'), 'aws_secret_key': os.environ.get('AWS_SECRET_ACCESS_KEY') } # a DB table postfix for specifying country, team etc. (e.g. '_UK') postfix = os.environ.get('SNOWFLAKE_DATABASE_POSTFIX', '') snowflake_table_names = { 'spotify_artist_to_track': 'artist_to_track' + postfix, 'spotify_statistics': 'spotify_statistics' + postfix, 'staging_raw': 'staging_raw_spotify_statistics' + postfix } spotify = { 'username': os.environ.get('SPOTIFY_USERNAME'), 'password': os.environ.get('SPOTIFY_PASSWORD'), 'client_id': os.environ.get('SPOTIFY_CLIENT_ID'), 'client_secret': os.environ.get('SPOTIFY_CLIENT_SECRET') } request_headers = { "authority": 'open.spotify.com', "pragma": 'no-cache', "cache-control": 'no-cache', "sec-ch-ua": '" Not A;Brand";v="99", "Chromium";v="90", "Google Chrome";v="90"', "sec-ch-ua-mobile": '?0', "upgrade-insecure-requests": '1', "user-agent": 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 ' 'Safari/537.36', "accept": 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,' 'application/signed-exchange;v=b3;q=0.9', "sec-fetch-site": 'none', "sec-fetch-mode": 'navigate', "sec-fetch-user": '?1', "sec-fetch-dest": 'document', "accept-language": 'en-US,en;q=0.9', }