wonderbeyond
10/13/2017 - 5:10 AM

flask request id for both server and client

flask request id for both server and client

from flask import request, g
from xid import Xid


def _init_request_id():
    """
    See also:
        http://blog.mcpolemic.com/2016/01/18/adding-request-ids-to-flask.html
    """
    # See: https://www.nginx.com/blog/application-tracing-nginx-plus/
    request_id = request.headers.get('X-Request-ID')

    if not request_id:
        request_id = Xid().string()

    g.request_id = request_id


def _set_resp_header(resp):
    resp.headers.add('X-Request-ID', g.request_id)
    return resp


class RequestID(object):
    """
    app = Flask(__name__)
    RequestID(app)

    @app.route('/req-id')
    def req_id():
        return "{0} is the unique ID for the request, "
               "which is also in response headers".format(g.request_id)
    """
    def __init__(self, app):
        self.app = app
        self.init_app(app)

    def init_app(self, app):
        app.before_request(_init_request_id)
        app.after_request(_set_resp_header)