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 <work.cedricjos...@gmail.com> 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 <slugg...@gmail.com> 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 <work.ced...@gmail.com> 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 <tfl...@gmail.com>
>>>>> 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 <
>>>>>> pylons-...@googlegroups.com> 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 pylons-discus...@googlegroups.com.
>>>>>>> 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
>>>>>> pylons-discus...@googlegroups.com.
>>>>>> 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 pylons-discus...@googlegroups.com.
>>>>> 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 <slugg...@gmail.com>
>>>>
>>>
>>>
>>> --
>>> Mike Orr <slugg...@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/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 pylons-discuss+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/pylons-discuss/CAPX_VWARWr5REbBcmGUOPG6C%3DtvhbRi8BOQKmBWG0q8AGTjvuA%40mail.gmail.com.

Reply via email to