Wie löst man mehrere und verschachtelte Diskriminatoren mit Pydantic v2?Python

Python-Programme
Anonymous
 Wie löst man mehrere und verschachtelte Diskriminatoren mit Pydantic v2?

Post by Anonymous »

Ich versuche, Slack-Interaktionsnutzlasten zu validieren, die wie folgt aussehen:

Code: Select all

type: block_actions
container:
type: view
...

Code: Select all

type: block_actions
container:
type: message
...

Code: Select all

type: view_submission
...
Ich verwende drei verschiedene Modelle für Nutzlasten, die an denselben Interaktionsendpunkt gelangen:

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"]
...
und ich hatte vor,
zu verwenden

Code: Select all

BlockActions = Annotated[
MessageActions | ViewActions,
Field(discriminator="container.type"),
]
SlackInteraction = Annotated[
ViewSubmission | BlockActions,
Field(discriminator="type"),
]
SlackInteractionAdapter = TypeAdapter(SlackInteraction)
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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post