from sanic import Sanic, Blueprint
from sanic.response import text
'''
Demonstrates that blueprint request middleware are executed in the order they 
are added. And blueprint response middleware are executed in _reverse_ order.
On a valid request, it should print "1 2 3 6 5 4" to terminal
'''

app = Sanic(__name__)

bp = Blueprint("bp_"+__name__)

@bp.middleware('request')
def request_middleware_1(request):
    print('1')

@bp.middleware('request')
def request_middleware_2(request):
    print('2')

@bp.middleware('request')
def request_middleware_3(request):
    print('3')

@bp.middleware('response')
def resp_middleware_4(request, response):
    print('4')

@bp.middleware('response')
def resp_middleware_5(request, response):
    print('5')

@bp.middleware('response')
def resp_middleware_6(request, response):
    print('6')

@bp.route('/')
def pop_handler(request):
    return text('hello world')

app.blueprint(bp, url_prefix='/bp')

app.run(host="0.0.0.0", port=8000, debug=True, auto_reload=False)