From 1e32fe0e6471aed006dd408710a7a8be47b71174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Fri, 10 Oct 2025 15:08:13 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=85=20Run=20Pydantic=20v1=20tests=20only?= =?UTF-8?q?=20on=20Python=20<=203.14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_compat_params_v1.py | 9 +++++++-- tests/test_pydantic_v1_v2_01.py | 8 ++++++-- tests/test_pydantic_v1_v2_list.py | 8 ++++++-- tests/test_pydantic_v1_v2_mixed.py | 8 ++++++-- tests/test_pydantic_v1_v2_multifile/test_multifile.py | 9 +++++++-- tests/test_pydantic_v1_v2_noneable.py | 8 ++++++-- tests/utils.py | 6 ++++++ 7 files changed, 44 insertions(+), 12 deletions(-) diff --git a/tests/test_compat_params_v1.py b/tests/test_compat_params_v1.py index 6b055d2c2..2044f088d 100644 --- a/tests/test_compat_params_v1.py +++ b/tests/test_compat_params_v1.py @@ -1,6 +1,13 @@ +import sys from typing import List, Optional import pytest + +from tests.utils import pydantic_snapshot, skip_module_if_py_gte_314 + +if sys.version_info > (3, 13): + skip_module_if_py_gte_314() + from fastapi import FastAPI from fastapi._compat._params_v1 import Body, Cookie, File, Form, Header, Path, Query from fastapi._compat.v1 import BaseModel @@ -8,8 +15,6 @@ from fastapi.testclient import TestClient from inline_snapshot import snapshot from typing_extensions import Annotated -from tests.utils import pydantic_snapshot - class Item(BaseModel): name: str diff --git a/tests/test_pydantic_v1_v2_01.py b/tests/test_pydantic_v1_v2_01.py index 91f071ef1..e97f9b6c1 100644 --- a/tests/test_pydantic_v1_v2_01.py +++ b/tests/test_pydantic_v1_v2_01.py @@ -1,12 +1,16 @@ +import sys from typing import Any, List, Union +from tests.utils import pydantic_snapshot, skip_module_if_py_gte_314 + +if sys.version_info > (3, 13): + skip_module_if_py_gte_314() + from fastapi import FastAPI from fastapi._compat.v1 import BaseModel from fastapi.testclient import TestClient from inline_snapshot import snapshot -from tests.utils import pydantic_snapshot - class SubItem(BaseModel): name: str diff --git a/tests/test_pydantic_v1_v2_list.py b/tests/test_pydantic_v1_v2_list.py index 3ec315d51..0ffd3547a 100644 --- a/tests/test_pydantic_v1_v2_list.py +++ b/tests/test_pydantic_v1_v2_list.py @@ -1,12 +1,16 @@ +import sys from typing import Any, List, Union +from tests.utils import pydantic_snapshot, skip_module_if_py_gte_314 + +if sys.version_info > (3, 13): + skip_module_if_py_gte_314() + from fastapi import FastAPI from fastapi._compat.v1 import BaseModel from fastapi.testclient import TestClient from inline_snapshot import snapshot -from tests.utils import pydantic_snapshot - class SubItem(BaseModel): name: str diff --git a/tests/test_pydantic_v1_v2_mixed.py b/tests/test_pydantic_v1_v2_mixed.py index 1f866088d..eae3cec65 100644 --- a/tests/test_pydantic_v1_v2_mixed.py +++ b/tests/test_pydantic_v1_v2_mixed.py @@ -1,13 +1,17 @@ +import sys from typing import Any, List, Union +from tests.utils import pydantic_snapshot, skip_module_if_py_gte_314 + +if sys.version_info > (3, 13): + skip_module_if_py_gte_314() + from fastapi import FastAPI from fastapi._compat.v1 import BaseModel from fastapi.testclient import TestClient from inline_snapshot import snapshot from pydantic import BaseModel as NewBaseModel -from tests.utils import pydantic_snapshot - class SubItem(BaseModel): name: str diff --git a/tests/test_pydantic_v1_v2_multifile/test_multifile.py b/tests/test_pydantic_v1_v2_multifile/test_multifile.py index 65238b006..6cd921e76 100644 --- a/tests/test_pydantic_v1_v2_multifile/test_multifile.py +++ b/tests/test_pydantic_v1_v2_multifile/test_multifile.py @@ -1,9 +1,14 @@ +import sys + +from tests.utils import pydantic_snapshot, skip_module_if_py_gte_314 + +if sys.version_info > (3, 13): + skip_module_if_py_gte_314() + from dirty_equals import IsPartialDict from fastapi.testclient import TestClient from inline_snapshot import snapshot -from tests.utils import pydantic_snapshot - from .main import app client = TestClient(app) diff --git a/tests/test_pydantic_v1_v2_noneable.py b/tests/test_pydantic_v1_v2_noneable.py index 137d164be..b9bec6dc2 100644 --- a/tests/test_pydantic_v1_v2_noneable.py +++ b/tests/test_pydantic_v1_v2_noneable.py @@ -1,13 +1,17 @@ +import sys from typing import Any, List, Union +from tests.utils import pydantic_snapshot, skip_module_if_py_gte_314 + +if sys.version_info > (3, 13): + skip_module_if_py_gte_314() + from fastapi import FastAPI from fastapi._compat.v1 import BaseModel from fastapi.testclient import TestClient from inline_snapshot import snapshot from pydantic import BaseModel as NewBaseModel -from tests.utils import pydantic_snapshot - class SubItem(BaseModel): name: str diff --git a/tests/utils.py b/tests/utils.py index f11ce9e2c..096618c49 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -15,6 +15,12 @@ needs_pydanticv2 = pytest.mark.skipif(not PYDANTIC_V2, reason="requires Pydantic needs_pydanticv1 = pytest.mark.skipif(PYDANTIC_V2, reason="requires Pydantic v1") +def skip_module_if_py_gte_314(): + """Skip entire module on Python 3.14+ at import time.""" + if sys.version_info > (3, 13): + pytest.skip("requires python3.13-", allow_module_level=True) + + def pydantic_snapshot( *, v2: Snapshot,