I get 'No module named 'maintenance_tween'. Should I separate the two functions in 2 different files, both of them being in the same module?
Le vendredi 8 janvier 2021 à 13:04:57 UTC+1, [email protected] a écrit : > Hi Cedric, > You just have to include your package from Pyramid main configuration > file, using the "includes" section... > The "includeme" function will then be called automatically to register > your tween! > > Thierry > -- > https://www.ulthar.net -- http://pyams.readthedocs.io > > Le ven. 8 janv. 2021 à 12:06, C J <[email protected]> a écrit : > >> I fixed my code by returning the function inside. But I still need to >> understand where to call theses functions to set everything up. >> >> 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(handler, request): >> is_maintenance_mode = request.registry.settings["in_maintenance"] >> if is_maintenance_mode and not "dbmigration" in request.matchdict: # >> Could limit it to certain request.path's. >> # Return an error response, bypassing the application. >> return pyramid.response.HTTPServiceUnavailable( >> { >> "Maintenance": "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) >> return maintenance_tween >> Le vendredi 8 janvier 2021 à 11:36:52 UTC+1, C J a écrit : >> >>> To everybody: thanks a lot for your answers. Sorry for the delay: I am >>> living in France. >>> Bay the way I am still interested in the Pyramid CMS solution steps. >>> >>> Mike, >>> I have created a file named maintenance.py in my utils module. >>> It contains: >>> >>> import pyramid >>> >>> def includeme(config): >>> # Calculate the dotted name of the factory function. >>> # E.g., "myapp.lib.mytween.my_tween_factory". >>> maintenance_tween = __name__ + ".maintenance_tween_factory" >>> config.add_tween(maintenance_tween) >>> # You can wrap app this in an 'if' to conditionally enable it; e.g., >>> # ``if >>> pyramid.settings.asbool(config.registry.settings.get("myoption", True))`` >>> >>> >>> 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 my_tween(handler, request): >>> is_maintenance_mode = request.registry.settings["in_maintenance"] >>> if is_maintenance_mode and not "dbmigration" in request.matchdict: # >>> Could limit it to certain request.path's. >>> # Return an error response, bypassing the application. >>> return pyramid.response.HTTPServiceUnavailable( >>> { >>> "Maintenance": "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) >>> return maintenance_tween >>> >>> I have also added *in_maintenance = True* in my production.ini >>> file. >>> >>> >>> - Now where should I import this modules? Where should I call these >>> functions? >>> - Another point is that *maintenance_tween * is unknow in th context >>> of def maintenance_tween_factory(handler, registry) so will >>> *return maintenance_tween* work? >>> - Also I want a Cornice API (dbmigration) which is in my views >>> module to still be available in production when I send a POST request or >>> a >>> GET request to /dbmigration during the maintenance time. >>> >>> I have read >>> https://pyramid.readthedocs.io/en/latest/narr/hooks.html#registering-tweens >>> But I do not understand very well where to write and call the tweens >>> lines of code. >>> >>> >>> Le vendredi 8 janvier 2021 à 07:47:18 UTC+1, Mike Orr a écrit : >>> >>>> I forgot the last line. The end of 'my_tween_factory' needs to 'return >>>> my_tween'. >>>> >>>> On Thu, Jan 7, 2021 at 7:05 PM Mike Orr <[email protected]> wrote: >>>> >>>>> I have a request-logging tween in only a page of code. It's >>>>> straightforward to write from the documentation. >>>>> >>>>> >>>>> https://pyramid.readthedocs.io/en/latest/narr/hooks.html#registering-tweens >>>>> >>>>> I adapted the code for your use case (untested). Your module would >>>>> have something like this: >>>>> >>>>> # Module 'myapp.lib.mytween' >>>>> >>>>> def includeme(config): >>>>> # Calculate the dotted name of the factory function. >>>>> # E.g., "myapp.lib.mytween.my_tween_factory". >>>>> factory_name = __name__ + ".my_tween_factory" >>>>> config.add_tween(factory_name) >>>>> # You can wrap app this in an 'if' to conditionally enable it; >>>>> e.g., >>>>> # ``if >>>>> pyramid.settings.asbool(config.registry.settings.get("myoption", True))`` >>>>> >>>>> def my_tween_factory(handler, registry): >>>>> # Return a tween callable. >>>>> # 'handler' is the next tween or the WSGI application. >>>>> # Deployment settings are in 'registry.settings'. >>>>> def my_tween(handler, request): >>>>> if is_maintenance_mode: # Could limit it to certain >>>>> request.path's. >>>>> # Return an error response, bypassing the application. >>>>> return >>>>> pyramid.response.HTTPServiceUnavailable(maintenance_message) >>>>> else: >>>>> # Call next tween/application and return its response >>>>> unchanged. >>>>> return handler(request) >>>>> >>>>> Then list your module in 'pyramid.includes' in the config file. E.g., >>>>> "myapp.lib.mytween". >>>>> >>>>> That 'if is_maintenance_mode' condition could check whether a >>>>> specified file exists. The file path could be in a config setting. >>>>> >>>>> On Thu, Jan 7, 2021 at 3:32 PM C J <[email protected]> wrote: >>>>> >>>>>> >>>>>> That's really interesting Thierry. Can you please show me how to do? >>>>>> I have tried to use tweens. I tried many things starting with >>>>>> *pyramid.tweens = pyramid_maintenance.tween_maintenance *and >>>>>> modifying the *__init__.py* file, however, I do not understand what >>>>>> they are and how to use them despite hours spent reading the Pyramid >>>>>> documentation and different articles. >>>>>> Being working on a website that is already in production I also >>>>>> wonder how I would be able to implement your solution based on an >>>>>> external >>>>>> CMS. >>>>>> >>>>>> >>>>>> [image: Mailtrack] >>>>>> <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&> >>>>>> Sender >>>>>> notified by >>>>>> Mailtrack >>>>>> <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&> >>>>>> 07/01/21 >>>>>> à 21:59:31 >>>>>> >>>>>> On Thu, Jan 7, 2021 at 9:22 PM Thierry Florac <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> I've built a custom Pyramid tween to handle this and redirect >>>>>>> requests while application is up! >>>>>>> It can handle redirects (based on regular expressions) before or >>>>>>> after the request is handled by Pyramid application, to be able to set >>>>>>> the >>>>>>> site in "maintenance mode", or to handle custom redirects in case of >>>>>>> NotFound exceptions... >>>>>>> All configuration is done through our Pyramid CMS. >>>>>>> >>>>>>> Best regards, >>>>>>> Thierry >>>>>>> -- >>>>>>> https://www.ulthar.net -- http://pyams.readthedocs.io >>>>>>> >>>>>>> >>>>>>> Le jeu. 7 janv. 2021 à 18:43, 'Jonathan Vanasco' via pylons-discuss < >>>>>>> [email protected]> a écrit : >>>>>>> >>>>>>>> I typically handle this on nginx which sites in front of Pyramid. >>>>>>>> if you wanted to do everything in python, you could probably use WSGI >>>>>>>> middleware to route to a separate maintenance application or html file. >>>>>>>> >>>>>>>> On Thursday, January 7, 2021 at 10:09:34 AM UTC-5 C J wrote: >>>>>>>> >>>>>>>>> Hi everybody, >>>>>>>>> >>>>>>>>> I am looking for an easy way to temporarily redirect all the users >>>>>>>>> of my pyramid website to a maintenance vue without having to >>>>>>>>> comment/delete, etc my routes. >>>>>>>>> I would like to make it easy to re-activate the others routes when >>>>>>>>> the maintenance is done. >>>>>>>>> I found this : >>>>>>>>> https://pypi.org/project/pyramid_maintenance/ >>>>>>>>> but I always get : >>>>>>>>> >>>>>>>>> in renderer >>>>>>>>> raise ValueError('No such renderer factory %s' % >>>>>>>>> str(self.type)) >>>>>>>>> ValueError: No such renderer factory .jinja2" >>>>>>>>> >>>>>>>>> with my browser displaying : >>>>>>>>> "Internal Server Error The server encountered an unexpected >>>>>>>>> internal server error (generated by waitress)" >>>>>>>>> >>>>>>>>> I am new to Pyramid so please give me the necessary details step >>>>>>>>> by step. >>>>>>>>> >>>>>>>>> Best regards. >>>>>>>>> Cedric J. >>>>>>>>> >>>>>>>> -- >>>>>>>> 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/98a779a5-5bcc-4971-a271-a202cc49f732n%40googlegroups.com >>>>>>>> >>>>>>>> <https://groups.google.com/d/msgid/pylons-discuss/98a779a5-5bcc-4971-a271-a202cc49f732n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>> . >>>>>>>> >>>>>>> -- >>>>>>> You received this message because you are subscribed to a topic in >>>>>>> the Google Groups "pylons-discuss" group. >>>>>>> To unsubscribe from this topic, visit >>>>>>> https://groups.google.com/d/topic/pylons-discuss/jKTnofibd00/unsubscribe >>>>>>> . >>>>>>> To unsubscribe from this group and all its topics, send an email to >>>>>>> [email protected]. >>>>>>> To view this discussion on the web visit >>>>>>> https://groups.google.com/d/msgid/pylons-discuss/CAPX_VWBO5j0im6r0RRKEf%3D%3DzXyx5y_Qp%3DUJ5bntEGQtdiDejKQ%40mail.gmail.com >>>>>>> >>>>>>> <https://groups.google.com/d/msgid/pylons-discuss/CAPX_VWBO5j0im6r0RRKEf%3D%3DzXyx5y_Qp%3DUJ5bntEGQtdiDejKQ%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>>> . >>>>>>> >>>>>> -- >>>>>> 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/CAJgq6FJC11OfFNbfhhPwfMKRJsJfpd2UpWUDs5SAm5hKaMWpzA%40mail.gmail.com >>>>>> >>>>>> <https://groups.google.com/d/msgid/pylons-discuss/CAJgq6FJC11OfFNbfhhPwfMKRJsJfpd2UpWUDs5SAm5hKaMWpzA%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>> . >>>>>> >>>>> >>>>> >>>>> -- >>>>> 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/e72f1fc0-a202-4244-8e57-576053b68ce2n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/pylons-discuss/e72f1fc0-a202-4244-8e57-576053b68ce2n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- 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/f81d7635-a131-4ffc-8d85-e68bcc3d7ab2n%40googlegroups.com.
