Я не могу ничего изменить в структуре таблицы БД. .
Мой текущий код:
Код: Выделить всё
class PageViewsRangeSchema(BaseWrite):
"""BaseWrite just provides config to exclude extra fields
"""
# These constraints are not needed since this is an internal Schema, but it is good practice to have them
pages_viewed_range: Annotated[str,
StringConstraints(strip_whitespace=True, min_length=3, max_length=64)
] = Field()
class PageViewsSchemaWrite(BaseWrite):
# PageViews is an enum that is discriminated against
in_type: Literal[PageViews] = Field(exclude=True)
minimum_views: NonNegativeInt = Field()
maximum_views: NonNegativeInt = Field()
@model_validator(mode="after")
def validate_page_viewed_range(self) -> PageViewsRangeSchema:
if self.minimum_views > self.maximum_views:
raise ValueError("Error here.")
# Cannot use a model_serializer here because it is applied and shared
# amongst all Schemas. The DB expects a range of min-max, but that is a bad user experience.
return PageViewsRangeSchema(pages_viewed_range=f"{self.minimum_views}-{self.maximum_views}")
Однако, когда я пишу модульные тесты, я обнаружил, что это «не просто работает». ." Что бы я ни делал, я не могу заставить модульный тест возвращать экземпляр PageViewsRangeSchema, как это происходит при фактическом запуске кода.
Пример моих тестов выглядит следующим образом. :
Код: Выделить всё
schema = make_target_schema(
schema=PageViewsSchemaWrite,
in_type=PageViews,
minimum_views=1,
maximum_views=5)
# me trying to see if it works by dumping... It doesn't
dumped_schema = schema.model_dump(by_alias=True)
assert schema.pages_viewed_range == "1-5"
Я попробовал использовать model_serializer для этого случая. Однако model_serializer используется всеми схемами, что приводит к сбоям в процессе.
Я ожидал, что сериализатор не будет использоваться совместно.
Пример текущей реализации приведен выше. Для этого я ожидаю, что после проверки модели будет возвращена другая схема. Это верно на практике, но не во время модульного тестирования.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -validator
Мобильная версия