from apollo_utils.service.schemas.mixins.date import DateRangeMixin from marshmallow import Schema, fields from server.schemas.delphi.mixins.cursor import DelphiCursorMixin from server.schemas.delphi.videos.charts.base import ( BaseDelphiVideoPositionsChartsRequestSchema, ChartSchema, VideoSchema, ) class DelphiVideoPositionsChartsSummaryV3: class RequestSchema(BaseDelphiVideoPositionsChartsRequestSchema): pass class ResponseSchema(Schema): class Meta: class ItemSchema(Schema): class Meta: class SummarySchema(Schema): class Meta: include = { "earliest_position": fields.Integer(), "earliest_position_date": fields.Date(format="iso"), "latest_position": fields.Integer(), "latest_position_date": fields.Date(format="iso"), "max_position": fields.Integer(), "max_position_date": fields.Date(format="iso"), "min_position": fields.Integer(), "min_position_date": fields.Date(format="iso"), "total_days": fields.Integer(), } include = { "chart": fields.Nested(ChartSchema), "summary": fields.Nested(SummarySchema), "video_id": fields.String(), "video": fields.Nested(VideoSchema), } include = {"items": fields.List(fields.Nested(ItemSchema)), "count": fields.Integer()} class DelphiVideoPositionsChartsV3: class RequestSchema(BaseDelphiVideoPositionsChartsRequestSchema, DateRangeMixin, DelphiCursorMixin): pass class ResponseSchema(Schema): class Meta: class ItemSchema(Schema): class Meta: class PositionSchema(Schema): class Meta: include = { "current": fields.Integer(), "date": fields.Date(format="iso"), "date_gap": fields.Integer(), "is_entry": fields.Boolean(), "is_exit": fields.Boolean(), "is_reentry": fields.Boolean(), "previous_date": fields.Date(format="iso"), "previous_position": fields.Integer(), "trend": fields.Integer(), } include = { "chart": fields.Nested(ChartSchema), "position": fields.Nested(PositionSchema), "video_id": fields.String(), "video": fields.Nested(VideoSchema), } include = { "items": fields.List(fields.Nested(ItemSchema)), "count": fields.Integer(), "next_cursor": fields.String(), }