Add default values and validators for benefit_edges and drop_campaigns_in_progress fields

This commit is contained in:
Joakim Hellsén 2026-01-06 21:23:56 +01:00
commit 984b0e5fee
No known key found for this signature in database
3 changed files with 324 additions and 2 deletions

View file

@ -170,7 +170,7 @@ class TimeBasedDropSchema(BaseModel):
required_subs: int = Field(alias="requiredSubs")
start_at: str | None = Field(alias="startAt")
end_at: str | None = Field(alias="endAt")
benefit_edges: list[DropBenefitEdgeSchema] = Field(alias="benefitEdges")
benefit_edges: list[DropBenefitEdgeSchema] = Field(default=[], alias="benefitEdges")
type_name: Literal["TimeBasedDrop"] = Field(alias="__typename")
# Inventory-specific fields
precondition_drops: None = Field(default=None, alias="preconditionDrops")
@ -185,6 +185,19 @@ class TimeBasedDropSchema(BaseModel):
"populate_by_name": True,
}
@field_validator("benefit_edges", mode="before")
@classmethod
def handle_null_benefit_edges(cls, v: list | None) -> list:
"""Convert null benefitEdges to empty list.
Args:
v: The raw benefit_edges value (list or None).
Returns:
Empty list if None, otherwise the list itself.
"""
return v or []
class DropCampaignSchema(BaseModel):
"""Schema for Twitch DropCampaign objects.
@ -222,7 +235,7 @@ class DropCampaignSchema(BaseModel):
class InventorySchema(BaseModel):
"""Schema for the inventory field in Inventory operation responses."""
drop_campaigns_in_progress: list[DropCampaignSchema] = Field(alias="dropCampaignsInProgress")
drop_campaigns_in_progress: list[DropCampaignSchema] = Field(default=[], alias="dropCampaignsInProgress")
type_name: Literal["Inventory"] = Field(alias="__typename")
# gameEventDrops field is present in Inventory but we don't process it yet
game_event_drops: list | None = Field(default=None, alias="gameEventDrops")
@ -234,6 +247,19 @@ class InventorySchema(BaseModel):
"populate_by_name": True,
}
@field_validator("drop_campaigns_in_progress", mode="before")
@classmethod
def handle_null_campaigns(cls, v: list | None) -> list:
"""Convert null dropCampaignsInProgress to empty list.
Args:
v: The raw drop_campaigns_in_progress value (list or None).
Returns:
Empty list if None, otherwise the list itself.
"""
return v or []
class CurrentUserSchema(BaseModel):
"""Schema for Twitch User objects.