Don't forget the 'asbool()'. Without it the 'in_maintenance' text
setting value may be interpreted wrong. E.g., '0' or ' ' or 'false'
would evaluate to True.

On Sat, Jan 9, 2021 at 11:30 AM Mike Orr <[email protected]> wrote:
>
> 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 <[email protected]> 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 [email protected].
> > 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 <[email protected]>



-- 
Mike Orr <[email protected]>

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/pylons-discuss/CAH9f%3DurawVFxb5XRdWrq5Qu8GjgrO8qNcGqHpymxGMZfLT3A7w%40mail.gmail.com.

Reply via email to