diff --git a/src/otf_api/models/responses/body_composition_list.py b/src/otf_api/models/responses/body_composition_list.py index bf4e55b..8366d74 100644 --- a/src/otf_api/models/responses/body_composition_list.py +++ b/src/otf_api/models/responses/body_composition_list.py @@ -5,6 +5,8 @@ import pint from pydantic import BaseModel, ConfigDict, Field, field_validator +from otf_api.models.base import OtfItemBase, OtfListBase + ureg = pint.UnitRegistry() DEFAULT_WEIGHT_DIVIDERS = [55.0, 70.0, 85.0, 100.0, 115.0, 130.0, 145.0, 160.0, 175.0, 190.0, 205.0] @@ -98,7 +100,7 @@ def get_body_fat_percent_dividers_female(age: int) -> list[float]: return [0.0, 0.0, 0.0, 0.0] -class LeanBodyMass(BaseModel): +class LeanBodyMass(OtfItemBase): model_config: ConfigDict = ConfigDict(extra="ignore") left_arm: float = Field(..., alias="lbmOfLeftArm") left_leg: float = Field(..., alias="lbmOfLeftLeg") @@ -107,7 +109,7 @@ class LeanBodyMass(BaseModel): trunk: float = Field(..., alias="lbmOfTrunk") -class LeanBodyMassPercent(BaseModel): +class LeanBodyMassPercent(OtfItemBase): model_config: ConfigDict = ConfigDict(extra="ignore") left_arm: float = Field(..., alias="lbmPercentOfLeftArm") left_leg: float = Field(..., alias="lbmPercentOfLeftLeg") @@ -116,7 +118,7 @@ class LeanBodyMassPercent(BaseModel): trunk: float = Field(..., alias="lbmPercentOfTrunk") -class BodyFatMass(BaseModel): +class BodyFatMass(OtfItemBase): model_config: ConfigDict = ConfigDict(extra="ignore") control: float = Field(..., alias="bfmControl") left_arm: float = Field(..., alias="bfmOfLeftArm") @@ -126,7 +128,7 @@ class BodyFatMass(BaseModel): trunk: float = Field(..., alias="bfmOfTrunk") -class BodyFatMassPercent(BaseModel): +class BodyFatMassPercent(OtfItemBase): model_config: ConfigDict = ConfigDict(extra="ignore") left_arm: float = Field(..., alias="bfmPercentOfLeftArm") left_leg: float = Field(..., alias="bfmPercentOfLeftLeg") @@ -135,7 +137,7 @@ class BodyFatMassPercent(BaseModel): trunk: float = Field(..., alias="bfmPercentOfTrunk") -class TotalBodyWeight(BaseModel): +class TotalBodyWeight(OtfItemBase): model_config: ConfigDict = ConfigDict(extra="ignore") right_arm: float = Field(..., alias="tbwOfRightArm") left_arm: float = Field(..., alias="tbwOfLeftArm") @@ -144,7 +146,7 @@ class TotalBodyWeight(BaseModel): left_leg: float = Field(..., alias="tbwOfLeftLeg") -class IntraCellularWater(BaseModel): +class IntraCellularWater(OtfItemBase): model_config: ConfigDict = ConfigDict(extra="ignore") right_arm: float = Field(..., alias="icwOfRightArm") left_arm: float = Field(..., alias="icwOfLeftArm") @@ -153,7 +155,7 @@ class IntraCellularWater(BaseModel): left_leg: float = Field(..., alias="icwOfLeftLeg") -class ExtraCellularWater(BaseModel): +class ExtraCellularWater(OtfItemBase): model_config: ConfigDict = ConfigDict(extra="ignore") right_arm: float = Field(..., alias="ecwOfRightArm") left_arm: float = Field(..., alias="ecwOfLeftArm") @@ -162,7 +164,7 @@ class ExtraCellularWater(BaseModel): left_leg: float = Field(..., alias="ecwOfLeftLeg") -class ExtraCellularWaterOverTotalBodyWater(BaseModel): +class ExtraCellularWaterOverTotalBodyWater(OtfItemBase): model_config: ConfigDict = ConfigDict(extra="ignore") right_arm: float = Field(..., alias="ecwOverTBWOfRightArm") left_arm: float = Field(..., alias="ecwOverTBWOfLeftArm") @@ -171,7 +173,7 @@ class ExtraCellularWaterOverTotalBodyWater(BaseModel): left_leg: float = Field(..., alias="ecwOverTBWOfLeftLeg") -class BodyCompositionData(BaseModel): +class BodyCompositionData(OtfItemBase): member_uuid: str = Field(..., alias="memberUUId") member_id: str = Field(..., alias="memberId") scan_result_uuid: str = Field(..., alias="scanResultUUId") @@ -300,5 +302,5 @@ def body_fat_percent_relative_descriptor(self) -> BodyFatPercentIndicator: ) -class BodyCompositionList(BaseModel): +class BodyCompositionList(OtfListBase): data: list[BodyCompositionData] diff --git a/src/otf_api/models/responses/book_class.py b/src/otf_api/models/responses/book_class.py index 8a4706e..3fe6bbb 100644 --- a/src/otf_api/models/responses/book_class.py +++ b/src/otf_api/models/responses/book_class.py @@ -1,19 +1,21 @@ from datetime import datetime from typing import Any -from pydantic import BaseModel, Field +from pydantic import Field +from otf_api.models.base import OtfItemBase -class MemberProfile(BaseModel): + +class MemberProfile(OtfItemBase): is_latest_agreement_signed: bool = Field(..., alias="isLatestAgreementSigned") -class StudioProfiles(BaseModel): +class StudioProfiles(OtfItemBase): studio_id: int = Field(..., alias="studioId") is_franchise_agreement_enabled: int = Field(..., alias="isFranchiseAgreementEnabled") -class HomeStudio(BaseModel): +class HomeStudio(OtfItemBase): studio_uuid: str = Field(..., alias="studioUUId") studio_name: str = Field(..., alias="studioName") description: str @@ -28,7 +30,7 @@ class HomeStudio(BaseModel): studio_profiles: StudioProfiles = Field(..., alias="studioProfiles") -class MemberService(BaseModel): +class MemberService(OtfItemBase): member_service_id: int = Field(..., alias="memberServiceId") member_service_uuid: str = Field(..., alias="memberServiceUUId") service_name: str = Field(..., alias="serviceName") @@ -49,13 +51,13 @@ class MemberService(BaseModel): is_deleted: bool = Field(..., alias="isDeleted") -class ServiceItem(BaseModel): +class ServiceItem(OtfItemBase): service_id: int = Field(..., alias="serviceId") name: str member_service: MemberService = Field(..., alias="MemberService") -class Member(BaseModel): +class Member(OtfItemBase): member_id: int = Field(..., alias="memberId") member_uuid: str = Field(..., alias="memberUUId") cognito_id: str = Field(..., alias="cognitoId") @@ -107,7 +109,7 @@ class Member(BaseModel): notes: str -class Studio(BaseModel): +class Studio(OtfItemBase): studio_uuid: str = Field(..., alias="studioUUId") studio_name: str = Field(..., alias="studioName") description: str @@ -121,12 +123,12 @@ class Studio(BaseModel): cr_waitlist_flag_last_updated: datetime = Field(..., alias="crWaitlistFlagLastUpdated") -class Location(BaseModel): +class Location(OtfItemBase): location_id: int = Field(..., alias="locationId") location_uuid: str = Field(..., alias="locationUUId") -class Coach(BaseModel): +class Coach(OtfItemBase): coach_uuid: str = Field(..., alias="coachUUId") first_name: str = Field(..., alias="firstName") last_name: str = Field(..., alias="lastName") @@ -134,7 +136,7 @@ class Coach(BaseModel): name: str -class Class(BaseModel): +class Class(OtfItemBase): class_id: int = Field(..., alias="classId") class_uuid: str = Field(..., alias="classUUId") mbo_studio_id: int = Field(..., alias="mboStudioId") @@ -175,16 +177,16 @@ class Class(BaseModel): attributes: dict[str, Any] -class Class1(BaseModel): +class Class1(OtfItemBase): mbo_studio_id: int = Field(..., alias="mboStudioId") studio_uuid: str = Field(..., alias="studioUUId") -class CustomData(BaseModel): +class CustomData(OtfItemBase): otf_class: Class1 = Field(..., alias="class") -class SavedBooking(BaseModel): +class SavedBooking(OtfItemBase): class_booking_id: int = Field(..., alias="classBookingId") class_booking_uuid: str = Field(..., alias="classBookingUUId") studio_id: int = Field(..., alias="studioId") @@ -211,19 +213,19 @@ class SavedBooking(BaseModel): attributes: dict[str, Any] -class FieldModel(BaseModel): +class FieldModel(OtfItemBase): xsi_nil: str = Field(..., alias="xsiNil") -class FacilitySquareFeet(BaseModel): +class FacilitySquareFeet(OtfItemBase): field_: FieldModel -class TreatmentRooms(BaseModel): +class TreatmentRooms(OtfItemBase): field_: FieldModel -class Location1(BaseModel): +class Location1(OtfItemBase): site_id: str | Any = Field(..., alias="siteId") business_description: str | Any = Field(..., alias="businessDescription") additional_image_ur_ls: str | Any = Field(..., alias="additionalImageUrLs") @@ -247,38 +249,38 @@ class Location1(BaseModel): longitude: str -class MaxCapacity(BaseModel): +class MaxCapacity(OtfItemBase): field_: FieldModel | Any -class WebCapacity(BaseModel): +class WebCapacity(OtfItemBase): field_: FieldModel | Any -class TotalBookedWaitlist(BaseModel): +class TotalBookedWaitlist(OtfItemBase): field_: FieldModel | Any -class WebBooked(BaseModel): +class WebBooked(OtfItemBase): field_: FieldModel | Any -class SemesterId(BaseModel): +class SemesterId(OtfItemBase): field_: FieldModel | Any -class Program(BaseModel): +class Program(OtfItemBase): id: str name: str schedule_type: str = Field(..., alias="scheduleType") cancel_offset: str = Field(..., alias="cancelOffset") -class DefaultTimeLength(BaseModel): +class DefaultTimeLength(OtfItemBase): field_: FieldModel -class SessionType(BaseModel): +class SessionType(OtfItemBase): default_time_length: DefaultTimeLength = Field(..., alias="defaultTimeLength") program_id: str = Field(..., alias="programId") num_deducted: str = Field(..., alias="numDeducted") @@ -289,7 +291,7 @@ class SessionType(BaseModel): available_for_add_on: str = Field(..., alias="availableForAddOn") -class ClassDescription(BaseModel): +class ClassDescription(OtfItemBase): id: str name: str description: str @@ -300,7 +302,7 @@ class ClassDescription(BaseModel): session_type: SessionType = Field(..., alias="sessionType") -class Staff(BaseModel): +class Staff(OtfItemBase): email: str mobile_phone: str = Field(..., alias="mobilePhone") state: str @@ -318,25 +320,25 @@ class Staff(BaseModel): is_male: str = Field(..., alias="isMale") -class AgreementDate(BaseModel): +class AgreementDate(OtfItemBase): field_: FieldModel -class ReleasedBy(BaseModel): +class ReleasedBy(OtfItemBase): field_: FieldModel -class Liability(BaseModel): +class Liability(OtfItemBase): is_released: str = Field(..., alias="isReleased") agreement_date: AgreementDate = Field(..., alias="agreementDate") released_by: ReleasedBy = Field(..., alias="releasedBy") -class FirstAppointmentDate(BaseModel): +class FirstAppointmentDate(OtfItemBase): field_: FieldModel -class Client(BaseModel): +class Client(OtfItemBase): notes: str mobile_provider: str = Field(..., alias="mobileProvider") appointment_gender_preference: str = Field(..., alias="appointmentGenderPreference") @@ -369,7 +371,7 @@ class Client(BaseModel): member_uuid: str = Field(..., alias="memberUUId") -class MboClass(BaseModel): +class MboClass(OtfItemBase): class_schedule_id: str = Field(..., alias="classScheduleId") location: Location1 max_capacity: MaxCapacity = Field(..., alias="maxCapacity") @@ -394,12 +396,12 @@ class MboClass(BaseModel): client: Client -class MboResponseItem(BaseModel): +class MboResponseItem(OtfItemBase): class_booking_uuid: str | Any = Field(..., alias="classBookingUUId") action: str | Any otf_class: MboClass | Any = Field(..., alias="class") -class BookClass(BaseModel): +class BookClass(OtfItemBase): saved_bookings: list[SavedBooking] = Field(..., alias="savedBookings") mbo_response: list[MboResponseItem] = Field(..., alias="mboResponse") diff --git a/src/otf_api/models/responses/cancel_booking.py b/src/otf_api/models/responses/cancel_booking.py index b00479e..0262562 100644 --- a/src/otf_api/models/responses/cancel_booking.py +++ b/src/otf_api/models/responses/cancel_booking.py @@ -1,9 +1,11 @@ from datetime import datetime -from pydantic import BaseModel, Field +from pydantic import Field +from otf_api.models.base import OtfItemBase -class Studio(BaseModel): + +class Studio(OtfItemBase): studio_uuid: str = Field(..., alias="studioUUId") studio_name: str = Field(..., alias="studioName") description: str @@ -17,7 +19,7 @@ class Studio(BaseModel): cr_waitlist_flag_last_updated: datetime = Field(..., alias="crWaitlistFlagLastUpdated") -class Coach(BaseModel): +class Coach(OtfItemBase): coach_uuid: str = Field(..., alias="coachUUId") name: str first_name: str = Field(..., alias="firstName") @@ -25,7 +27,7 @@ class Coach(BaseModel): mbo_coach_id: int = Field(..., alias="mboCoachId") -class Class(BaseModel): +class Class(OtfItemBase): class_uuid: str = Field(..., alias="classUUId") name: str description: str @@ -40,7 +42,7 @@ class Class(BaseModel): coach: Coach -class HomeStudio(BaseModel): +class HomeStudio(OtfItemBase): studio_uuid: str = Field(..., alias="studioUUId") studio_name: str = Field(..., alias="studioName") description: str @@ -54,7 +56,7 @@ class HomeStudio(BaseModel): cr_waitlist_flag_last_updated: datetime = Field(..., alias="crWaitlistFlagLastUpdated") -class Member(BaseModel): +class Member(OtfItemBase): member_id: int = Field(..., alias="memberId") member_uuid: str = Field(..., alias="memberUUId") email: str @@ -67,7 +69,7 @@ class Member(BaseModel): home_studio: HomeStudio = Field(..., alias="homeStudio") -class CancelBooking(BaseModel): +class CancelBooking(OtfItemBase): class_booking_id: int = Field(..., alias="classBookingId") class_booking_uuid: str = Field(..., alias="classBookingUUId") studio_id: int = Field(..., alias="studioId") diff --git a/src/otf_api/models/responses/challenge_tracker_detail.py b/src/otf_api/models/responses/challenge_tracker_detail.py index 38b62d5..8143ac8 100644 --- a/src/otf_api/models/responses/challenge_tracker_detail.py +++ b/src/otf_api/models/responses/challenge_tracker_detail.py @@ -1,9 +1,9 @@ from datetime import datetime -from typing import Any +from typing import Any, ClassVar from pydantic import Field -from otf_api.models.base import OtfItemBase +from otf_api.models.base import OtfItemBase, OtfListBase class MetricEntry(OtfItemBase): @@ -64,5 +64,6 @@ class ChallengeTrackerDetail(OtfItemBase): challenge_histories: list[ChallengeHistory] = Field(..., alias="ChallengeHistories") -class ChallengeTrackerDetailList(OtfItemBase): +class ChallengeTrackerDetailList(OtfListBase): + collection_field: ClassVar[str] = "details" details: list[ChallengeTrackerDetail] diff --git a/src/otf_api/models/responses/favorite_studios.py b/src/otf_api/models/responses/favorite_studios.py index 8071240..b2ea96c 100644 --- a/src/otf_api/models/responses/favorite_studios.py +++ b/src/otf_api/models/responses/favorite_studios.py @@ -1,8 +1,9 @@ from datetime import datetime +from typing import ClassVar from pydantic import Field -from otf_api.models.base import OtfItemBase +from otf_api.models.base import OtfItemBase, OtfListBase class Location(OtfItemBase): @@ -94,7 +95,8 @@ class FavoriteStudio(OtfItemBase): studio_location: StudioLocation = Field(..., alias="studioLocation") -class FavoriteStudioList(OtfItemBase): +class FavoriteStudioList(OtfListBase): + collection_field: ClassVar[str] = "studios" studios: list[FavoriteStudio] @property diff --git a/src/otf_api/models/responses/lifetime_stats.py b/src/otf_api/models/responses/lifetime_stats.py index d422620..a48b958 100644 --- a/src/otf_api/models/responses/lifetime_stats.py +++ b/src/otf_api/models/responses/lifetime_stats.py @@ -1,6 +1,8 @@ from enum import Enum -from pydantic import BaseModel, Field +from pydantic import Field + +from otf_api.models.base import OtfItemBase class StatsTime(str, Enum): @@ -19,20 +21,20 @@ class StatsType(str, Enum): All = "allStats" -class OutStudioMixin(BaseModel): +class OutStudioMixin(OtfItemBase): walking_distance: float = Field(..., alias="walkingDistance") running_distance: float = Field(..., alias="runningDistance") cycling_distance: float = Field(..., alias="cyclingDistance") -class InStudioMixin(BaseModel): +class InStudioMixin(OtfItemBase): treadmill_distance: float = Field(..., alias="treadmillDistance") treadmill_elevation_gained: float = Field(..., alias="treadmillElevationGained") rower_distance: float = Field(..., alias="rowerDistance") rower_watt: float = Field(..., alias="rowerWatt") -class BaseStatsData(BaseModel): +class BaseStatsData(OtfItemBase): calories: float splat_point: float = Field(..., alias="splatPoint") total_black_zone: float = Field(..., alias="totalBlackZone") @@ -56,7 +58,7 @@ class AllStatsData(OutStudioMixin, InStudioMixin, BaseStatsData): pass -class OutStudioTimeStats(BaseModel): +class OutStudioTimeStats(OtfItemBase): last_year: OutStudioStatsData = Field(..., alias="lastYear") this_year: OutStudioStatsData = Field(..., alias="thisYear") last_month: OutStudioStatsData = Field(..., alias="lastMonth") @@ -66,7 +68,7 @@ class OutStudioTimeStats(BaseModel): all_time: OutStudioStatsData = Field(..., alias="allTime") -class InStudioTimeStats(BaseModel): +class InStudioTimeStats(OtfItemBase): last_year: InStudioStatsData = Field(..., alias="lastYear") this_year: InStudioStatsData = Field(..., alias="thisYear") last_month: InStudioStatsData = Field(..., alias="lastMonth") @@ -76,7 +78,7 @@ class InStudioTimeStats(BaseModel): all_time: InStudioStatsData = Field(..., alias="allTime") -class AllStatsTimeStats(BaseModel): +class AllStatsTimeStats(OtfItemBase): last_year: AllStatsData = Field(..., alias="lastYear") this_year: AllStatsData = Field(..., alias="thisYear") last_month: AllStatsData = Field(..., alias="lastMonth") @@ -86,7 +88,7 @@ class AllStatsTimeStats(BaseModel): all_time: AllStatsData = Field(..., alias="allTime") -class StatsResponse(BaseModel): +class StatsResponse(OtfItemBase): all_stats: AllStatsTimeStats = Field(..., alias="allStats") in_studio: InStudioTimeStats = Field(..., alias="inStudio") out_studio: OutStudioTimeStats = Field(..., alias="outStudio") diff --git a/src/otf_api/models/responses/member_purchases.py b/src/otf_api/models/responses/member_purchases.py index a39a69b..8502fe2 100644 --- a/src/otf_api/models/responses/member_purchases.py +++ b/src/otf_api/models/responses/member_purchases.py @@ -2,7 +2,7 @@ from pydantic import Field -from otf_api.models.base import OtfItemBase +from otf_api.models.base import OtfItemBase, OtfListBase class Location(OtfItemBase): @@ -131,5 +131,5 @@ class MemberPurchase(OtfItemBase): studio: Studio -class MemberPurchaseList(OtfItemBase): +class MemberPurchaseList(OtfListBase): data: list[MemberPurchase] diff --git a/src/otf_api/models/responses/out_of_studio_workout_history.py b/src/otf_api/models/responses/out_of_studio_workout_history.py index 1fff8fd..30b0714 100644 --- a/src/otf_api/models/responses/out_of_studio_workout_history.py +++ b/src/otf_api/models/responses/out_of_studio_workout_history.py @@ -2,7 +2,7 @@ from pydantic import Field -from otf_api.models.base import OtfItemBase +from otf_api.models.base import OtfItemBase, OtfListBase class WorkoutType(OtfItemBase): @@ -37,5 +37,5 @@ class OutOfStudioWorkoutHistory(OtfItemBase): max_heartrate: int = Field(..., alias="maxHeartrate") -class OutOfStudioWorkoutHistoryList(OtfItemBase): +class OutOfStudioWorkoutHistoryList(OtfListBase): data: list[OutOfStudioWorkoutHistory] diff --git a/src/otf_api/models/responses/performance_summary_detail.py b/src/otf_api/models/responses/performance_summary_detail.py index 460b0f2..2277414 100644 --- a/src/otf_api/models/responses/performance_summary_detail.py +++ b/src/otf_api/models/responses/performance_summary_detail.py @@ -1,7 +1,9 @@ -from pydantic import BaseModel, Field +from pydantic import Field +from otf_api.models.base import OtfItemBase -class ZoneTimeMinutes(BaseModel): + +class ZoneTimeMinutes(OtfItemBase): gray: int blue: int green: int @@ -9,7 +11,7 @@ class ZoneTimeMinutes(BaseModel): red: int -class HeartRate(BaseModel): +class HeartRate(OtfItemBase): max_hr: int peak_hr: int peak_hr_percent: int @@ -17,19 +19,19 @@ class HeartRate(BaseModel): avg_hr_percent: int -class PerformanceMetricFloat(BaseModel): +class PerformanceMetricFloat(OtfItemBase): display_value: float display_unit: str metric_value: float -class PerformanceMetricString(BaseModel): +class PerformanceMetricString(OtfItemBase): display_value: str display_unit: str metric_value: str -class BaseEquipment(BaseModel): +class BaseEquipment(OtfItemBase): avg_pace: PerformanceMetricString avg_speed: PerformanceMetricFloat max_pace: PerformanceMetricString @@ -50,12 +52,12 @@ class Rower(BaseEquipment): max_cadence: PerformanceMetricFloat -class EquipmentData(BaseModel): +class EquipmentData(OtfItemBase): treadmill: Treadmill rower: Rower -class Details(BaseModel): +class Details(OtfItemBase): calories_burned: int splat_points: int step_count: int @@ -65,12 +67,12 @@ class Details(BaseModel): equipment_data: EquipmentData -class Class(BaseModel): +class Class(OtfItemBase): starts_at_local: str name: str -class PerformanceSummaryDetail(BaseModel): +class PerformanceSummaryDetail(OtfItemBase): id: str details: Details ratable: bool diff --git a/src/otf_api/models/responses/performance_summary_list.py b/src/otf_api/models/responses/performance_summary_list.py index 955f85c..57f7684 100644 --- a/src/otf_api/models/responses/performance_summary_list.py +++ b/src/otf_api/models/responses/performance_summary_list.py @@ -1,6 +1,8 @@ +from typing import ClassVar + from pydantic import Field -from otf_api.models.base import OtfItemBase +from otf_api.models.base import OtfItemBase, OtfListBase class ZoneTimeMinutes(OtfItemBase): @@ -64,5 +66,6 @@ class PerformanceSummaryEntry(OtfItemBase): ratings: Ratings | None = None -class PerformanceSummaryList(OtfItemBase): +class PerformanceSummaryList(OtfListBase): + collection_field: ClassVar[str] = "summaries" summaries: list[PerformanceSummaryEntry] diff --git a/src/otf_api/models/responses/studio_detail.py b/src/otf_api/models/responses/studio_detail.py index 63f93c2..ab02f30 100644 --- a/src/otf_api/models/responses/studio_detail.py +++ b/src/otf_api/models/responses/studio_detail.py @@ -1,8 +1,9 @@ from datetime import datetime +from typing import ClassVar from pydantic import Field -from otf_api.models.base import OtfItemBase +from otf_api.models.base import OtfItemBase, OtfListBase class Country(OtfItemBase): @@ -107,5 +108,6 @@ class Pagination(OtfItemBase): total_pages: int = Field(..., alias="totalPages") -class StudioDetailList(OtfItemBase): +class StudioDetailList(OtfListBase): + collection_field: ClassVar[str] = "studios" studios: list[StudioDetail] diff --git a/src/otf_api/models/responses/studio_services.py b/src/otf_api/models/responses/studio_services.py index f25b161..a037f55 100644 --- a/src/otf_api/models/responses/studio_services.py +++ b/src/otf_api/models/responses/studio_services.py @@ -2,7 +2,7 @@ from pydantic import Field -from otf_api.models.base import OtfItemBase +from otf_api.models.base import OtfItemBase, OtfListBase class Currency(OtfItemBase): @@ -53,5 +53,5 @@ class StudioService(OtfItemBase): studio: Studio -class StudioServiceList(OtfItemBase): +class StudioServiceList(OtfListBase): data: list[StudioService]