from datetime import date from flask import Blueprint from flask_apispec import doc, marshal_with, use_kwargs from http import HTTPStatus import src.schemas.charts.playlists.spotify as serializers from src.db.charts.playlists.spotify import get_chart, get_latest_dates from src.domains.playlists.spotify import parse_playlists_data blueprint = Blueprint("charts_playlists_spotify", __name__) @blueprint.route("/charts/playlists/spotify/dates/", methods=["GET"]) @doc("Playlist digest min and max available dates.") @marshal_with( serializers.ChartsPlaylistsDates.Response, code=HTTPStatus.OK, description="Min and max available dates.", ) @marshal_with(None, code=HTTPStatus.UNAUTHORIZED, description="Authentication failed.") def get_charts_playlists_dates(): return {"min_date": date(2020, 1, 1), **get_latest_dates()} @blueprint.route("/charts/playlists/spotify/", methods=["GET"]) @doc("Playlist digest top playlists.") @use_kwargs(serializers.ChartsPlaylists.Request, location="query") @marshal_with(serializers.ChartsPlaylists.Response, code=HTTPStatus.OK, description="Playlist digest charts.") @marshal_with(None, code=HTTPStatus.UNAUTHORIZED, description="Authentication failed.") def get_charts_playlists(**data): chart_data = get_chart(**data) return {"playlists": parse_playlists_data(chart_data, with_positions=True)}