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.

Reply via email to