@@ -566,32 +566,38 @@ def _deque_schema(self, items_type: Any) -> CoreSchema:
566
566
def _mapping_schema (self , tp : Any , keys_type : Any , values_type : Any ) -> CoreSchema :
567
567
from ._validators import MAPPING_ORIGIN_MAP , defaultdict_validator , get_defaultdict_default_default_factory
568
568
569
+ mapped_origin = MAPPING_ORIGIN_MAP [tp ]
569
570
keys_schema = self .generate_schema (keys_type )
570
571
values_schema = self .generate_schema (values_type )
572
+ dict_schema = core_schema .dict_schema (keys_schema , values_schema , strict = False )
571
573
572
- dict_schema = core_schema .dict_schema (keys_schema , values_schema )
573
- check_instance = core_schema .json_or_python_schema (
574
- json_schema = dict_schema ,
575
- python_schema = core_schema .is_instance_schema (tp ),
576
- )
577
-
578
- if tp is collections .defaultdict :
579
- default_default_factory = get_defaultdict_default_default_factory (values_type )
580
- coerce_instance_wrap = partial (
581
- core_schema .no_info_wrap_validator_function ,
582
- partial (defaultdict_validator , default_default_factory = default_default_factory ),
583
- )
574
+ if mapped_origin is dict :
575
+ schema = dict_schema
584
576
else :
585
- coerce_instance_wrap = partial (core_schema .no_info_after_validator_function , MAPPING_ORIGIN_MAP [tp ])
577
+ check_instance = core_schema .json_or_python_schema (
578
+ json_schema = dict_schema ,
579
+ python_schema = core_schema .is_instance_schema (mapped_origin ),
580
+ )
586
581
587
- lax_schema = coerce_instance_wrap (dict_schema )
588
- schema = core_schema .lax_or_strict_schema (
589
- lax_schema = lax_schema ,
590
- strict_schema = core_schema .union_schema ([check_instance , lax_schema ]),
591
- serialization = core_schema .wrap_serializer_function_ser_schema (
592
- lambda v , h : h (v ), schema = dict_schema , info_arg = False
593
- ),
594
- )
582
+ if tp is collections .defaultdict :
583
+ default_default_factory = get_defaultdict_default_default_factory (values_type )
584
+ coerce_instance_wrap = partial (
585
+ core_schema .no_info_wrap_validator_function ,
586
+ partial (defaultdict_validator , default_default_factory = default_default_factory ),
587
+ )
588
+ else :
589
+ coerce_instance_wrap = partial (core_schema .no_info_after_validator_function , mapped_origin )
590
+
591
+ lax_schema = coerce_instance_wrap (dict_schema )
592
+ strict_schema = core_schema .chain_schema ([check_instance , lax_schema ])
593
+
594
+ schema = core_schema .lax_or_strict_schema (
595
+ lax_schema = lax_schema ,
596
+ strict_schema = strict_schema ,
597
+ serialization = core_schema .wrap_serializer_function_ser_schema (
598
+ lambda v , h : h (v ), schema = dict_schema , info_arg = False
599
+ ),
600
+ )
595
601
596
602
return schema
597
603
0 commit comments