[mod_python] Re: Re: some questions about using mod_python

vegetax vegeta.z at gmail.com
Sun Mar 20 20:02:10 EST 2005

Graham Dumpleton wrote:

> vegetax wrote ..
>> Graham Dumpleton wrote:
>> >> - Where do i set a database connection pool to load at server
>> >> initialization ,so that all request can access it? is the pythonImport
>> >> directive the best place? where do i set a clean up function for the
>> >> pool
>> >> at server finalization ?
>> > 
>> > Cleanup function registration for stuff that should be done at time of
>> > child
>> > termination can only be done with req.server.register_cleanup(). There
>> > probably should be an apache.register_cleanup() method which would be
>> > available from a module imported using PythonImport. This would then
>> be
>> > the
>> > best way of doing it.
>> > 
>> > It seems that the best one could do now is import the module when
>> > required
>> > but don't do anything at the time of import which would require a
>> > cleanup
>> > function to be registered. Then, when the first handler calls in to the
>> > actual module, require that the "req" object be passed into the pool,
>> > with
>> > those resources which need to be cleaned up later being created then
>> > with a
>> > cleanup function being registered through
>> > req.server.register_cleanup().
>> > 
>> > I have added a bug report suggesting that apache.register_cleanup() be
>> > added to allow it to be used from module imported using PythonImport.
>> But is to problematic to clean resources at request level, i think in the
>> midtime i will be cleaning up resources like connections with an external
>> script which i run after apache exits.
> I perhaps didn't explain it properly or I don't understand what you are
> saying.
>>From a request object there are two ways of registering a cleanup
> function. The first is:
>   req.register_cleanup()
> The register function in this case will be called when the handler for
> that specific request is finished.
> The other which I referenced was:
>   req.server.register_cleanup()
> This registers a function which will only be called when the Apache
> process itself terminates. Ie., when one does apachectl stop or
> restart.
> Thus, wasn't talking about cleaning up resources at request level.
> The unfortunate bit was that since apache.register_cleanup() doesn't
> exist, one has to defer registration of cleanup function for process
> termination until one has access to req.server, which is at point of
> first request that needs pool.
>> > FWIW, in Vampire, when Vampire's module importing mechanism is used a
>> > stripped down request object is available in the set of global
>> > variables during import as __req__. Thus in Vampire one could actually
>> > register a cleanup function during import by using:
>> > 
>> >    __req__.server.register_cleanup(....)
>> > 
>> > This would save each handler having to pass the req object into a pool
>> > and
>> > means one wouldn't have to delay creation of resources which needed the
>> > cleanup function to be registered.
>> Looks like a good solution when the clean up is needed per request,and
>> is
>> also posible that the pool component was made by someone else,and cant
>> take
>> req as parameter.
> Again, not talking per request here as am registering cleanup handler
> via the server object and not the actual request object.

Sorry about the missunderstanding,i see the irony of the
req.server.register_cleanup, maybe adding a PythonCleanUp directive ?
>> > BTW, have you considered other page templating solutions besides PSP?
>> > In terms
>> > of best separation between model, view and controller, or at least
>> > between the
>> > HTML that represents a page and the code that populates it, I would
>> > recommend
>> > using HTMLTemplate.
>> > 
>> >    http://freespace.virgin.net/hamish.sanderson/htmltemplate.html
>> > 
>> > Why I prefer it over PSP is that in PSP you are effectively still
>> > embedding
>> > Python code in the template itself and to render the template you are
>> > actually
>> > executing it, with there being call outs from the template to collect
>> > data.
>> > In HTMLTemplate, the template object is distinct, with your controller
>> > code
>> > making calls into the template object when desired to set fields within
>> > it.
>> > Ie., DOM like but not having the overhead of a DOM because only
>> > fillable parts
>> > of the template are indexed.
>> > 
>> > What this means is that with HTMLTemplate you aren't forced to prepare
>> > all your
>> > data up front before filling in the template, instead you can fill it
>> > in bit
>> > by bit.
>> > 
>> > I can supply references to example of using HTMLTemplate from Vampire
>> > later if
>> > you are interested.
>> > Graham
>> Thanks for the advice graham,but i dont share the philosophy kind of
>> those templates engines, first and last it uses its own tag language, i
>> HATE that.
> Huh. PSP also defines its own language within HTML so I don't really
> see the difference. I personally find the PSP syntax more confusing,
> more complicated and more error prone especially if embedding actual
> Python code. Please don't confuse HTMLTemplate with systems like
> TAL and Metal. It is different and much simpler, with the manner in
> which pages are constructed and then rendered being different as well.
>> I like psp because it lets you embed python code, so that i can
>> generate complex dynamic views,but the code inside the psp is only for
>> content displaying, 100% of the form processing is done by the controler
>> calling domain object's methods! in extremely exceptional situations the
>> psp code will have a litle processing or data gathering, but those are
>> only
>> exceptions, the key here is that the team respect the rules.
>> I work with web designers,you simply cant let them touch the dynamic
>> parts,those parts tend to be complex,they should work in the static parts
>> and coordinate with the programmer in charge of the dynamic view
>> generation,and then plug dynamic and static parts together, in order to
>> coordinate they MUST have some programming knowledge ,anyway i use
>> javascript a lot and i dont take a person who doesnt know javascript as
>> a
>> web designer.Thats my point of view.
> When using HTMLTemplate the web designers don't need to touch
> any Python code at all and thus don't go anywhere near the controller
> aspects of the application. Because HTMLTemplate is standard XHTML
> the web designer can even use high level web design tools. All they
> need to do is add the appropriate namespace designated attributes
> in the XHTML as per Python coders directions as to what data will be
> filled in. The web designer can even put in dummy data in the template
> as place holders so the pages look correct for some set of data when
> they are designing it, with the dummy content being replaced by the
> controller code when it runs.

> Anyway, there is probably no point continuing this particular discussion.

I also agree with you =) in that ,is just that we have different
methodologies and/or requirements,which need different tools to work well.

More information about the Mod_python mailing list