@@ -95,6 +95,12 @@ def get_json_schema(_, handler: GetJsonSchemaHandler) -> JsonSchemaValue:
95
95
update_json_schema (original_schema , updates )
96
96
return json_schema
97
97
98
+ strict_python_schema = core_schema .is_instance_schema (enum_type )
99
+ if use_enum_values :
100
+ strict_python_schema = core_schema .chain_schema (
101
+ [strict_python_schema , core_schema .no_info_plain_validator_function (lambda x : x .value )]
102
+ )
103
+
98
104
to_enum_validator = core_schema .no_info_plain_validator_function (to_enum )
99
105
if issubclass (enum_type , int ):
100
106
# this handles `IntEnum`, and also `Foobar(int, Enum)`
@@ -103,28 +109,26 @@ def get_json_schema(_, handler: GetJsonSchemaHandler) -> JsonSchemaValue:
103
109
# Disallow float from JSON due to strict mode
104
110
strict = core_schema .json_or_python_schema (
105
111
json_schema = core_schema .no_info_after_validator_function (to_enum , core_schema .int_schema ()),
106
- python_schema = core_schema . is_instance_schema ( enum_type ) ,
112
+ python_schema = strict_python_schema ,
107
113
)
108
114
elif issubclass (enum_type , str ):
109
115
# this handles `StrEnum` (3.11 only), and also `Foobar(str, Enum)`
110
116
updates ['type' ] = 'string'
111
117
lax = core_schema .chain_schema ([core_schema .str_schema (), to_enum_validator ])
112
118
strict = core_schema .json_or_python_schema (
113
119
json_schema = core_schema .no_info_after_validator_function (to_enum , core_schema .str_schema ()),
114
- python_schema = core_schema . is_instance_schema ( enum_type ) ,
120
+ python_schema = strict_python_schema ,
115
121
)
116
122
elif issubclass (enum_type , float ):
117
123
updates ['type' ] = 'numeric'
118
124
lax = core_schema .chain_schema ([core_schema .float_schema (), to_enum_validator ])
119
125
strict = core_schema .json_or_python_schema (
120
126
json_schema = core_schema .no_info_after_validator_function (to_enum , core_schema .float_schema ()),
121
- python_schema = core_schema . is_instance_schema ( enum_type ) ,
127
+ python_schema = strict_python_schema ,
122
128
)
123
129
else :
124
130
lax = to_enum_validator
125
- strict = core_schema .json_or_python_schema (
126
- json_schema = to_enum_validator , python_schema = core_schema .is_instance_schema (enum_type )
127
- )
131
+ strict = core_schema .json_or_python_schema (json_schema = to_enum_validator , python_schema = strict_python_schema )
128
132
return core_schema .lax_or_strict_schema (
129
133
lax_schema = lax , strict_schema = strict , ref = enum_ref , metadata = {'pydantic_js_functions' : [get_json_schema ]}
130
134
)
0 commit comments