[Zope] automagic reindexing of objects

Florent Guillaume fg at nuxeo.com
Wed Jun 22 09:31:43 EDT 2005


Have a look at how CPS uses this hook to delay indexing to the end of  
the transaction.

Code is at http://svn.nuxeo.org/trac/pub/file/CPSCore/trunk/ 
IndexationManager.py

Then in all objects for which we want to delay indexing, we replace  
the reindexObject() method with:

     def reindexObject(self, idxs=[]):
         """Schedule object for reindexation
         """
         get_indexation_manager().push(self, idxs=idxs)

And the IndexationManager calls _reindexObject at the end of the  
transaction.

This is done for instance in http://svn.nuxeo.org/trac/pub/file/ 
CPSCore/trunk/ProxyBase.py

Florent


On 22 Jun 2005, at 14:58, Jürgen Herrmann wrote:

> hi all!
>
> as i had time to look at all the stuff, i realized, that i'm
> getting closer, but this is not exactly what i wanted...
>
> as i can see from the path, one has to call:
>     beforeCommitHook(method, **args, **kwargs)
> on each transaction, correct?
> this is contrary to my idea of everything doing it's work  
> "automagically".
>
> what i want is a kind of callback to each dirty object, something like
> this:
>
> class Transaction(...):
>   def commit(self, ...):
>     # insert this:
>     for object in self._objects:
>       try:
>         object._before_transaction_commit()
>       except AttributeError:
>         pass
>     # rest of original commit() follows...
>
> could this impose any unforseen behaviour?
> btw: what version of the two following is better (i.e. faster and more
> elegeant, i do python coding since abt. 6months only...)
>
>       try:
>         object._before_transaction_commit()
>       except AttributeError:
>         pass
>
> or
>       hook = object.get('_before_transaction_commit', None)
>       if hook: hook()
>
> another question: is it hook() or hook(object) in the previous line?
> i never know if the self parameter has to be passed in if not called
> as self.method() - are there any (simple) rules?
>
> regards, juergen herrmann
>
> [ Florent Guillaume wrote:]
>
>> Dieter Maurer  <dieter at handshake.de> wrote:
>>
>>> Jürgen Herrmann wrote at 2005-6-17 14:19 +0200:
>>>
>>>> i make heavy use of indexes in my extension classes. these all  
>>>> inherit
>>>> from catalogpathaware, so i have to call object.reindex_object() on
>>>> each changed instance. calling it from attribute getters/setters  
>>>> f.ex.
>>>> is not a good idea, because changing 3 attributes will reindex the
>>>>
>>> object
>>>
>>>> 3 times.
>>>>
>>>> what i'd like to have is that such objects are reindexed  
>>>> automatically
>>>> before comitting a transaction.
>>>>
>>>> is it possible? where should i start looking in the source, is  
>>>> there
>>>> possibly a before_transaction_commit hook?
>>>>
>>>
>>> It is impossible with "ZODB 3.2" (unless you patch
>>> "ZODB.Transaction.Transaction").
>>>
>>
>> The CPSCompat module of CPS has monkey-patches that backport this  
>> from
>> ZODB 3.4, among others, to be used in Zope 2.7.
>>
>> http://svn.nuxeo.org/trac/pub/file/CPSCompat/trunk/ 
>> PatchZODBTransaction.py
>>
>> Florent
>>
>>
>>> "ZODB 3.4" (which is used for Zope 2.8/3.1) has hooks
>>> that makes it possible.
>>>
>>
>>
>> --
>> Florent Guillaume, Nuxeo (Paris, France)   CTO, Director of R&D
>> +33 1 40 33 71 59   http://nuxeo.com   fg at nuxeo.com
>> _______________________________________________
>> Zope maillist  -  Zope at zope.org
>> http://mail.zope.org/mailman/listinfo/zope
>> **   No cross posts or HTML encoding!  **
>> (Related lists -
>>  http://mail.zope.org/mailman/listinfo/zope-announce
>>  http://mail.zope.org/mailman/listinfo/zope-dev )
>>
>>
>
>
> ______________________________________________________________________ 
> _
>
>
>>> XLhost.de - eXperts in Linux hosting <<
>>>
>
> Juergen Herrmann
> Weiherweg 10, 93051 Regensburg, Germany
> Fon:  +49 (0)700 XLHOSTDE [0700 95467833]
> Fax:  +49 (0)721 151 463027
>
> ICQ:  27139974  -  IRC: #XLhost at quakenet
> WEB:  http://www.XLhost.de
>

-- 
Florent Guillaume, Nuxeo (Paris, France)   CTO, Director of R&D
+33 1 40 33 71 59   http://nuxeo.com   fg at nuxeo.com




More information about the Zope mailing list