|
@@ -6,6 +6,7 @@ from http import HTTPStatus
|
6
|
6
|
# TODO BS 20171010: bottle specific ! # see #5
|
7
|
7
|
import marshmallow
|
8
|
8
|
from bottle import HTTPResponse
|
|
9
|
+from multidict import MultiDict
|
9
|
10
|
|
10
|
11
|
from hapic.data import HapicData
|
11
|
12
|
from hapic.description import ControllerDescription
|
|
@@ -270,18 +271,53 @@ class InputPathControllerWrapper(InputControllerWrapper):
|
270
|
271
|
) -> None:
|
271
|
272
|
hapic_data.path = processed_data
|
272
|
273
|
|
273
|
|
- def get_parameters_data(self, request_parameters: RequestParameters) -> dict:
|
|
274
|
+ def get_parameters_data(self, request_parameters: RequestParameters) -> dict: # nopep8
|
274
|
275
|
return request_parameters.path_parameters
|
275
|
276
|
|
276
|
277
|
|
277
|
278
|
class InputQueryControllerWrapper(InputControllerWrapper):
|
|
279
|
+ def __init__(
|
|
280
|
+ self,
|
|
281
|
+ context: typing.Union[ContextInterface, typing.Callable[[], ContextInterface]], # nopep8
|
|
282
|
+ processor: ProcessorInterface,
|
|
283
|
+ error_http_code: HTTPStatus=HTTPStatus.BAD_REQUEST,
|
|
284
|
+ default_http_code: HTTPStatus=HTTPStatus.OK,
|
|
285
|
+ as_list: typing.List[str]=None
|
|
286
|
+ ) -> None:
|
|
287
|
+ super().__init__(
|
|
288
|
+ context,
|
|
289
|
+ processor,
|
|
290
|
+ error_http_code,
|
|
291
|
+ default_http_code,
|
|
292
|
+ )
|
|
293
|
+ self.as_list = as_list or [] # FDV
|
|
294
|
+
|
278
|
295
|
def update_hapic_data(
|
279
|
296
|
self, hapic_data: HapicData,
|
280
|
297
|
processed_data: typing.Any,
|
281
|
298
|
) -> None:
|
282
|
299
|
hapic_data.query = processed_data
|
283
|
300
|
|
284
|
|
- def get_parameters_data(self, request_parameters: RequestParameters) -> dict:
|
|
301
|
+ def get_parameters_data(self, request_parameters: RequestParameters) -> MultiDict: # nopep8
|
|
302
|
+ # Parameters are updated considering eventual as_list parameters
|
|
303
|
+ if self.as_list:
|
|
304
|
+ query_parameters = MultiDict()
|
|
305
|
+ for parameter_name in request_parameters.query_parameters.keys():
|
|
306
|
+ if parameter_name in query_parameters:
|
|
307
|
+ continue
|
|
308
|
+
|
|
309
|
+ if parameter_name in self.as_list:
|
|
310
|
+ query_parameters[parameter_name] = \
|
|
311
|
+ request_parameters.query_parameters.getall(
|
|
312
|
+ parameter_name,
|
|
313
|
+ )
|
|
314
|
+ else:
|
|
315
|
+ query_parameters[parameter_name] = \
|
|
316
|
+ request_parameters.query_parameters.get(
|
|
317
|
+ parameter_name,
|
|
318
|
+ )
|
|
319
|
+ return query_parameters
|
|
320
|
+
|
285
|
321
|
return request_parameters.query_parameters
|
286
|
322
|
|
287
|
323
|
|
|
@@ -292,7 +328,7 @@ class InputBodyControllerWrapper(InputControllerWrapper):
|
292
|
328
|
) -> None:
|
293
|
329
|
hapic_data.body = processed_data
|
294
|
330
|
|
295
|
|
- def get_parameters_data(self, request_parameters: RequestParameters) -> dict:
|
|
331
|
+ def get_parameters_data(self, request_parameters: RequestParameters) -> dict: # nopep8
|
296
|
332
|
return request_parameters.body_parameters
|
297
|
333
|
|
298
|
334
|
|
|
@@ -303,7 +339,7 @@ class InputHeadersControllerWrapper(InputControllerWrapper):
|
303
|
339
|
) -> None:
|
304
|
340
|
hapic_data.headers = processed_data
|
305
|
341
|
|
306
|
|
- def get_parameters_data(self, request_parameters: RequestParameters) -> dict:
|
|
342
|
+ def get_parameters_data(self, request_parameters: RequestParameters) -> dict: # nopep8
|
307
|
343
|
return request_parameters.header_parameters
|
308
|
344
|
|
309
|
345
|
|
|
@@ -314,7 +350,7 @@ class InputFormsControllerWrapper(InputControllerWrapper):
|
314
|
350
|
) -> None:
|
315
|
351
|
hapic_data.forms = processed_data
|
316
|
352
|
|
317
|
|
- def get_parameters_data(self, request_parameters: RequestParameters) -> dict:
|
|
353
|
+ def get_parameters_data(self, request_parameters: RequestParameters) -> dict: # nopep8
|
318
|
354
|
return request_parameters.form_parameters
|
319
|
355
|
|
320
|
356
|
|
|
@@ -325,7 +361,7 @@ class InputFilesControllerWrapper(InputControllerWrapper):
|
325
|
361
|
) -> None:
|
326
|
362
|
hapic_data.files = processed_data
|
327
|
363
|
|
328
|
|
- def get_parameters_data(self, request_parameters: RequestParameters) -> dict:
|
|
364
|
+ def get_parameters_data(self, request_parameters: RequestParameters) -> dict: # nopep8
|
329
|
365
|
return request_parameters.files_parameters
|
330
|
366
|
|
331
|
367
|
|