Skip to content

Commit 8a01cc8

Browse files
Respect schema_generator config value in TypeAdapter (#10300)
1 parent 5c24abb commit 8a01cc8

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

pydantic/type_adapter.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,9 @@ def _get_schema(type_: Any, config_wrapper: _config.ConfigWrapper, parent_depth:
9898
local_ns = _typing_extra.parent_frame_namespace(parent_depth=parent_depth)
9999
global_ns = sys._getframe(max(parent_depth - 1, 1)).f_globals.copy()
100100
global_ns.update(local_ns or {})
101-
gen = _generate_schema.GenerateSchema(config_wrapper, types_namespace=global_ns, typevars_map={})
101+
gen = (config_wrapper.schema_generator or _generate_schema.GenerateSchema)(
102+
config_wrapper, types_namespace=global_ns, typevars_map={}
103+
)
102104
schema = gen.generate_schema(type_)
103105
schema = gen.clean_schema(schema)
104106
return schema

tests/test_type_adapter.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
from typing import Any, Dict, ForwardRef, Generic, List, NamedTuple, Optional, Tuple, TypeVar, Union
66

77
import pytest
8-
from pydantic_core import ValidationError
8+
from pydantic_core import ValidationError, core_schema
99
from typing_extensions import Annotated, TypeAlias, TypedDict
1010

1111
from pydantic import BaseModel, Field, TypeAdapter, ValidationInfo, create_model, field_validator
12+
from pydantic._internal._generate_schema import GenerateSchema
1213
from pydantic._internal._typing_extra import annotated_type
1314
from pydantic.config import ConfigDict
1415
from pydantic.dataclasses import dataclass as pydantic_dataclass
@@ -567,3 +568,11 @@ def test_core_schema_respects_defer_build(model: Any, config: ConfigDict, method
567568
assert type_adapter._core_schema is not None, 'Should be initialized after the usage'
568569
assert type_adapter._validator is not None, 'Should be initialized after the usage'
569570
assert type_adapter._serializer is not None, 'Should be initialized after the usage'
571+
572+
573+
def test_custom_schema_gen_respected() -> None:
574+
class LaxStrGenerator(GenerateSchema):
575+
def str_schema(self) -> core_schema.CoreSchema:
576+
return core_schema.no_info_plain_validator_function(str)
577+
578+
assert TypeAdapter(str, config=ConfigDict(schema_generator=LaxStrGenerator)).validate_python(1) == '1'

0 commit comments

Comments
 (0)