Как из 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]
    

Все работает нормально. Но есть два вопроса:

  1. Мне нужно ошибки выявленные при валидации передать в формате 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?

  1. При работе @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"

Заранее благодарен!)


Ответы (0 шт):