from flask import jsonify, redirect from src.app import app from src.config import ATLAS_LOGIN_URL, ATLAS_LOGOUT_URL from src.decorators import login_required from src.models import Artist, Label, NonSignedArtist, NonSignedTrack, WeeklyReport from src.schemas import CreateLastData, CreateWeeklyReportData, PullLastData, PullWeeklyReportData from src.utils import get_last_data, get_names, get_objects, insert_last_data @app.route("/login") def login(): return redirect(ATLAS_LOGIN_URL) @app.route("/logout") def logout(): return redirect(ATLAS_LOGOUT_URL) @app.route("/health") def health(): return "Ok" @app.route("/artist_list", methods=['GET']) @login_required def artist_list(request): result = get_names(Artist, {}) return jsonify(result) @app.route("/label_list", methods=['GET']) @login_required def label_list(request, full_match=True): filters = {'full_match': full_match} result = get_names(Label, filters) return jsonify(result) @app.route("/artist_objects_list", methods=['GET']) @login_required def artist_objects_list(request): result = get_objects(Artist) return jsonify(result) @app.route("/label_objects_list", methods=['GET']) @login_required def label_objects_list(request): result = get_objects(Label) return jsonify(result) @app.route("/last_data", methods=['GET']) @login_required def pull_last_data(request): artist_last_data = get_last_data(NonSignedArtist) track_last_data = get_last_data(NonSignedTrack) result = {"artist": artist_last_data, "track": track_last_data} return jsonify(PullLastData().dump(result)) @app.route("/last_data", methods=['POST']) @login_required def post_last_data(request): data = CreateLastData().load(request.json) result = {} data_mapper = {"artist": {NonSignedArtist: data['artist']}, "track": {NonSignedTrack: data['track']}} for entity_type in data_mapper: for model, data in data_mapper[entity_type].items(): res = insert_last_data(model, data) result[entity_type] = res return jsonify(result) @app.route("/weekly_report_data", methods=['GET']) @login_required def pull_last_weekly_report_data(request): last_weekly_report = get_last_data(WeeklyReport) return jsonify(PullWeeklyReportData().dump(last_weekly_report)) @app.route("/weekly_report_data", methods=['POST']) @login_required def post_weekly_report_data(request): data = CreateWeeklyReportData().load(request.json, many=True) result = insert_last_data(WeeklyReport, data) return jsonify(result)