@@ -63,6 +63,23 @@ def _wrapper(*args, **kwargs):
6363 return _wrapper
6464
6565
66+ def add_additional_grouped_field (func ):
67+ # EXTRA ARGS SETUP
68+ query1 = ExtraEndpointArg (name = "query1" , annotation = Query [Filter ])
69+
70+ extra_args (query1 )(func )
71+
72+ @wraps (func )
73+ def _wrapper (* args , ** kwargs ):
74+ resolved_query1 : Filter = query1 .resolve (kwargs )
75+
76+ response = func (* args , ** kwargs )
77+ response .update (query1 = resolved_query1 .dict ())
78+ return response
79+
80+ return _wrapper
81+
82+
6683@get ("/test" )
6784@add_extra_non_field_extra_args
6885@add_additional_signature_to_endpoint
@@ -207,3 +224,27 @@ def test_query_params_extra():
207224
208225 response = client .get ("/test?from=1&to=2&range=20&foo=1&range2=50" )
209226 assert response .status_code == 422
227+
228+
229+ def test_extra_args_as_grouped_fields ():
230+ @get ("/test-grouped" )
231+ @add_additional_grouped_field
232+ def query_params_extra (
233+ request : Inject [Request ],
234+ ):
235+ return {}
236+
237+ tm .create_application ().router .append (query_params_extra )
238+ client = tm .get_test_client ()
239+ response = client .get (
240+ "/test-grouped?from=1&to=2&range=20&foo=1&range2=50&query1=somequery1&query2=somequery2"
241+ )
242+ assert response .json () == {
243+ "query1" : {
244+ "from_datetime" : "1970-01-01T00:00:01Z" ,
245+ "range" : 20 ,
246+ "to_datetime" : "1970-01-01T00:00:02Z" ,
247+ }
248+ }
249+ response = client .get ("/test-grouped?query1=somequery1&query2=somequery2" )
250+ assert response .status_code == 422
0 commit comments