import hashlib from flask import g, request from auth.auth_view import AuthorizedView from performance.services.metrics_api.metrics_api_service import MetricsApiService from utils.handlers import get_request_query_model from performance.schemas import PerformanceMetricsParamsSchema from utils.test_helpers import sync def cache_key_prefix(): args = tuple(sorted((pair for pair in request.args.items(multi=True)))) args_as_bytes = str(args).encode() hashed_args = str(hashlib.md5(args_as_bytes).hexdigest()) endpoint = request.endpoint.split(".")[1] return f"{endpoint}_{g.user_id}_{hashed_args}" class ArtistsPerformanceMetricsView(AuthorizedView): service = MetricsApiService() @sync async def get(self): params = get_request_query_model(PerformanceMetricsParamsSchema) return await self.service.get_artists_metrics(g.user_id, params) class ProjectsPerformanceMetricsView(AuthorizedView): service = MetricsApiService() @sync async def get(self): params = get_request_query_model(PerformanceMetricsParamsSchema) return await self.service.get_projects_metrics(g.user_id, params) class CampaignsPerformanceMetricsView(AuthorizedView): service = MetricsApiService() @sync async def get(self): params = get_request_query_model(PerformanceMetricsParamsSchema) return await self.service.get_campaigns_metrics(g.user_id, params) class UnassignedCampaignsPerformanceMetricsView(AuthorizedView): service = MetricsApiService() @sync async def get(self): params = get_request_query_model(PerformanceMetricsParamsSchema) return await self.service.get_unassigned_campaigns_metrics(g.user_id, params)