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

Philipp von Weitershausen philipp at weitershausen.de
Sat Jun 7 17:11:42 EDT 2008


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']
   # 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