Friday, 24 December 2021

Field does not add into header in quart / flask middleware

I’m trying to log data in Flask Middleware. I use a process_response function to log the response data.

I have this code block where I’m trying to inject the time duration to the headers of the response. However the X-Time-Taken isn't being added to the header. The response header is request header: Content-Type: text/plain; charset=utf-8.

Why is X-Time-Taken not being added to the header?

FYI, I'm basing my code off this which suggests that what I'm doing should work.

class SampleWSGI():    
    def __init__(self, app, config=None):
        self.app = app
        self.app_id = config["app_id"]
        self.secret_key = config["secret_key"]

    def __call__(self, environ, start_response):
        request = Request(environ)
        resp = Response(start_response)
        self._process_response(self.app_id, resp)
        apikey = request.args.get("apikey")
        if "favicon.ico" in request.path:
            return

        x = self.authorize_user(apikey=apikey, client_path=request.path)
        if x.status_code < 400:

            ##Injects duration into response time
            start_time = datetime.utcnow().timestamp()
            def injecting_start_response(status, headers, exc_info=None):
                end_time = datetime.utcnow().timestamp()
                time_taken = str(end_time - start_time)
                headers.append(('X-Time-Taken', time_taken))
                return start_response(status, headers, exc_info)
        
            return self.app(environ, injecting_start_response)
        
        res = Response(u'Authorization failed', mimetype= 'text/plain', status=x.status_code)
        return res(environ, start_response)

    @staticmethod
    def _process_response(app_id, response, request):
        #req = Request(environ, shallow=True)
        print(f'request header: {response.headers}')


from Field does not add into header in quart / flask middleware

No comments:

Post a Comment