failed CONTEXT NO_PATCH UNSUBMITTED agent_error ยท 21 tool calls ยท 60 s ยท fastapi/fastapi
๐ Fix separation of schemas with nested models introduced in 0.119.0 ๐ Fix separation of schemas with nested models introduced in 0.119.0 This should fix / related to https://github.com/fastapi/fastapi/issues/14247 (https://github.com/fastapi/fastapi/discussions/14177)
| # | Tool | Arguments | Result |
|---|---|---|---|
| 1 | run_command | {
"command": "grep -rn \"separation of schemas\" ."
} | {"status": "error", "error_type": "CommandError", "error_message": "", "details": {"stdout": "", "stderr": "", "exit_code": 1}}full{"status": "error", "error_type": "CommandError", "error_message": "", "details": {"stdout": "", "stderr": "", "exit_code": 1}} |
| 2 | run_command | {
"command": "grep -rn \"0.119.0\" ."
} | {"status": "ok", "stdout": "./docs/de/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md:19:Wenn Sie eine \u00e4ltere FastAPI-App mit Pydantic v1 haben, zeifull{"status": "ok", "stdout": "./docs/de/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md:19:Wenn Sie eine \u00e4ltere FastAPI-App mit Pydantic v1 haben, zeige ich Ihnen hier, wie Sie sie zu Pydantic v2 migrieren, und die **neuen Features in FastAPI 0.119.0**, die Ihnen bei einer schrittweisen Migration helfen.\n./docs/de/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md:55:Seit FastAPI 0.119.0 gibt es au\u00dferdem eine teilweise Unterst\u00fctzung f\u00fcr Pydantic v1 innerhalb von Pydantic v2, um die Migration auf v2 zu erleichtern.\n./docs/en/docs/release-notes.md:61:## 0.119.0\n./docs/en/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md:19:If you have an old FastAPI app with Pydantic v1, here I'll show you how to migrate it to Pydantic v2, and the **new features in FastAPI 0.119.0** to help you with a gradual migration.\n./docs/en/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md:55:Since FastAPI 0.119.0, there's also partial support for Pydantic v1 from inside of Pydantic v2, to facilitate the migration to v2.\n", "stderr": "", "exit_code": 0} |
| 3 | run_command | {
"command": "grep -rn \"14247\" ."
} | {"status": "ok", "stdout": "./docs/en/docs/img/sponsors/doist-banner.svg:5:<path d=\"M36.4366 -5.93745C36.4538 -6.0756 36.4433 -6.21716 36.4483 -6.37084L37.1813full{"status": "ok", "stdout": "./docs/en/docs/img/sponsors/doist-banner.svg:5:<path d=\"M36.4366 -5.93745C36.4538 -6.0756 36.4433 -6.21716 36.4483 -6.37084L37.1813 -7.07956L37.5635 -6.54123L38.7134 -6.53909C38.7199 -6.93103 38.7074 -7.28321 38.7087 -7.63372C38.8779 -7.64081 39.0489 -7.66172 39.2319 -7.6671C39.2815 -8.06773 39.3364 -8.3976 39.1667 -8.83943C39.0239 -8.36618 38.6254 -8.09289 38.7209 -7.61817C38.448 -7.68003 38.4105 -7.26387 38.1669 -7.33613C37.863 -7.37378 37.7833 -7.63614 37.6019 -7.7568C37.619 -7.89495 37.5912 -8.01066 37.6791 -8.15406C37.9273 -8.57218 38.1859 -8.96096 38.1836 -9.5083C38.1797 -9.92959 38.3949 -10.4219 38.7883 -10.6537C39.6338 -11.1381 40.0233 -11.7912 40.1708 -12.7548C40.2479 -13.2642 40.8846 -13.6482 40.9771 -14.282C41.369 -14.3877 41.6553 -14.6608 41.9312 -14.9633C42.244 -14.7703 42.5118 -14.5547 42.4036 -14.0211L43.2349 -14.8439L43.2326 -15.3912C43.5222 -15.8042 44.0676 -16.0171 44.124 -16.5852C44.7006 -16.598 44.7432 -17.1678 44.9794 -17.4892C45.2673 -17.8884 45.6728 -18.1047 45.9953 -18.4435C46.3178 -18.7823 46.6525 -19.1054 47.006 -19.4684C47.4084 -19.4326 47.7448 -19.6574 48.1003 -19.8098L48.5012 -19.5357C48.7326 -19.479 48.8067 -19.6241 48.9257 -19.6794C49.3882 -19.9027 48.9352 -20.548 49.4149 -20.7971L51.2221 -21.3447L52.4328 -22.6255C52.8195 -22.6898 53.1289 -22.3569 53.3429 -22.3865C54.446 -22.5724 55.5874 -22.5011 56.6488 -22.9167C56.8697 -23.0015 56.8108 -23.2053 56.8641 -23.4091C57.3196 -23.6893 57.9884 -23.1996 58.3814 -23.7681C58.5214 -23.6526 58.6079 -23.4455 58.91 -23.5063C59.2069 -23.6378 59.0768 -24.1729 59.4858 -24.3046C60.432 -24.3557 61.3224 -24.8626 62.3155 -24.6133C62.5469 -24.5566 62.4781 -24.3407 62.5283 -24.1802C62.7116 -23.9611 62.9704 -24.1254 63.2018 -24.0686L63.6571 -24.5734L67.4015 -25.1334C67.5829 -25.0127 68.0008 -24.989 68.21 -24.7527C69.6995 -25.2274 70.9554 -24.7212 72.4755 -24.084L74.019 -24.0892L74.7472 -22.947C75.8675 -23.1588 76.8782 -22.5987 78.006 -22.3047L78.7683 -21.5511L80.2273 -21.5527C80. |
| 4 | run_command | {
"command": "grep -rn \"separation of schemas\" fastapi/"
} | {"status": "error", "error_type": "CommandError", "error_message": "", "details": {"stdout": "", "stderr": "", "exit_code": 1}}full{"status": "error", "error_type": "CommandError", "error_message": "", "details": {"stdout": "", "stderr": "", "exit_code": 1}} |
| 5 | run_command | {
"command": "grep -rn \"nested\" fastapi/ | grep \"schema\" | head -20"
} | {"status": "ok", "stdout": "fastapi/_compat/v1.py:177: m_schema, m_definitions, m_nested_models = model_process_schema(\n", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": "fastapi/_compat/v1.py:177: m_schema, m_definitions, m_nested_models = model_process_schema(\n", "stderr": "", "exit_code": 0} |
| 6 | run_command | {
"command": "grep -rn \"model_process_schema\" fastapi/"
} | {"status": "ok", "stdout": "fastapi/_compat/v1.py:57: model_process_schema,\nfastapi/_compat/v1.py:104: model_process_schema,\nfastapi/_compat/v1.py:177: m_schefull{"status": "ok", "stdout": "fastapi/_compat/v1.py:57: model_process_schema,\nfastapi/_compat/v1.py:104: model_process_schema,\nfastapi/_compat/v1.py:177: m_schema, m_definitions, m_nested_models = model_process_schema(\n", "stderr": "", "exit_code": 0} |
| 7 | read_file | {
"filepath": "fastapi/_compat/v1.py"
} | {"status": "ok", "filepath": "fastapi/_compat/v1.py", "content": "from copy import copy\nfrom dataclasses import dataclass, is_dataclass\nfrom enum import Enum\full{"status": "ok", "filepath": "fastapi/_compat/v1.py", "content": "from copy import copy\nfrom dataclasses import dataclass, is_dataclass\nfrom enum import Enum\nfrom typing import (\n Any,\n Callable,\n Dict,\n List,\n Sequence,\n Set,\n Tuple,\n Type,\n Union,\n)\n\nfrom fastapi._compat import shared\nfrom fastapi.openapi.constants import REF_PREFIX as REF_PREFIX\nfrom fastapi.types import ModelNameMap\nfrom pydantic.version import VERSION as PYDANTIC_VERSION\nfrom typing_extensions import Literal\n\nPYDANTIC_VERSION_MINOR_TUPLE = tuple(int(x) for x in PYDANTIC_VERSION.split(\".\")[:2])\nPYDANTIC_V2 = PYDANTIC_VERSION_MINOR_TUPLE[0] == 2\n# Keeping old \"Required\" functionality from Pydantic V1, without\n# shadowing typing.Required.\nRequiredParam: Any = Ellipsis\n\nif not PYDANTIC_V2:\n from pydantic import BaseConfig as BaseConfig\n from pydantic import BaseModel as BaseModel\n from pydantic import ValidationError as ValidationError\n from pydantic import create_model as create_model\n from pydantic.class_validators import Validator as Validator\n from pydantic.color import Color as Color\n from pydantic.error_wrappers import ErrorWrapper as ErrorWrapper\n from pydantic.errors import MissingError\n from pydantic.fields import ( # type: ignore[attr-defined]\n SHAPE_FROZENSET,\n SHAPE_LIST,\n SHAPE_SEQUENCE,\n SHAPE_SET,\n SHAPE_SINGLETON,\n SHAPE_TUPLE,\n SHAPE_TUPLE_ELLIPSIS,\n )\n from pydantic.fields import FieldInfo as FieldInfo\n from pydantic.fields import ModelField as ModelField # type: ignore[attr-defined]\n from pydantic.fields import Undefined as Undefined # type: ignore[attr-defined]\n from pydantic.fields import ( # type: ignore[attr-defined]\n UndefinedType as UndefinedType,\n )\n from pydantic.networks import AnyUrl as AnyUrl\n from pydantic.networks import NameEmail as NameEmail\n from pydantic.schema import |
| 8 | run_command | {
"command": "grep -rn \"model_process_schema\" fastapi/ | grep -v \"_compat\""
} | {"status": "error", "error_type": "CommandError", "error_message": "", "details": {"stdout": "", "stderr": "", "exit_code": 1}}full{"status": "error", "error_type": "CommandError", "error_message": "", "details": {"stdout": "", "stderr": "", "exit_code": 1}} |
| 9 | run_command | {
"command": "grep -rn \"nested\" fastapi/openapi/utils.py"
} | {"status": "error", "error_type": "CommandError", "error_message": "", "details": {"stdout": "", "stderr": "", "exit_code": 1}}full{"status": "error", "error_type": "CommandError", "error_message": "", "details": {"stdout": "", "stderr": "", "exit_code": 1}} |
| 10 | run_command | {
"command": "grep -rn \"nested\" fastapi/openapi/"
} | {"status": "error", "error_type": "CommandError", "error_message": "", "details": {"stdout": "", "stderr": "", "exit_code": 1}}full{"status": "error", "error_type": "CommandError", "error_message": "", "details": {"stdout": "", "stderr": "", "exit_code": 1}} |
| 11 | run_command | {
"command": "grep -rn \"schema\" fastapi/openapi/ | head -20"
} | {"status": "ok", "stdout": "fastapi/openapi/models.py:46: def __get_pydantic_json_schema__(\nfastapi/openapi/models.py:47: cls, core_schema: CoreSchema, handlerfull{"status": "ok", "stdout": "fastapi/openapi/models.py:46: def __get_pydantic_json_schema__(\nfastapi/openapi/models.py:47: cls, core_schema: CoreSchema, handler: GetJsonSchemaHandler\nfastapi/openapi/models.py:52: def __get_pydantic_core_schema__(\nfastapi/openapi/models.py:124:# Ref JSON Schema 2020-12: https://json-schema.org/draft/2020-12/json-schema-validation#name-type\nfastapi/openapi/models.py:131: # Ref: JSON Schema 2020-12: https://json-schema.org/draft/2020-12/json-schema-core.html#name-the-json-schema-core-vocabu\nfastapi/openapi/models.py:133: schema_: Optional[str] = Field(default=None, alias=\"$schema\")\nfastapi/openapi/models.py:142: # Ref: JSON Schema 2020-12: https://json-schema.org/draft/2020-12/json-schema-core.html#name-a-vocabulary-for-applying-s\nfastapi/openapi/models.py:143: # A Vocabulary for Applying Subschemas\nfastapi/openapi/models.py:154: # It generates a list of schemas for tuples, before prefixItems was available\nfastapi/openapi/models.py:164: # Ref: JSON Schema Validation 2020-12: https://json-schema.org/draft/2020-12/json-schema-validation.html#name-a-vocabulary-for-structural\nfastapi/openapi/models.py:186: # Ref: JSON Schema Validation 2020-12: https://json-schema.org/draft/2020-12/json-schema-validation.html#name-vocabularies-for-semantic-c\nfastapi/openapi/models.py:189: # Ref: JSON Schema Validation 2020-12: https://json-schema.org/draft/2020-12/json-schema-validation.html#name-a-vocabulary-for-the-conten\nfastapi/openapi/models.py:194: # Ref: JSON Schema Validation 2020-12: https://json-schema.org/draft/2020-12/json-schema-validation.html#name-a-vocabulary-for-basic-meta\nfastapi/openapi/models.py:203: # Ref: OpenAPI 3.1.0: https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#schema-object\nfastapi/openapi/models.py:217:# Ref: https://json-schema.org/draft/2020-12/json-schema-core.html#name-json-schema-documents\nfastapi/openapi/models.py:253: sche |
| 12 | run_command | {
"command": "grep -rn \"get_openapi\" fastapi/openapi/utils.py"
} | {"status": "ok", "stdout": "fastapi/openapi/utils.py:78:def get_openapi_security_definitions(\nfastapi/openapi/utils.py:95:def _get_openapi_operation_parametersfull{"status": "ok", "stdout": "fastapi/openapi/utils.py:78:def get_openapi_security_definitions(\nfastapi/openapi/utils.py:95:def _get_openapi_operation_parameters(\nfastapi/openapi/utils.py:168:def get_openapi_operation_request_body(\nfastapi/openapi/utils.py:224:def get_openapi_operation_metadata(\nfastapi/openapi/utils.py:250:def get_openapi_path(\nfastapi/openapi/utils.py:272: operation = get_openapi_operation_metadata(\nfastapi/openapi/utils.py:277: security_definitions, operation_security = get_openapi_security_definitions(\nfastapi/openapi/utils.py:284: operation_parameters = _get_openapi_operation_parameters(\nfastapi/openapi/utils.py:305: request_body_oai = get_openapi_operation_request_body(\nfastapi/openapi/utils.py:321: ) = get_openapi_path(\nfastapi/openapi/utils.py:467:def get_openapi(\nfastapi/openapi/utils.py:511: result = get_openapi_path(\nfastapi/openapi/utils.py:530: result = get_openapi_path(\n", "stderr": "", "exit_code": 0} |
| 13 | read_file | {
"filepath": "fastapi/openapi/utils.py",
"start_line": 467,
"end_line": 600
} | {"status": "ok", "filepath": "fastapi/openapi/utils.py", "content": "def get_openapi(\n *,\n title: str,\n version: str,\n openapi_version: str = \"3.1.0\",\n sfull{"status": "ok", "filepath": "fastapi/openapi/utils.py", "content": "def get_openapi(\n *,\n title: str,\n version: str,\n openapi_version: str = \"3.1.0\",\n summary: Optional[str] = None,\n description: Optional[str] = None,\n routes: Sequence[BaseRoute],\n webhooks: Optional[Sequence[BaseRoute]] = None,\n tags: Optional[List[Dict[str, Any]]] = None,\n servers: Optional[List[Dict[str, Union[str, Any]]]] = None,\n terms_of_service: Optional[str] = None,\n contact: Optional[Dict[str, Union[str, Any]]] = None,\n license_info: Optional[Dict[str, Union[str, Any]]] = None,\n separate_input_output_schemas: bool = True,\n external_docs: Optional[Dict[str, Any]] = None,\n) -> Dict[str, Any]:\n info: Dict[str, Any] = {\"title\": title, \"version\": version}\n if summary:\n info[\"summary\"] = summary\n if description:\n info[\"description\"] = description\n if terms_of_service:\n info[\"termsOfService\"] = terms_of_service\n if contact:\n info[\"contact\"] = contact\n if license_info:\n info[\"license\"] = license_info\n output: Dict[str, Any] = {\"openapi\": openapi_version, \"info\": info}\n if servers:\n output[\"servers\"] = servers\n components: Dict[str, Dict[str, Any]] = {}\n paths: Dict[str, Dict[str, Any]] = {}\n webhook_paths: Dict[str, Dict[str, Any]] = {}\n operation_ids: Set[str] = set()\n all_fields = get_fields_from_routes(list(routes or []) + list(webhooks or []))\n model_name_map = get_compat_model_name_map(all_fields)\n field_mapping, definitions = get_definitions(\n fields=all_fields,\n model_name_map=model_name_map,\n separate_input_output_schemas=separate_input_output_schemas,\n )\n for route in routes or []:\n if isinstance(route, routing.APIRoute):\n result = get_openapi_path(\n route=route,\n operation_ids=operation_ids,\n model_nam |
| 14 | run_command | {
"command": "grep -rn \"get_definitions\" fastapi/openapi/utils.py"
} | {"status": "ok", "stdout": "fastapi/openapi/utils.py:12: get_definitions,\nfastapi/openapi/utils.py:504: field_mapping, definitions = get_definitions(\n", "stdefull{"status": "ok", "stdout": "fastapi/openapi/utils.py:12: get_definitions,\nfastapi/openapi/utils.py:504: field_mapping, definitions = get_definitions(\n", "stderr": "", "exit_code": 0} |
| 15 | read_file | {
"end_line": 460,
"filepath": "fastapi/openapi/utils.py",
"start_line": 1
} | {"status": "ok", "filepath": "fastapi/openapi/utils.py", "content": "import http.client\nimport inspect\nimport warnings\nfrom typing import Any, Dict, List, Opfull{"status": "ok", "filepath": "fastapi/openapi/utils.py", "content": "import http.client\nimport inspect\nimport warnings\nfrom typing import Any, Dict, List, Optional, Sequence, Set, Tuple, Type, Union, cast\n\nfrom fastapi import routing\nfrom fastapi._compat import (\n JsonSchemaValue,\n ModelField,\n Undefined,\n get_compat_model_name_map,\n get_definitions,\n get_schema_from_model_field,\n lenient_issubclass,\n)\nfrom fastapi.datastructures import DefaultPlaceholder\nfrom fastapi.dependencies.models import Dependant\nfrom fastapi.dependencies.utils import (\n _get_flat_fields_from_params,\n get_flat_dependant,\n get_flat_params,\n)\nfrom fastapi.encoders import jsonable_encoder\nfrom fastapi.openapi.constants import METHODS_WITH_BODY, REF_PREFIX\nfrom fastapi.openapi.models import OpenAPI\nfrom fastapi.params import Body, ParamTypes\nfrom fastapi.responses import Response\nfrom fastapi.types import ModelNameMap\nfrom fastapi.utils import (\n deep_dict_update,\n generate_operation_id_for_path,\n is_body_allowed_for_status_code,\n)\nfrom pydantic import BaseModel\nfrom starlette.responses import JSONResponse\nfrom starlette.routing import BaseRoute\nfrom typing_extensions import Literal\n\nfrom .._compat import _is_model_field\n\nvalidation_error_definition = {\n \"title\": \"ValidationError\",\n \"type\": \"object\",\n \"properties\": {\n \"loc\": {\n \"title\": \"Location\",\n \"type\": \"array\",\n \"items\": {\"anyOf\": [{\"type\": \"string\"}, {\"type\": \"integer\"}]},\n },\n \"msg\": {\"title\": \"Message\", \"type\": \"string\"},\n \"type\": {\"title\": \"Error Type\", \"type\": \"string\"},\n },\n \"required\": [\"loc\", \"msg\", \"type\"],\n}\n\nvalidation_error_response_definition = {\n \"title\": \"HTTPValidationError\",\n \"type\": \"object\",\n \"properties\": {\n \"detail\": {\n \"title\": \"Detail\",\n |
| 16 | read_file | {
"filepath": "fastapi/_compat/__init__.py"
} | {"status": "ok", "filepath": "fastapi/_compat/__init__.py", "content": "from .main import BaseConfig as BaseConfig\nfrom .main import PydanticSchemaGenerationErfull{"status": "ok", "filepath": "fastapi/_compat/__init__.py", "content": "from .main import BaseConfig as BaseConfig\nfrom .main import PydanticSchemaGenerationError as PydanticSchemaGenerationError\nfrom .main import RequiredParam as RequiredParam\nfrom .main import Undefined as Undefined\nfrom .main import UndefinedType as UndefinedType\nfrom .main import Url as Url\nfrom .main import Validator as Validator\nfrom .main import _get_model_config as _get_model_config\nfrom .main import _is_error_wrapper as _is_error_wrapper\nfrom .main import _is_model_class as _is_model_class\nfrom .main import _is_model_field as _is_model_field\nfrom .main import _is_undefined as _is_undefined\nfrom .main import _model_dump as _model_dump\nfrom .main import _model_rebuild as _model_rebuild\nfrom .main import copy_field_info as copy_field_info\nfrom .main import create_body_model as create_body_model\nfrom .main import evaluate_forwardref as evaluate_forwardref\nfrom .main import get_annotation_from_field_info as get_annotation_from_field_info\nfrom .main import get_cached_model_fields as get_cached_model_fields\nfrom .main import get_compat_model_name_map as get_compat_model_name_map\nfrom .main import get_definitions as get_definitions\nfrom .main import get_missing_field_error as get_missing_field_error\nfrom .main import get_schema_from_model_field as get_schema_from_model_field\nfrom .main import is_bytes_field as is_bytes_field\nfrom .main import is_bytes_sequence_field as is_bytes_sequence_field\nfrom .main import is_scalar_field as is_scalar_field\nfrom .main import is_scalar_sequence_field as is_scalar_sequence_field\nfrom .main import is_sequence_field as is_sequence_field\nfrom .main import serialize_sequence_value as serialize_sequence_value\nfrom .main import (\n with_info_plain_validator_function as with_info_plain_validator_function,\n)\nfrom .may_v1 import CoreSchema as CoreSchema\nfrom .may_v1 import GetJsonSchemaHandler as GetJsonSchemaHandler\nfrom .may_v1 import |
| 17 | read_file | {
"filepath": "fastapi/_compat/main.py"
} | {"status": "ok", "filepath": "fastapi/_compat/main.py", "content": "import sys\nfrom functools import lru_cache\nfrom typing import (\n Any,\n Dict,\n List,\n Sfull{"status": "ok", "filepath": "fastapi/_compat/main.py", "content": "import sys\nfrom functools import lru_cache\nfrom typing import (\n Any,\n Dict,\n List,\n Sequence,\n Tuple,\n Type,\n)\n\nfrom fastapi._compat import may_v1\nfrom fastapi._compat.shared import PYDANTIC_V2, lenient_issubclass\nfrom fastapi.types import ModelNameMap\nfrom pydantic import BaseModel\nfrom typing_extensions import Literal\n\nfrom .model_field import ModelField\n\nif PYDANTIC_V2:\n from .v2 import BaseConfig as BaseConfig\n from .v2 import FieldInfo as FieldInfo\n from .v2 import PydanticSchemaGenerationError as PydanticSchemaGenerationError\n from .v2 import RequiredParam as RequiredParam\n from .v2 import Undefined as Undefined\n from .v2 import UndefinedType as UndefinedType\n from .v2 import Url as Url\n from .v2 import Validator as Validator\n from .v2 import evaluate_forwardref as evaluate_forwardref\n from .v2 import get_missing_field_error as get_missing_field_error\n from .v2 import (\n with_info_plain_validator_function as with_info_plain_validator_function,\n )\nelse:\n from .v1 import BaseConfig as BaseConfig # type: ignore[assignment]\n from .v1 import FieldInfo as FieldInfo\n from .v1 import ( # type: ignore[assignment]\n PydanticSchemaGenerationError as PydanticSchemaGenerationError,\n )\n from .v1 import RequiredParam as RequiredParam\n from .v1 import Undefined as Undefined\n from .v1 import UndefinedType as UndefinedType\n from .v1 import Url as Url # type: ignore[assignment]\n from .v1 import Validator as Validator\n from .v1 import evaluate_forwardref as evaluate_forwardref\n from .v1 import get_missing_field_error as get_missing_field_error\n from .v1 import ( # type: ignore[assignment]\n with_info_plain_validator_function as with_info_plain_validator_function,\n )\n\n\n@lru_cache\ndef get_cached_model_fields(model: Type[BaseModel]) -> List[ModelFiel |
| 18 | read_file | {
"end_line": 362,
"filepath": "fastapi/_compat/main.py",
"start_line": 151
} | {"status": "ok", "filepath": "fastapi/_compat/main.py", "content": "\ndef is_bytes_field(field: ModelField) -> bool:\n if isinstance(field, may_v1.ModelField):\full{"status": "ok", "filepath": "fastapi/_compat/main.py", "content": "\ndef is_bytes_field(field: ModelField) -> bool:\n if isinstance(field, may_v1.ModelField):\n from fastapi._compat import v1\n\n return v1.is_bytes_field(field)\n else:\n assert PYDANTIC_V2\n from . import v2\n\n return v2.is_bytes_field(field) # type: ignore[arg-type]\n\n\ndef is_bytes_sequence_field(field: ModelField) -> bool:\n if isinstance(field, may_v1.ModelField):\n from fastapi._compat import v1\n\n return v1.is_bytes_sequence_field(field)\n else:\n assert PYDANTIC_V2\n from . import v2\n\n return v2.is_bytes_sequence_field(field) # type: ignore[arg-type]\n\n\ndef is_scalar_field(field: ModelField) -> bool:\n if isinstance(field, may_v1.ModelField):\n from fastapi._compat import v1\n\n return v1.is_scalar_field(field)\n else:\n assert PYDANTIC_V2\n from . import v2\n\n return v2.is_scalar_field(field) # type: ignore[arg-type]\n\n\ndef is_scalar_sequence_field(field: ModelField) -> bool:\n if isinstance(field, may_v1.ModelField):\n from fastapi._compat import v1\n\n return v1.is_scalar_sequence_field(field)\n else:\n assert PYDANTIC_V2\n from . import v2\n\n return v2.is_scalar_sequence_field(field) # type: ignore[arg-type]\n\n\ndef is_sequence_field(field: ModelField) -> bool:\n if isinstance(field, may_v1.ModelField):\n from fastapi._compat import v1\n\n return v1.is_sequence_field(field)\n else:\n assert PYDANTIC_V2\n from . import v2\n\n return v2.is_sequence_field(field) # type: ignore[arg-type]\n\n\ndef serialize_sequence_value(*, field: ModelField, value: Any) -> Sequence[Any]:\n if isinstance(field, may_v1.ModelField):\n from fastapi._compat import v1\n\n return v1.serialize_sequence_value(field=field, value=value)\n else:\n assert PYDANTIC_V2\n |
| 19 | read_file | {
"end_line": 362,
"filepath": "fastapi/_compat/main.py",
"start_line": 301
} | {"status": "ok", "filepath": "fastapi/_compat/main.py", "content": " # Pydantic v1 is not supported since Python 3.14\n else:\n from . import v2\n\n v2_fields =full{"status": "ok", "filepath": "fastapi/_compat/main.py", "content": " # Pydantic v1 is not supported since Python 3.14\n else:\n from . import v2\n\n v2_fields = [field for field in fields if isinstance(field, v2.ModelField)]\n v2_field_maps, v2_definitions = v2.get_definitions(\n fields=v2_fields,\n model_name_map=model_name_map,\n separate_input_output_schemas=separate_input_output_schemas,\n )\n return v2_field_maps, v2_definitions\n\n\ndef get_schema_from_model_field(\n *,\n field: ModelField,\n model_name_map: ModelNameMap,\n field_mapping: Dict[\n Tuple[ModelField, Literal[\"validation\", \"serialization\"]],\n may_v1.JsonSchemaValue,\n ],\n separate_input_output_schemas: bool = True,\n) -> Dict[str, Any]:\n if isinstance(field, may_v1.ModelField):\n from fastapi._compat import v1\n\n return v1.get_schema_from_model_field(\n field=field,\n model_name_map=model_name_map,\n field_mapping=field_mapping,\n separate_input_output_schemas=separate_input_output_schemas,\n )\n else:\n assert PYDANTIC_V2\n from . import v2\n\n return v2.get_schema_from_model_field(\n field=field, # type: ignore[arg-type]\n model_name_map=model_name_map,\n field_mapping=field_mapping, # type: ignore[arg-type]\n separate_input_output_schemas=separate_input_output_schemas,\n )\n\n\ndef _is_model_field(value: Any) -> bool:\n if isinstance(value, may_v1.ModelField):\n return True\n elif PYDANTIC_V2:\n from . import v2\n\n return isinstance(value, v2.ModelField)\n return False\n\n\ndef _is_model_class(value: Any) -> bool:\n if lenient_issubclass(value, may_v1.BaseModel):\n return True\n elif PYDANTIC_V2:\n from . import v2\n\n return lenient_issubclass(value, v2.BaseModel) # type: ignore[at |
| 20 | read_file | {
"filepath": "fastapi/_compat/v2.py"
} | {"status": "ok", "filepath": "fastapi/_compat/v2.py", "content": "import re\nimport warnings\nfrom copy import copy, deepcopy\nfrom dataclasses import dataclassfull{"status": "ok", "filepath": "fastapi/_compat/v2.py", "content": "import re\nimport warnings\nfrom copy import copy, deepcopy\nfrom dataclasses import dataclass\nfrom enum import Enum\nfrom typing import (\n Any,\n Dict,\n List,\n Sequence,\n Set,\n Tuple,\n Type,\n Union,\n cast,\n)\n\nfrom fastapi._compat import may_v1, shared\nfrom fastapi.openapi.constants import REF_TEMPLATE\nfrom fastapi.types import IncEx, ModelNameMap\nfrom pydantic import BaseModel, TypeAdapter, create_model\nfrom pydantic import PydanticSchemaGenerationError as PydanticSchemaGenerationError\nfrom pydantic import PydanticUndefinedAnnotation as PydanticUndefinedAnnotation\nfrom pydantic import ValidationError as ValidationError\nfrom pydantic._internal._schema_generation_shared import ( # type: ignore[attr-defined]\n GetJsonSchemaHandler as GetJsonSchemaHandler,\n)\nfrom pydantic._internal._typing_extra import eval_type_lenient\nfrom pydantic._internal._utils import lenient_issubclass as lenient_issubclass\nfrom pydantic.fields import FieldInfo as FieldInfo\nfrom pydantic.json_schema import GenerateJsonSchema as GenerateJsonSchema\nfrom pydantic.json_schema import JsonSchemaValue as JsonSchemaValue\nfrom pydantic_core import CoreSchema as CoreSchema\nfrom pydantic_core import PydanticUndefined, PydanticUndefinedType\nfrom pydantic_core import Url as Url\nfrom typing_extensions import Annotated, Literal, get_args, get_origin\n\ntry:\n from pydantic_core.core_schema import (\n with_info_plain_validator_function as with_info_plain_validator_function,\n )\nexcept ImportError: # pragma: no cover\n from pydantic_core.core_schema import (\n general_plain_validator_function as with_info_plain_validator_function, # noqa: F401\n )\n\nRequiredParam = PydanticUndefined\nUndefined = PydanticUndefined\nUndefinedType = PydanticUndefinedType\nevaluate_forwardref = eval_type_lenient\nValidator = Any\n\n\nclass BaseConfig:\n pass\n\n\nclass ErrorWr |
| 21 | read_file | {
"end_line": 459,
"filepath": "fastapi/_compat/v2.py",
"start_line": 151
} | {"status": "ok", "filepath": "fastapi/_compat/v2.py", "content": " return id(self)\n\n\ndef get_annotation_from_field_info(\n annotation: Any, field_info: Fieldfull{"status": "ok", "filepath": "fastapi/_compat/v2.py", "content": " return id(self)\n\n\ndef get_annotation_from_field_info(\n annotation: Any, field_info: FieldInfo, field_name: str\n) -> Any:\n return annotation\n\n\ndef _model_rebuild(model: Type[BaseModel]) -> None:\n model.model_rebuild()\n\n\ndef _model_dump(\n model: BaseModel, mode: Literal[\"json\", \"python\"] = \"json\", **kwargs: Any\n) -> Any:\n return model.model_dump(mode=mode, **kwargs)\n\n\ndef _get_model_config(model: BaseModel) -> Any:\n return model.model_config\n\n\ndef get_schema_from_model_field(\n *,\n field: ModelField,\n model_name_map: ModelNameMap,\n field_mapping: Dict[\n Tuple[ModelField, Literal[\"validation\", \"serialization\"]], JsonSchemaValue\n ],\n separate_input_output_schemas: bool = True,\n) -> Dict[str, Any]:\n override_mode: Union[Literal[\"validation\"], None] = (\n None if separate_input_output_schemas else \"validation\"\n )\n # This expects that GenerateJsonSchema was already used to generate the definitions\n json_schema = field_mapping[(field, override_mode or field.mode)]\n if \"$ref\" not in json_schema:\n # TODO remove when deprecating Pydantic v1\n # Ref: https://github.com/pydantic/pydantic/blob/d61792cc42c80b13b23e3ffa74bc37ec7c77f7d1/pydantic/schema.py#L207\n json_schema[\"title\"] = field.field_info.title or field.alias.title().replace(\n \"_\", \" \"\n )\n return json_schema\n\n\ndef get_definitions(\n *,\n fields: Sequence[ModelField],\n model_name_map: ModelNameMap,\n separate_input_output_schemas: bool = True,\n) -> Tuple[\n Dict[Tuple[ModelField, Literal[\"validation\", \"serialization\"]], JsonSchemaValue],\n Dict[str, Dict[str, Any]],\n]:\n schema_generator = GenerateJsonSchema(ref_template=REF_TEMPLATE)\n override_mode: Union[Literal[\"validation\"], None] = (\n None if separate_input_output_schemas else \"valid |