From 571781c98ec6589cb4a10934a8072881a6990d1a Mon Sep 17 00:00:00 2001 From: Henning Jacobs Date: Thu, 13 Aug 2015 10:30:50 +0200 Subject: [PATCH] #48 ParameterValidator --- .gitignore | 1 + connexion/decorators/validation.py | 20 ++++++++++++++++++++ connexion/operation.py | 11 ++++++----- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 0f3c053b1..af386c300 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ __pycache__ .coverage *.egg htmlcov/ +*.pyc diff --git a/connexion/decorators/validation.py b/connexion/decorators/validation.py index 11e1ae0e6..f04685935 100644 --- a/connexion/decorators/validation.py +++ b/connexion/decorators/validation.py @@ -157,3 +157,23 @@ def validate_schema(self, data, schema): error = func(schema, data) if error: return problem(400, 'Bad Request', error) + + +class ParameterValidator(): + def __init__(self, parameters): + self.parameters = {p.get('in'): p for p in parameters} + + def __call__(self, function): + """ + :type function: types.FunctionType + :rtype: types.FunctionType + """ + + @functools.wraps(function) + def wrapper(*args, **kwargs): + logger.debug("%s validating parameters...", flask.request.url) + + response = function(*args, **kwargs) + return response + + return wrapper diff --git a/connexion/operation.py b/connexion/operation.py index 1b47fb799..e61e140ef 100644 --- a/connexion/operation.py +++ b/connexion/operation.py @@ -16,7 +16,7 @@ from connexion.decorators.produces import BaseSerializer, Produces, Jsonifier from connexion.decorators.security import security_passthrough, verify_oauth -from connexion.decorators.validation import RequestBodyValidator +from connexion.decorators.validation import RequestBodyValidator, ParameterValidator from connexion.exceptions import InvalidSpecification from connexion.utils import flaskify_endpoint, get_function_from_name, produces_json @@ -147,8 +147,7 @@ def function(self): logger.debug('... Adding security decorator (%r)', security_decorator, extra=vars(self)) function = security_decorator(function) - validation_decorator = self.__validation_decorator - if validation_decorator: + for validation_decorator in self.__validation_decorators: function = validation_decorator(function) return function @@ -238,9 +237,11 @@ def __security_decorator(self): return security_passthrough @property - def __validation_decorator(self): + def __validation_decorators(self): """ :rtype: types.FunctionType """ + if self.parameters: + yield ParameterValidator(self.parameters) if self.body_schema: - return RequestBodyValidator(self.body_schema) + yield RequestBodyValidator(self.body_schema)