from marshmallow import fields from analytics.connectors.snowflake import AbstractSnowflakeQuery from analytics.queries.schema import QueryWithPermissionsSchema class AccountTimeSeriesQuerySchema(QueryWithPermissionsSchema): account_id = fields.Int(required=True) start_date = fields.Date() end_date = fields.Date() countries = fields.List(fields.String) distributors = fields.List(fields.String) store_ids = fields.List(fields.Int) fin_label_ids = fields.List(fields.String, required=False, allow_none=True) upper_profit_center_ids = fields.List( fields.String, required=False, allow_none=True ) ids = fields.List(fields.String) account_table = fields.Str() type = fields.Str() account_type = fields.Str() aggregation_field = fields.Str() resolution = fields.Str() # (label_id, subaccount_id) pairs of co-owners (former or current) of any # product this account had access to. Inlined as constants in the WHERE # clause so Snowflake can prune the BY_ACCOUNT _DAILY clusters. cross_attribution_pairs = fields.List( fields.Tuple((fields.Int(), fields.Int(allow_none=True))), load_default=list, ) class AccountSummaryQuerySchema(QueryWithPermissionsSchema): account_id = fields.Int(required=True) start_date = fields.Date() end_date = fields.Date() countries = fields.List(fields.String) distributors = fields.List(fields.String) fin_label_ids = fields.List(fields.String) upper_profit_center_ids = fields.List( fields.String, required=False, allow_none=True ) store_ids = fields.List(fields.Int) ids = fields.List(fields.String) streams_table = fields.Str() downloads_table = fields.Str() account_album_downloads_table = fields.Str() account_track_downloads_table = fields.Str() type = fields.Str() account_type = fields.Str() aggregation_field = fields.Str() resolution = fields.Str() # See AccountTimeSeriesQuerySchema.cross_attribution_pairs. cross_attribution_pairs = fields.List( fields.Tuple((fields.Int(), fields.Int(allow_none=True))), load_default=list, ) # pagination params limit = fields.Int() offset = fields.Int() order_by = fields.Str() order_dir = fields.Str() class AccountProductsFixedPeriodQuerySchema(QueryWithPermissionsSchema): account_id = fields.Int(required=True) account_type = fields.Str(required=True) countries = fields.List(fields.String) store_ids = fields.List(fields.Int) max_available_date = fields.Date() deletions = fields.Bool() sale_start_date_months_back = fields.Int() order_by = fields.Str(required=True) order_dir = fields.Str() limit = fields.Int() class AccountProductsCustomPeriodQuerySchema(AccountProductsFixedPeriodQuerySchema): start_date = fields.Date() end_date = fields.Date() # See AccountTimeSeriesQuerySchema.cross_attribution_pairs. Inlined as # constants so Snowflake prunes the BY_ACCOUNT _DAILY label_id clusters. cross_attribution_pairs = fields.List( fields.Tuple((fields.Int(), fields.Int(allow_none=True))), load_default=list, ) class AccountTopContentQuerySchema(QueryWithPermissionsSchema): account_id = fields.Int(required=True) account_type = fields.Str() start_date = fields.Date() end_date = fields.Date() countries = fields.List(fields.String) store_ids = fields.List(fields.Int) account_type = fields.Str() distributors = fields.List(fields.String) top_size = fields.Int() # See AccountTimeSeriesQuerySchema.cross_attribution_pairs. cross_attribution_pairs = fields.List( fields.Tuple((fields.Int(), fields.Int(allow_none=True))), load_default=list, ) class AccountVideoTimeseriesQuerySchema(QueryWithPermissionsSchema): account_id = fields.Int(required=True) labelid = fields.Int() start_date = fields.Date() end_date = fields.Date() countries = fields.List(fields.String) distributors = fields.List(fields.String) is_timeseries = fields.Boolean() views_type = fields.String(required=True) is_views_type_ad_supported = fields.Boolean() is_subaccount_level = fields.Boolean() is_participant_join = fields.Boolean() type = fields.String(required=True) aggregation_field = fields.Str() aggregation_field_prefix = fields.String() limit = fields.Integer() table_name = fields.Str() class AccountVideoSummaryQuerySchema(QueryWithPermissionsSchema): account_id = fields.Int(required=True) labelid = fields.Int() start_date = fields.Date() end_date = fields.Date() countries = fields.List(fields.String) distributors = fields.List(fields.String) is_timeseries = fields.Boolean() views_type = fields.String(required=True) is_views_type_ad_supported = fields.Boolean() is_subaccount_level = fields.Boolean() is_participant_join = fields.Boolean() type = fields.String(required=True) aggregation_field = fields.String() aggregation_field_prefix = fields.String() limit = fields.Integer() table_name = fields.String() class AccountDownloadsTimeSeries(AbstractSnowflakeQuery): query_schema = AccountTimeSeriesQuerySchema filename = "account/downloads_time_series.sql" class AccountStreamsTimeSeries(AbstractSnowflakeQuery): query_schema = AccountTimeSeriesQuerySchema filename = "account/streams_time_series.sql" class AccountSummary(AbstractSnowflakeQuery): query_schema = AccountSummaryQuerySchema filename = "account/summary.sql" default_params = { "order_by": "streams", "order_dir": "DESC", "limit": 50, "offset": 0, } class AccountSummaryDefaultParams(AccountSummary): query_schema = AccountSummaryQuerySchema filename = "account/summary_default_params.sql" class AccountProductsByStreamsFixedPeriod(AbstractSnowflakeQuery): query_schema = AccountProductsFixedPeriodQuerySchema filename = "account/products_by_streams_fixed_period.sql" class AccountProductsByStreamsCustomPeriod(AbstractSnowflakeQuery): query_schema = AccountProductsCustomPeriodQuerySchema filename = "account/products_by_streams_custom_period.sql" class AccountProductsByDownloadsFixedPeriod(AbstractSnowflakeQuery): query_schema = AccountProductsFixedPeriodQuerySchema filename = "account/products_by_downloads_fixed_period.sql" class AccountProductsByDownloadsCustomPeriod(AbstractSnowflakeQuery): query_schema = AccountProductsCustomPeriodQuerySchema filename = "account/products_by_downloads_custom_period.sql" class AccountTopContentDownloads(AbstractSnowflakeQuery): query_schema = AccountTopContentQuerySchema filename = "account/top_content_downloads.sql" class AccountTopContentStreams(AbstractSnowflakeQuery): query_schema = AccountTopContentQuerySchema filename = "account/top_content_streams.sql" class AccountTopContentAllTimeStreams(AbstractSnowflakeQuery): query_schema = AccountTopContentQuerySchema filename = "account/top_content_streams_all_time.sql" class AccountVideoTimeseries(AbstractSnowflakeQuery): query_schema = AccountVideoTimeseriesQuerySchema filename = "account/video_views_by_account.sql" class AccountVideoSummary(AbstractSnowflakeQuery): query_schema = AccountVideoSummaryQuerySchema filename = "account/video_views_by_account.sql"