from enum import Enum from dataclasses import dataclass, field from datetime import date from typing import List, Optional from marshmallow import validate from services.territory.constants import GLOBAL_TERRITORY_ID from reporting.services.reporting_metrics.combined_metrics import CombinedMetrics from shared.schemas import DSPList, AVAILABLE_DSPS class ReportingType(Enum): ALL_METRICS = 0 STREAMS = 1 FOLLOWERS = 2 DSP_METRICS = 3 @staticmethod def all_values() -> List[str]: # noinspection PyTypeChecker return list(map(lambda c: c.value, ReportingType)) @dataclass class ReportingMetricsQuery: startDate: date endDate: date dsps: Optional[DSPList] = field(default_factory=AVAILABLE_DSPS) reportingType: Optional[int] = field( default=ReportingType.ALL_METRICS.value, metadata={"validate": validate.OneOf(ReportingType.all_values())} ) territoryId: Optional[int] = field(default=GLOBAL_TERRITORY_ID) @dataclass class StreamRevenueMetadata: crossPlatformBlendedRate: Optional[float] spotifyBlendedRate: Optional[float] appleBlendedRate: Optional[float] amazonBlendedRate: Optional[float] @dataclass class ReportingMetricsResponse: items: List[CombinedMetrics] metadata: StreamRevenueMetadata