Skip to content
Snippets Groups Projects
Select Git revision
  • 0d7f33fbbf984254fc8be74cf1ed1606b0d9ebfe
  • develop default
  • master protected
  • feature/frontend-tests
  • 0.98
  • 0.97
  • 0.96
  • 0.95
  • 0.94
  • 0.93
  • 0.92
  • 0.91
  • 0.90
  • 0.89
  • 0.88
  • 0.87
  • 0.86
  • 0.85
  • 0.84
  • 0.83
  • 0.82
  • 0.81
  • 0.80
  • 0.79
24 results

SurveyContainerComponent.tsx

Blame
  • common.py 1.45 KiB
    """
    Utilities used by multiple route blueprints.
    """
    import functools
    import logging
    from flask import request, Response
    
    logger = logging.getLogger(__name__)
    _DECODE_TYPE_XML = 'xml'
    _DECODE_TYPE_JSON = 'json'
    
    
    def require_accepts_json(f):
        """
        used as a route handler decorator to return an error
        unless the request allows responses with type "application/json"
        :param f: the function to be decorated
        :return: the decorated function
        """
        @functools.wraps(f)
        def decorated_function(*args, **kwargs):
            # TODO: use best_match to disallow */* ...?
            if not request.accept_mimetypes.accept_json:
                return Response(
                    response="response will be json",
                    status=406,
                    mimetype="text/html")
            return f(*args, **kwargs)
        return decorated_function
    
    
    def after_request(response):
        """
        Generic function to do additional logging of requests & responses.
    
        :param response:
        :return:
        """
        if response.status_code != 200:
    
            try:
                data = response.data.decode('utf-8')
            except Exception:
                # never expected to happen, but we don't want any failures here
                logging.exception('INTERNAL DECODING ERROR')
                data = 'decoding error (see logs)'
    
            logger.warning('"%s %s" "%s" %s' % (
                request.method,
                request.path,
                data,
                str(response.status_code)))
        return response