Clodoaldo
clodoaldo.pinto.neto at gmail.com
Sat Dec 2 18:34:39 EST 2006
2006/12/2, Graham Dumpleton <grahamd at dscpl.com.au>: > > On 03/12/2006, at 5:12 AM, Clodoaldo wrote: > > > I want all the Publisher produced pages to be Apache DEFLATEd. So i > > added this directive to the virtual server configuration. > > > > AddOutputFilter DEFLATE py > > > > As the Publisher does not require a py extension this obviously does > > not work. The AddOutputFilterByType directive is said to be deprecated > > in the 2.2.3 manual. So i add req.add_output_filter('DEFLATE') to the > > script and it works. But it will have to be added to all the scripts. > > Is there a way to set the DEFLATE filter to all Publisher scripts? > > > > If i use "SetOutputFilter DEFLATE" it will deflate everything > > including images and i will have to somehow disable it for the files > > or directories i eventually don't want to be deflated. > > > > I looked at the PythonOutputFilter but to activate it the > > AddOutputFilter directive must be used and it is back to the original > > problem. Or do I understand it wrong? > > Presuming you are using something like: > > SetHandler mod_python > PythonHandler mod_python.publisher > That's what i am using. Should have declared it first. > Instead using something like: > > SetHandler mod_python > PythonHandler ~/_filters.py > PythonHandler mod_python.publisher > > Then in '_filters.py' in the handler root directory have: > > from mod_python import apache > > def handler(req): > req.add_output_filter('DEFLATE') > return apache.OK > > This is making use of the ability to stack handlers, ie., have more than > one executed for the phase. > > You could also have written: > > SetHandler mod_python > PythonHandler ~/_publisher.py > > Then in '_publisher.py' in the handler root directory have: > > from mod_python import publisher > > def handler(req): > req.add_output_filter('DEFLATE') > return publisher.handler(req) > Both solutions are great! I took the last one and applied it immediately. > I have used an underscore prefix for the file adding the filter as > then publisher > will ignore it and not allow requests against it. > > Note for others, this requires mod_python 3.3 as it is only in 3.3 > which the > ability to add output filters dynamically was added. Knowing it was > 3.3, I have > used the path method for referencing a module in the handler directive, > which is another new 3.3 feature. > > BTW, using a wrapper like '_publisher.py' is also one way of managing > the > creation of user sessions without having to add the session code in > every > handler. For example: > > from mod_python import publisher, Session > > def handler(req): > req.add_output_filter('DEFLATE') > req.session = Session.Session(req) > if req.session.is_new(): > ... > ... > return publisher.handler(req) This tip is Very important. > > For more complicated session stuff requiring login and which needs to > control > access to static files or other types of handlers, you are much > better off using > an authenhandler(), something which is much easier to do properly in > 3.3. > > Graham > -- Clodoaldo Pinto Neto
|