[Grok-dev] Re: Initialization/Background Code? Search the grok-dev list?

Philipp von Weitershausen philipp at weitershausen.de
Sat Jun 7 17:14:13 EDT 2008

Philipp von Weitershausen wrote:
> Kenneth Miller wrote:
>>     Is there a quick way to search the grok-dev mailing list? It's a 
>> bit hard to open it up by month and check out the subjects..
> Use Google and the "site:mail.zope.org" modifier.
>>     Is there anywhere to put initialization code into an app or view? 
>> I've got a bit of code that parses some local files under the static 
>> directory, and I'm not sure where to place the code to do this. The 
>> data needs to be available to a particular view and it's associated 
>> viewlets, and *should* be updated whenever the view is called.
> Views have an update() method for doing things that should happen before 
> the view is rendered (by a template).
> What is it that you're putting into the 'static' directory, though? It's 
> only meant for application-specific resources, such as images, CSS 
> files, JavaScripts, etc.
>>     How can I create a new thread for constant background updates?
> By using Python's thread or threading module.
>> I want to access information from the PyPI, but the rate at which I 
>> need information is too fast to call the PyPIs XML-RPC methods in 
>> order to retrieve the information. My solution was to keep a local 
>> "copy" of the PyPI index for quick access, but I need a thread or 
>> something that updates that local copy at a regular interval (every 
>> hour or so) and doesn't depend on a View to be called.
> Sounds reasonable. You can even open a connection to the database from 
> that thread and modify the ZODB (which is, I think, what you want to do 
> in order to store the data):
>   import transaction
>   from zope.component import getUtility
>   from ZODB.interfaces import IDatabase
>   db = getUtility(IDatabase)
>   conn = db.open()
>   root = db.root()['Application']

That should be conn.root()['Application']

>   # do modifications here to root[...]
>   transaction.commit()
>   conn.close()
> Just remember to keep the connection (and more importantly, the 
> transaction) short-lived so that you won't risk conflict errors with 
> concurring threads.

More information about the Grok-dev mailing list