Возможно ли иметь произвольные имена ключей в pydanti c? - PullRequest
1 голос
/ 05 августа 2020

Я пытаюсь имитировать аналогичное поведение интерфейса машинописных текстов с произвольными именами ключей для модели pydantic, но у меня возникают некоторые проблемы.

Учтите следующее в TS: *

Возможно ли добиться этого в pydanti c?

Вот мой пример кода python:

from pydantic import BaseModel, parse_obj_as
from typing import Optional

class Values(BaseModel):
    Value: str
    Type: str

class MessageAttributes(BaseModel):
    ArbitraryKey: Optional[Values]


class Mymodel(BaseModel):
    MessageAttributes: Optional[MessageAttributes]


data = {"MessageAttributes": {"ArbitraryKey": {"Type": "String", "Value": "TestString"}}}

parsed = parse_obj_as(Mymodel, data)

print(parsed.MessageAttributes.ArbitraryKey.Value)
# TestString

В этом примере свойство ArbitraryKey может быть чем угодно. Но я не могу жестко запрограммировать все возможные имена клавиш. Например, вместо ArbitraryKey, что, если бы имя ключа было SomeTestKey?

Я знаю, что могу использовать extra = 'allow в Config, но это не даст синтаксиса точки, который я могу получить, когда используя parse_obj_as

Мой вопрос, если возможно, могу ли я сделать что-то подобное [name: string] в pydanti c для имен свойств?

1 Ответ

0 голосов
/ 06 августа 2020

После обсуждения Github , это именно то, на что я надеялся.

from pydantic import BaseModel, parse_obj_as
from typing import Dict, Optional

from pydantic import parse

class Values(BaseModel):
    Value: str
    Type: str


class Mymodel(BaseModel):
    MessageAttributes: Optional[Dict[str, Values]]


data = {"MessageAttributes": {"ArbitraryKey": {"Type": "String", "Value": "TestString"}}}

parsed = Mymodel.parse_obj(data)

print(parsed)
print(parsed.MessageAttributes['ArbitraryKey'].Type)
...