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  <[EMAIL PROTECTED]> 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   [EMAIL PROTECTED]
_______________________________________________
Zope maillist  -  Zope@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: [EMAIL PROTECTED]
WEB:  http://www.XLhost.de


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


_______________________________________________
Zope maillist  -  Zope@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 )

Reply via email to