Wie löst man mehrere und verschachtelte Diskriminatoren mit Pydantic v2?
Posted: 27 Dec 2024, 14:33
Ich versuche, Slack-Interaktionsnutzlasten zu validieren, die wie folgt aussehen:
Ich verwende drei verschiedene Modelle für Nutzlasten, die an denselben Interaktionsendpunkt gelangen:
und ich hatte vor,
zu verwenden
funktioniert aber nicht mit v2.10.4.
Muss ich sie manuell versenden oder gibt es eine Möglichkeit, das Problem mit Pydantic zu lösen?
Code: Select all
type: block_actions
container:
type: view
...
Code: Select all
type: block_actions
container:
type: message
...
Code: Select all
type: view_submission
...
Code: Select all
class MessageContainer(BaseModel):
type: Literal["message"]
...
class ViewContainer(BaseModel):
type: Literal["view"]
...
class MessageActions(ActionsBase):
type: Literal["block_actions"]
container: MessageContainer
...
class ViewActions(ActionsBase):
type: Literal["block_actions"]
container: ViewContainer
...
class ViewSubmission(BaseModel):
type: Literal["view_submission"]
...
zu verwenden
Code: Select all
BlockActions = Annotated[
MessageActions | ViewActions,
Field(discriminator="container.type"),
]
SlackInteraction = Annotated[
ViewSubmission | BlockActions,
Field(discriminator="type"),
]
SlackInteractionAdapter = TypeAdapter(SlackInteraction)
Muss ich sie manuell versenden oder gibt es eine Möglichkeit, das Problem mit Pydantic zu lösen?