from collections import namedtuple from dataclasses import dataclass from enum import Enum from typing import List, Optional from utils.date_utils import DateRange class AccountsFilteringStrategy(Enum): INCLUDE = 1 NOT_INCLUDE = 2 @dataclass class AccountsFilteringOptions: account_ids: Optional[List[int]] strategy: AccountsFilteringStrategy @dataclass class MetricsFilters: dates: DateRange sort: str = "spend" limit: int = 0 offset: int = 0 @dataclass class AccountProvider: provider_id: int provider_name: str account_ids: List[str] __BASE_FIELDS_RESULTS__ = [ "spend", "video_views", "impressions", "conversions", "frequency", "clicks", "cost_per_conversion", "reach", "ctr", "engagements", "cost_per_engagement", "cost_per_click", "video_25_watched", "video_50_watched", "video_75_watched", "video_100_watched", "cpm", "cpm_reach", "video_view_rate", "cost_per_video_view", "start_date", "end_date", ] __EXTENDED_BASE_FIELDS_RESULTS__ = [ *__BASE_FIELDS_RESULTS__, "thruplays", "u_outbound_clicks", "u_outbound_clicks_ctr", "custom_conversions", "u_custom_conversions", "landing_page_views", "leads", "reactions", "u_conversions", "cost_per_thurplays", "cost_per_u_outbound_clicks", "cost_per_custom_conversions", "cost_per_u_custom_conversions", "cost_per_landing_page_views", ] MetricsQueryResult = namedtuple("MetricsQueryResult", ["entity_id", *__EXTENDED_BASE_FIELDS_RESULTS__]) TotalMetricsQueryResult = namedtuple("TotalMetricsQueryResult", ["entities_count", *__EXTENDED_BASE_FIELDS_RESULTS__]) MetricsDetailsQueryResult = namedtuple( "MetricsDetailsQueryResult", ["entity_id", "name", *__EXTENDED_BASE_FIELDS_RESULTS__] )