Как работать со вложенностями в pydantic?

Рейтинг: -1Ответов: 1Опубликовано: 28.05.2023

Я проводила тест данного JSON https://reqres.in/api/users?page=2 и у меня вылезает данная ошибка:(IndexError: tuple index out of range)ошибка: IndexError: tuple index out of range

Я искала решение, задавала кучу вопросов, но так и не смогла решить эту проблему, сейчас я покажу свой код.

Составленная мной pydantic модель:

from pydantic import BaseModel


class Suport(BaseModel):
    url: str
    text: str


class Users(BaseModel):
    id: int
    email: str
    first_name: str
    last_name: str
    avatar: str


class Post(BaseModel):
    page: int
    per_page: int
    total: int
    total_pages: int
    data: list[Users]
    support: dict[Suport]

Класс с валидацией и проверкой статуса кода:

import global_enus
from post import Post
from pydantic import parse_obj_as

class Responce:
    def __init__(self, responce):
        self.responce = responce
        self.responce_json = responce.json()
        self.responce_status = responce.status_code

    def validate(self):
        if isinstance (self.responce_json, list):
            parse_obj_as(list[Post], self.responce_json)
        else:
            parse_obj_as(list[Post], self.responce_json)
        return self

    def assert_status_code(self, status_code):
        if isinstance(self.responce_status, list):
            assert status_code in self.responce_status, global_enus.error_message.WRONG_CODE
        else:
            assert status_code == self.responce_status, global_enus.error_message.WRONG_CODE

Мой мейн файл, в котором и происходит тест:

import requests
from responce_classes import Responce
from configuration import SERVICE_URL

def test_getting_post():
   r = requests.get(url=SERVICE_URL)
   responce = Responce(r)
   responce.assert_status_code(200)
   responce.validate()

Ошибка возникает именно при валидации, то есть, когда я отрабатываю тест только на проверку статус кода он всё отрабатывает. Суть вопроса в следующем: как в pydantic работать с ситуацией когда значение это словарь или другой список? Помогите, пожалуйста, разобраться с данной проблемой, а то на всём белом свете я так и не нашла ответа.

Ответы

▲ 0Принят

Итоговым решением на мой вопрос было:

Заменить в коде support: dict[Suport] на support: Suport И изменить list[Post] на просто Post.

Большое спасибо за помощь: @andreymal