Определите ограничения для различных моделей схемы JSON в списке.Python

Программы на Python
Anonymous
Определите ограничения для различных моделей схемы JSON в списке.

Сообщение Anonymous »

У меня есть JSON со структурой, похожей на показанную ниже. Список порогов представляет объекты, тип которых может быть «type»: «upper_limit» или «type»: «range». Обратите внимание, что значение «target» должно быть целым числом или числом с плавающей запятой в зависимости от типа объекта.

Код: Выделить всё

{
"name": "blah",
"project": "blah blah",
"threshold": [
{
"id": "234asdflkj",
"group": "walkers",
"type": "upper_limit",
"target": 20,
"var": "distance"
},
{
"id": "asdf34asf2654",
"group": "runners",
"type": "range",
"target": 1.7,
"var": "speed"
}
]
}
Модели Pydantic для создания схемы JSON для вышеуказанных данных приведены ниже:

Код: Выделить всё

class ThresholdType(str, Enum):
upper_limit = "upper_limit"
range = "range"

class ThresholdUpperLimit(BaseModel):
id: str
group: str
type: ThresholdType = "upper_limit"
target: int = Field(gt=2, le=20)
var: str

class ThresholdRange(BaseModel):
id: str
group: str
type: ThresholdType = "range"
target: float = Field(gt=0, lt=10)
var: str

class Campaign(BaseModel):
name: str
project: str
threshold: list[ThresholdUpperLimit | ThresholdRange]
Модели проверяют JSON, но ограничения для целевого значения для этого типа игнорируются. Например, если пороговый объект содержит "type": "range", "target": 12, тогда никаких ошибок не выдается, поскольку он анализируется как целое число и, следовательно, ограничения определяются ThresholdUpperLimit используются; но следует использовать ограничения, определенные ThresholdRange, поскольку типом является «диапазон». Есть какие-нибудь предложения о том, как правильно с этим справиться?


Подробнее здесь: https://stackoverflow.com/questions/788 ... -in-a-list

Вернуться в «Python»