diff --git a/connexion/decorators/parameter.py b/connexion/decorators/parameter.py index c4a7a77e0..bcd61adf7 100644 --- a/connexion/decorators/parameter.py +++ b/connexion/decorators/parameter.py @@ -48,6 +48,17 @@ def snake_and_shadow(name): return snake +def sanitized(name): + return name and re.sub('^[^a-zA-Z_]+', '', + re.sub('[^0-9a-zA-Z_]', '', + re.sub(r'\[(?!])', '_', name))) + + +def pythonic(name): + name = name and snake_and_shadow(name) + return sanitized(name) + + def parameter_to_arg(operation, function, pythonic_params=False, pass_context_arg_name=None): """ @@ -65,13 +76,6 @@ def parameter_to_arg(operation, function, pythonic_params=False, """ consumes = operation.consumes - def sanitized(name): - return name and re.sub('^[^a-zA-Z_]+', '', re.sub('[^0-9a-zA-Z[_]', '', re.sub(r'[\[]', '_', name))) - - def pythonic(name): - name = name and snake_and_shadow(name) - return sanitized(name) - sanitize = pythonic if pythonic_params else sanitized arguments, has_kwargs = inspect_function_arguments(function) diff --git a/tests/decorators/test_parameter.py b/tests/decorators/test_parameter.py index 990065dc5..269693bb7 100644 --- a/tests/decorators/test_parameter.py +++ b/tests/decorators/test_parameter.py @@ -1,6 +1,6 @@ from unittest.mock import MagicMock -from connexion.decorators.parameter import parameter_to_arg +from connexion.decorators.parameter import parameter_to_arg, pythonic def test_injection(): @@ -25,3 +25,8 @@ def get_arguments(self, *args, **kwargs): parameter_to_arg(Op(), handler, pass_context_arg_name='framework_request_ctx')(request) func.assert_called_with(p1='123', framework_request_ctx=request.context) + + +def test_pythonic_params(): + assert pythonic('orderBy[eq]') == 'order_by_eq' + assert pythonic('ids[]') == 'ids'