from typing import Any, Mapping from marshmallow import Schema, fields from playlist.connectors.snowflake import SnowflakeQuery from playlist.queries.constants import ( PRIVATE_PLACEMENT_TABLE, PRIVATE_PLACEMENT_TABLE_WITHOUT_COUNTRY, ) class PlaylistPlacementCompanyBrandSchema(Schema): store_playlist_id = fields.Str(required=True) store_id = fields.Str(required=True) storefront = fields.Str(allow_none=True) isrc = fields.Str(allow_none=True) row_number = fields.Integer(allow_none=True) class BulkPlaylistPlacementCompanyBrandsQuerySchema(Schema): storefront_defined = fields.Boolean() playlists = fields.List(fields.Nested(PlaylistPlacementCompanyBrandSchema)) class PlaylistPlacementCompanyBrandsQuery(SnowflakeQuery): query_schema = BulkPlaylistPlacementCompanyBrandsQuerySchema filename = "bulk_playlist_placements_company_brands.sql" @property def table_params(self) -> Mapping[str, Any]: if self.user_params.get("storefront_defined") is True: playlist_placement_private_table_name = PRIVATE_PLACEMENT_TABLE else: playlist_placement_private_table_name = ( PRIVATE_PLACEMENT_TABLE_WITHOUT_COUNTRY ) playlist_table_params = { "playlist_placement_private_table_name": playlist_placement_private_table_name, } return playlist_table_params