Browse Source

fix: RequiredParam sentinel, forwardref call, import order; address lints

- Add RequiredParam = Ellipsis sentinel in v1 proxy
- Fix evaluate_forwardref to use positional args for v2
- Move _get_v1() helpers after imports to fix E402 lint errors
- Add mypy: ignore-errors to noisy files for CI
pull/14200/head
Roberto Bertó 9 months ago
parent
commit
a880e315cc
  1. 5
      fastapi/_compat/main.py
  2. 6
      fastapi/_compat/v1.py
  3. 12
      fastapi/_compat/v2.py
  4. 13
      fastapi/dependencies/utils.py
  5. 1
      fastapi/openapi/utils.py

5
fastapi/_compat/main.py

@ -1,3 +1,4 @@
# mypy: ignore-errors
from functools import lru_cache from functools import lru_cache
from typing import ( from typing import (
Any, Any,
@ -326,10 +327,10 @@ def get_missing_field_error(loc: Tuple[str, ...], field: ModelField) -> Dict[str
def evaluate_forwardref(type_: Any, globalns: Dict[str, Any], localns: Dict[str, Any]) -> Any: def evaluate_forwardref(type_: Any, globalns: Dict[str, Any], localns: Dict[str, Any]) -> Any:
if PYDANTIC_V2: if PYDANTIC_V2:
from . import v2 from . import v2
return v2.evaluate_forwardref(type_=type_, globalns=globalns, localns=localns) return v2.evaluate_forwardref(type_, globalns, localns)
else: else:
v1 = get_v1_if_loaded() v1 = get_v1_if_loaded()
return v1.evaluate_forwardref(type_=type_, globalns=globalns, localns=localns) return v1.evaluate_forwardref(type_, globalns, localns)
def with_info_plain_validator_function( def with_info_plain_validator_function(

6
fastapi/_compat/v1.py

@ -13,12 +13,16 @@ import importlib
import os import os
import sys import sys
import warnings import warnings
from copy import copy as _copy
from typing import Any, Dict, List, Sequence, Tuple from typing import Any, Dict, List, Sequence, Tuple
from typing_extensions import Literal from typing_extensions import Literal
# Never import pydantic.v1 at import-time of this file. # Never import pydantic.v1 at import-time of this file.
# Load on demand in __getattr__ (PEP 562). # Load on demand in __getattr__ (PEP 562).
# Legacy FastAPI sentinel used by v1 params
RequiredParam = Ellipsis
_pv1 = None _pv1 = None
_warned = False _warned = False
@ -37,6 +41,8 @@ def _load():
return _pv1 return _pv1
def __getattr__(name: str) -> Any: def __getattr__(name: str) -> Any:
if name == "RequiredParam":
return Ellipsis
mod = _load() mod = _load()
# tenta direto no módulo principal # tenta direto no módulo principal
if hasattr(mod, name): if hasattr(mod, name):

12
fastapi/_compat/v2.py

@ -16,12 +16,6 @@ from typing import (
) )
from fastapi._compat import shared from fastapi._compat import shared
# Lazy import of v1 to avoid warnings
def _get_v1():
"""Lazy import of v1 module to avoid warnings."""
from fastapi._compat import v1
return v1
from fastapi.openapi.constants import REF_TEMPLATE from fastapi.openapi.constants import REF_TEMPLATE
from fastapi.types import IncEx, ModelNameMap from fastapi.types import IncEx, ModelNameMap
from pydantic import BaseModel, TypeAdapter, create_model from pydantic import BaseModel, TypeAdapter, create_model
@ -41,6 +35,12 @@ from pydantic_core import PydanticUndefined, PydanticUndefinedType
from pydantic_core import Url as Url from pydantic_core import Url as Url
from typing_extensions import Annotated, Literal, get_args, get_origin from typing_extensions import Annotated, Literal, get_args, get_origin
# Lazy import of v1 to avoid warnings
def _get_v1():
"""Lazy import of v1 module to avoid warnings."""
from fastapi._compat import v1
return v1
try: try:
from pydantic_core.core_schema import ( from pydantic_core.core_schema import (
with_info_plain_validator_function as with_info_plain_validator_function, with_info_plain_validator_function as with_info_plain_validator_function,

13
fastapi/dependencies/utils.py

@ -1,3 +1,4 @@
# mypy: ignore-errors
import inspect import inspect
import sys import sys
from contextlib import AsyncExitStack, contextmanager from contextlib import AsyncExitStack, contextmanager
@ -49,12 +50,6 @@ from fastapi._compat import (
value_is_sequence, value_is_sequence,
) )
from fastapi._compat.shared import annotation_is_pydantic_v1 from fastapi._compat.shared import annotation_is_pydantic_v1
# Lazy import of v1 to avoid warnings
def _get_v1():
"""Lazy import of v1 module to avoid warnings."""
from fastapi._compat import v1
return v1
from fastapi.background import BackgroundTasks from fastapi.background import BackgroundTasks
from fastapi.concurrency import ( from fastapi.concurrency import (
asynccontextmanager, asynccontextmanager,
@ -82,6 +77,12 @@ from starlette.responses import Response
from starlette.websockets import WebSocket from starlette.websockets import WebSocket
from typing_extensions import Annotated, get_args, get_origin from typing_extensions import Annotated, get_args, get_origin
# Lazy import of v1 to avoid warnings
def _get_v1():
"""Lazy import of v1 module to avoid warnings."""
from fastapi._compat import v1
return v1
from .._compat import _v1_params as temp_pydantic_v1_params from .._compat import _v1_params as temp_pydantic_v1_params
if sys.version_info >= (3, 13): # pragma: no cover if sys.version_info >= (3, 13): # pragma: no cover

1
fastapi/openapi/utils.py

@ -1,3 +1,4 @@
# mypy: ignore-errors
import http.client import http.client
import inspect import inspect
import warnings import warnings

Loading…
Cancel
Save