#imports import os import sys parent_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) utils_dir = os.path.join(parent_dir, "utils") sys.path.append(utils_dir) import pandas as pd pd.options.mode.chained_assignment = None import sys import datetime as dt from flask import render_template, request, session, make_response from flask.views import MethodView from blueprints.auth.routes import session_url_setter from utils.config import Config from utils.sme_ds_utilities import DatabaseUtils import time # From lists rep_owner_lookup_df = pd.DataFrame([{'rep_owner': 'Legacy', 'col': 'fin_label_parent_name', 'filter': ['Legacy', 'SMG']}, {'rep_owner': 'RCA', 'col': 'fin_label_parent_name', 'filter': ['RCA Records', 'RCA Inspiration']}, {'rep_owner': 'Columbia', 'col': 'fin_label_parent_name', 'filter': ['Columbia Records Group']}, {'rep_owner': 'Epic', 'col': 'fin_label_parent_name', 'filter': ['Epic Records Group']}, {'rep_owner': '5020 Records', 'col': 'fin_label_parent_name', 'filter': ['5020 RECORDS']}, {'rep_owner': 'Sony Nashville', 'col': 'fin_label_parent_name', 'filter': ['Sony Music Nashville']}, {'rep_owner': 'Alamo', 'col': 'fin_label_parent_name', 'filter': ['Alamo', 'Santa Anna']}, {'rep_owner': 'Arista', 'col': 'fin_label_parent_name', 'filter': ['Arista Records 2018', 'Arista Records 2018 Cat']}, {'rep_owner': 'Provident', 'col': 'fin_label_parent_name', 'filter': ['Provident Music Group']}, {'rep_owner': 'RECORDS', 'col': 'fin_label_parent_name', 'filter': ['Records JV/ Columbia', 'Records V2 JV', 'Records LLC / RED Music', 'RECORDS LLC/RCA', 'Records JV/Provident', 'RECORDS LLC/NASHVILLE']}, {'rep_owner': 'Ultra', 'col': 'fin_label_parent_name', 'filter': ['Ultra Records Primary CAT', 'Ultra Records (primary)']}, {'rep_owner': 'Masterworks', 'col': 'fin_label_parent_name', 'filter': ['Masterworks']}, {'rep_owner': 'Milan', 'col': 'fin_label_parent_name', 'filter': ['Milan']}, {'rep_owner': 'Century Media', 'col': 'fin_label_parent_name', 'filter': ['Century Media']}, {'rep_owner': 'Black Butter', 'col': 'fin_label_parent_name', 'filter': ['Black Butter']}, {'rep_owner': 'Sony International Network', 'col': 'fin_label_parent_name', 'filter': ['Sony International Network']}, {'rep_owner': 'The Orchard', 'col': 'fin_label_parent_name', 'filter': ['The Orchard']}, {'rep_owner': 'AWAL', 'col': 'fin_label_parent_name', 'filter': ['AWAL']}, {'rep_owner': 'SME International Marketing', 'col': 'rep_owner_name', 'filter': ['Columbia', 'Columbia Nashville', 'RCA Contemporary', 'RCA Catalog', 'Kemosabe Records/RCA', 'RCA Nashville', 'Winners Circle Entertainment, Inc. & RCA Contemporary', 'A$AP Rocky Recordings LLC/RCA Records', 'StreamCut & RCA Contemporary', 'Keep Cool/RCA Records', 'ACMG/RCA Contemporary', 'Red Clay Strays, LLC (RCA Deal)', 'RCA INSPIRATION - FRONTLINE', 'Epic', 'Arista Records Exclusive Licensed In', 'Arista Contemporary', 'Arista Nashville', 'Arista Records 2018', 'Alamo']}, {'rep_owner': 'SME India', 'col': 'rep_owner_name', 'filter': ['SME India Pvt. Ltd.']}, {'rep_owner': 'SME UK', 'col':'rep_owner_name', 'filter': ['SME UK Limited']}, {'rep_owner': 'SME Germany', 'col':'rep_owner_name', 'filter': ['SME Germany GmbH']}, {'rep_owner': 'SME France', 'col':'rep_owner_name', 'filter': ['SME France SAS']}, {'rep_owner': 'SME Italy', 'col':'rep_owner_name', 'filter': ['SME Italy S.p.A.']}, {'rep_owner': 'SME Sweden', 'col':'rep_owner_name', 'filter': ['SME Sweden AB']}, {'rep_owner': 'SME Australia', 'col':'rep_owner_name', 'filter': ['SME Australia Pty Ltd']}, {'rep_owner': 'SME Ireland', 'col': 'rep_owner_name', 'filter': ['SME Ireland Limited'] }, {'rep_owner': 'SME Belgium', 'col': 'rep_owner_name', 'filter': ['SME Belgium NV/SA'] }, {'rep_owner': 'SME Netherlands', 'col': 'rep_owner_name', 'filter': ['SME Netherlands B.V.', 'SME Netherlands Italian Artists'] }, {'rep_owner': 'SME Benelux', 'col': 'rep_owner_name', 'filter': ['SME Belgium NV/SA', 'SME Netherlands B.V.', 'SME Netherlands Italian Artists'] }, {'rep_owner': 'SME Africa', 'col': 'rep_owner_name', 'filter': ['SME Africa (Pty) Ltd','SM Entertainment West Africa Limited'] }, {'rep_owner': 'SME Korea', 'col': 'rep_owner_name', 'filter': ['SME Korea Inc.'] }, {'rep_owner': 'SME Poland', 'col': 'rep_owner_name', 'filter': ['SME Poland Sp. z o. o.', 'SME Poland Sp. z o. o., Pur Pur, Def Jam Recordings Poland, Live']}]) class BaseView(MethodView): def __init__(self): self.smeds = DatabaseUtils(Config.DB_SOURCE) def initial_load(self, template='indexv2.html'): user_email = session.get('email', '') try: comment = request.form['insights_feedback_value'] if len(comment) > 1: action_date = dt.datetime.now().strftime("%Y-%m-%d") q = f"""insert into tadas.exit_interview values ('{user_email}', '{action_date}', '{comment}')""" post = self.smeds.update_db(q) except: skip = 1 # TODO: Will I need these? current_endpoint = request.endpoint current_path = request.path selected_filters = {'rep_owner_choice': None, 'geo_country_choice': None, 'era_choice': None, 'streamRange_choice': None, 'trendRange_choice': None} q = f"""select * from tadas.exit_interview where user_email = '{user_email}' and action_date > '{(dt.datetime.now() - dt.timedelta(days=7)).strftime("%Y-%m-%d")}';""" user_exitInterview_df = self.smeds.query_db(q, 'main') if len(user_exitInterview_df) == 0: intro_filled_out = False else: intro_filled_out = True q = """select * from tadas.saved_filters where user_email = '""" + user_email + """';""" user_settings_df = self.smeds.query_db(q, 'main') if len(user_settings_df) > 0: selected_filters = {'rep_owner_choice': user_settings_df['rep_owner_choice'].max(), 'geo_country_choice': user_settings_df['geo_country_choice'].max(), 'era_choice': user_settings_df['era_choice'].max(), 'streamRange_choice': user_settings_df['streamrange_choice'].astype(str).max(), 'trendRange_choice': user_settings_df['trendrange_choice'].astype(str).max()} date_updated_q = """select max(report_date) as report_date from tadas_sandbox.yesterday_beta;""" date_updated = self.smeds.query_db(date_updated_q, 'main')['report_date'].iloc[0].strftime('%Y-%m-%d') session['selected_filters'] = selected_filters # Set defaults for exports. show_table = False logo_image = 'sme_logo_gif3.gif' column_clean_names = [ 'ID', 'Artist', 'Track', 'TADAS-30', 'Avg Daily US Streams', '7 Day US Lift', 'Days Trending', 'Daily Gainers', 'Track Risers', 'TikTok WW', 'Tiktok US' ] card_json_data = 'null' no_go_message = '' is_columns_df = pd.DataFrame(columns=['product_family_no', 'artist_name', 'product_name', 'pfn_geo', 'tadas_30day_score', 'agg_streams_tw', 'agg_streams_change', 'consecutive_trend', 'is_daily_gainers', 'is_track_risers', 'is_tiktok_ww', 'is_tiktok_us']) timing_data = [] total_start = time.time() total_time = time.time() - total_start timing_data.append(f"TOTAL REQUEST TIME: {total_time:.3f}s") context = { 'current_endpoint': current_endpoint, 'filter_status': selected_filters, 'column_clean_names': column_clean_names, 'card_json_data': card_json_data, 'new_df': is_columns_df.values.tolist(), 'date_updated': date_updated, 'logo_image': logo_image, 'show_table': show_table, 'no_go_message': no_go_message, 'user_email': user_email, 'timing_data': timing_data, 'intro_filled_out': intro_filled_out } return render_template(template, **context)