@@ -42,8 +42,10 @@ def _get_value(model: Type[BaseModel], args: MultiDict, model_field_key: str, mo
4242def _validate_header (header : Type [BaseModel ], func_kwargs : dict ):
4343 request_headers = dict (request .headers )
4444 header_dict = {}
45+ model_properties = header .model_json_schema ().get ("properties" , {})
4546 for model_field_key , model_field_value in header .model_fields .items ():
4647 key_title = model_field_key .replace ("_" , "-" ).title ()
48+ model_field_schema = model_properties .get (model_field_value .alias or model_field_key )
4749 if model_field_value .alias and header .model_config .get ("populate_by_name" ):
4850 key = model_field_value .alias
4951 key_alias_title = model_field_value .alias .replace ("_" , "-" ).title ()
@@ -57,6 +59,12 @@ def _validate_header(header: Type[BaseModel], func_kwargs: dict):
5759 value = request_headers [key_title ]
5860 if value is not None :
5961 header_dict [key ] = value
62+ if model_field_schema .get ("type" ) == "null" :
63+ header_dict [key ] = value # type:ignore
64+ # extra keys
65+ for key , value in request_headers .items ():
66+ if key not in header_dict .keys ():
67+ header_dict [key ] = value
6068 func_kwargs ["header" ] = header .model_validate (obj = header_dict )
6169
6270
@@ -81,6 +89,12 @@ def _validate_query(query: Type[BaseModel], func_kwargs: dict):
8189 key , value = _get_value (query , request_args , model_field_key , model_field_value )
8290 if value is not None and value != []:
8391 query_dict [key ] = value
92+ if model_field_schema .get ("type" ) == "null" :
93+ query_dict [key ] = value
94+ # extra keys
95+ for key , value in request_args .items ():
96+ if key not in query_dict .keys ():
97+ query_dict [key ] = value
8498 func_kwargs ["query" ] = query .model_validate (obj = query_dict )
8599
86100
@@ -114,6 +128,12 @@ def _validate_form(form: Type[BaseModel], func_kwargs: dict):
114128 value = _value
115129 if value is not None and value != []:
116130 form_dict [key ] = value
131+ if model_field_schema .get ("type" ) == "null" :
132+ form_dict [key ] = value
133+ # extra keys
134+ for key , value in {** dict (request_form ), ** dict (request_files )}.items ():
135+ if key not in form_dict .keys ():
136+ form_dict [key ] = value
117137 func_kwargs ["form" ] = form .model_validate (obj = form_dict )
118138
119139
0 commit comments