The includeme function takes care of all the tween registration for you, so you just have to include the module using the "pyramid.includes" setting or such. You've got that working.
Since you're enabling maintenance mode with a config setting, and you'll have to restart the application to change it, you can hoist the 'in_maintenance' setting check into the includeme function. E.g., if registry.settings.get("in_maintenance", False): tween = __name__ + ".maintenance_tween_factory" config.add_tween(tween) That way the tween will be registered only if maintenance mode is enabled. That will simplify your tween code slightly and is one millisecond more efficient. As for your other problems of the maintenance screen never appearing, or not appearing with the right URLs (I'm not sure which), I would add some print or logging statements in the tween function to confirm it's being called and see what its request.url, request,matchdict, and request.path are. (I prefer request.path over request.url.) They may be different from what you expect, and if so we'd need to figure out why. I would also simplify the 'if not ... or not ...' expressions. While I don't see anything in particular wrong with them, there may be a logic error buried in the expressions somewhere, and separating them out and printing the intermediate values may reveal what it is On Fri, Jan 8, 2021 at 9:06 AM C J <work.cedricjos...@gmail.com> wrote: > > I try to understand why my "or not" have no effect: > > def maintenance_tween_factory(handler, registry): > # Return a tween callable. > # 'handler' is the next tween or the WSGI application. > # Deployment settings are in 'registry.settings'. > def maintenance_tween(request): > #print(request) > is_maintenance_mode = registry.settings.get("in_maintenance") > if is_maintenance_mode == "True": > print(request.url) > print("maintenance" in request.url) # True but still affected by > the maintenance mode > url = request.route_url('maintenance') > if \ > not "/api/dbmigration" in request.url \ > or not "maintenance" in request.url: > return HTTPServiceUnavailable( > "Please note that we will be performing important server > maintenance in a few minutes, during which time the server will be > unavailable. If you are in the middle of something important, please save > your work or hold off on any critical actions until we are finished." > ) > #return HTTPServiceUnavailable(location=url) > > # # Could limit it to certain request.path's. > # if not ("/api/dbmigration" in request.url and is_maintenance_mode > == "True") \ > # or not ("maintenance" in request.url and > is_maintenance_mode == "True"): > # # Return an error response, bypassing the application. > # return HTTPServiceUnavailable( > # "Please note that we will be performing important > server maintenance in a few minutes, during which time the server will be > unavailable. If you are in the middle of something important, please save > your work or hold off on any critical actions until we are finished." > # ) > else: > # Call next tween/application and return its response > unchanged. > return handler(request) > else: > # Call next tween/application and return its response unchanged. > return handler(request) > return maintenance_tween >>> >>> > -- > You received this message because you are subscribed to the Google Groups > "pylons-discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to pylons-discuss+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/pylons-discuss/3ea70938-5f98-4a6b-97ba-25dea5edc50dn%40googlegroups.com. -- Mike Orr <sluggos...@gmail.com> -- You received this message because you are subscribed to the Google Groups "pylons-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to pylons-discuss+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/pylons-discuss/CAH9f%3Dup5QbwVk%2BR1RixLPEHV%3DqMsA%2BCTUXO6RbGEy-sz6R73xg%40mail.gmail.com.