"""Schema for channel metrics endpoint.""" from marshmallow import fields from analytics.schemas.common import BaseSchema, SourceSchema class DateSpecificChannelMetricsSchema(BaseSchema): """Marshmallow schema for date specific channel metrics.""" channel_id = fields.String(data_key="channelId") download_activity_date = fields.String(data_key="downloadActivityDate") views = fields.Integer() premium_views = fields.Integer(data_key="premiumViews") average_view_duration_seconds = fields.Float(data_key="averageViewDurationSeconds") average_view_duration_percentage = fields.Float( data_key="averageViewDurationPercentage" ) watch_time_minutes = fields.Float(data_key="watchTimeMinutes") premium_watch_time_minutes = fields.Float(data_key="premiumWatchTimeMinutes") impressions_ctr = fields.Float(data_key="impressionsCtr") estimated_partner_ad_revenue = fields.Float(data_key="estimatedPartnerAdRevenue") estimated_partner_premium_revenue = fields.Float( data_key="estimatedPartnerPremiumRevenue" ) estimated_monetized_playbacks = fields.Integer( data_key="estimatedMonetizedPlaybacks" ) cpm = fields.Float() rpm = fields.Float() ad_fill_rate = fields.Float(data_key="adFillRate") comments = fields.Integer() class AggregateChannelMetricsSchema(BaseSchema): """Marshmallow schema for aggregate channel metrics.""" channel_id = fields.String(data_key="channelId") views = fields.Integer() premium_views = fields.Integer(data_key="premiumViews") average_view_duration_seconds = fields.Float(data_key="averageViewDurationSeconds") average_view_duration_percentage = fields.Float( data_key="averageViewDurationPercentage" ) watch_time_minutes = fields.Float(data_key="watchTimeMinutes") premium_watch_time_minutes = fields.Float(data_key="premiumWatchTimeMinutes") impressions_ctr = fields.Float(data_key="impressionsCtr") estimated_partner_ad_revenue = fields.Float(data_key="estimatedPartnerAdRevenue") estimated_partner_premium_revenue = fields.Float( data_key="estimatedPartnerPremiumRevenue" ) estimated_monetized_playbacks = fields.Integer( data_key="estimatedMonetizedPlaybacks" ) cpm = fields.Float() rpm = fields.Float() ad_fill_rate = fields.Float(data_key="adFillRate") comments = fields.Integer() class AllTimeChannelMetricsSubSchema(BaseSchema): """Marshmallow schema for all time channel metrics.""" channel_id = fields.String(data_key="channelId") views = fields.Integer() premium_views = fields.Integer(data_key="premiumViews") average_view_duration_seconds = fields.Float(data_key="averageViewDurationSeconds") average_view_duration_percentage = fields.Float( data_key="averageViewDurationPercentage" ) watch_time_minutes = fields.Float(data_key="watchTimeMinutes") premium_watch_time_minutes = fields.Float(data_key="premiumWatchTimeMinutes") impressions_ctr = fields.Float(data_key="impressionsCtr") estimated_partner_ad_revenue = fields.Float(data_key="estimatedPartnerAdRevenue") estimated_partner_premium_revenue = fields.Float( data_key="estimatedPartnerPremiumRevenue" ) estimated_monetized_playbacks = fields.Integer( data_key="estimatedMonetizedPlaybacks" ) cpm = fields.Float() rpm = fields.Float() ad_fill_rate = fields.Float(data_key="adFillRate") comments = fields.Integer() class AllTimeChannelMetricsSchema(BaseSchema): """Marshmallow schema for all time channel metrics.""" all_time_channel_metrics = fields.Nested(AllTimeChannelMetricsSubSchema) sources = fields.Nested(SourceSchema, many=True) class ChannelMetricsSchema(BaseSchema): """Marshmallow schema for channel metrics.""" channel_metrics = fields.Nested(nested=DateSpecificChannelMetricsSchema, many=True) aggregate_channel_metrics = fields.Nested(AggregateChannelMetricsSchema) sources = fields.Nested(SourceSchema, many=True)