Как из Pydantic все собранные ошибки корректно передать в json файл
Итак у меня есть модель для валидации:
class ElementModel(BaseModel):
id: str
type: str
atr1: Optional[float]
atr2: Optional[float]
atr3: Optional[float]
atr4: Optional[float]
atr5: Optional[float]
@root_validator
def check_req_attrs(cls, values):
el_type = values.get('type')
el_attrs = set(key for key in values.keys() if values[key] != None)
if el_type == 'value1':
req_attrs = {'atr1', 'atr2'}
req_attrs.difference_update(el_attrs)
if req_attrs:
raise ValueError(f"{req_attrs} are missing")
return values
class MyModel(BaseModel):
uniqe_uuid: str
elements: List[ElementModel]
Все работает нормально. Но есть два вопроса:
- Мне нужно ошибки выявленные при валидации передать в формате json файла. Сейчас я делаю так:
try:
my_model = MyModel(uniqe_uuid = 'uniqe_uuid', elements=elements_list)
except ValueError as e:
errors_dict = json.loads(e.json())
with open(os.path.join(os.path.dirname(__file__), 'report.json'), 'w') as file:
json.dump(errors_dict, file, indent=2, sort_keys=True)
и меня напрягает что приходится переводить объект ValueError сначала в строку, потом в словарь, а потом уже в json. Есть более правильный способ внутри pydantic?
- При работе @root_validator выявленная ошибка после перевода в json формат отображается так:
{
"loc": [
"elements",
0,
"__root__"
],
"msg": "{'atr1'} parameters are missing",
"type": "value_error"
}
А мне нужно чтобы отсутствующие обязательные поля прописывались вместо "root". Как например они прописываются если не проходит валидация внутри класса:
{
"loc": [
"elements",
2,
"id"
],
"msg": "field required",
"type": "value_error.missing"
}
Здесь пишется именно отсутствующее поле "id"
Заранее благодарен!)