"""Query classes for the /participant//timeseries endpoint.""" from marshmallow import fields, validate from analytics.connectors.snowflake import AbstractSnowflakeQuery from analytics.queries.schema import QueryWithPermissionsSchema TIMESERIES_GROUP_BY_COLUMNS = [ "global_participant_id", "country_code", "store_id", "product_id", "isrc", ] RESOLUTION_VALUES = ["mid", "low", "ultralow"] class _TimeseriesBaseSchema(QueryWithPermissionsSchema): global_participant_id = fields.String(required=True) distributors = fields.List(fields.String, required=True) country_ids = fields.List(fields.String, load_default=[]) store_ids = fields.List(fields.Int, load_default=[]) ids = fields.List(fields.Raw(), load_default=[]) start_date = fields.Date(allow_none=True, load_default=None) end_date = fields.Date(allow_none=True, load_default=None) days_back = fields.Integer(allow_none=True, load_default=None) max_available_date = fields.Date(allow_none=True, load_default=None) resolution = fields.String( allow_none=True, load_default=None, validate=validate.OneOf(RESOLUTION_VALUES), ) class ParticipantTimeseriesStreamsQuerySchema(_TimeseriesBaseSchema): group_by_column = fields.String( load_default="global_participant_id", validate=validate.OneOf(TIMESERIES_GROUP_BY_COLUMNS), ) exclude_tiktok = fields.Boolean(load_default=False) class ParticipantTimeseriesStreamsBySosQuerySchema(_TimeseriesBaseSchema): is_detailed = fields.Boolean(load_default=False) sos_columns = fields.List(fields.String, load_default=[]) class ParticipantTimeseriesDownloadsQuerySchema(_TimeseriesBaseSchema): group_by_column = fields.String( load_default="global_participant_id", validate=validate.OneOf(TIMESERIES_GROUP_BY_COLUMNS), ) is_album = fields.Boolean(load_default=False) class ParticipantTimeseriesStreams(AbstractSnowflakeQuery): query_schema = ParticipantTimeseriesStreamsQuerySchema filename = "participant/timeseries_streams.sql" class ParticipantTimeseriesStreamsBySos(AbstractSnowflakeQuery): query_schema = ParticipantTimeseriesStreamsBySosQuerySchema filename = "participant/timeseries_streams_by_sos.sql" class ParticipantTimeseriesDownloads(AbstractSnowflakeQuery): query_schema = ParticipantTimeseriesDownloadsQuerySchema filename = "participant/timeseries_downloads.sql"