[Julien Anguenot]
>> +    def beforeCommitHookOrdered(hook, order, *args, **kws):
>> +
>> """Register a hook to call before the transaction is committed. ...
>> +        Note, a hook __call__() method can't define any 'order' argument
>> +        this one is reserved by this method

[Florent Guillaume]
> If that's a concern, maybe it can be called order__ or something ? What's
> the pythonic way to do this ?

It would be more accurate to say that the hook's __call__ method can't be
invoked with a keyword argument named `order`.  The same is equally true of
invoking it with a keyword argument named `hook`.  There's no problem if
__call__ defines arguments named `hook` and/or `order` provided those are
passed positionally to __call__.

The problem (such as it is) is really inherited from the older function:

    def beforeCommitHook(self, hook, *args, **kws):

The "most Pythonic" way would have been to define that as

    def beforeCommitHook(self, hook, args=(), kws=None):
        if kws is None:
            kws = {}

much like Python's thread.start_new_thread() and threading.Thread()
constructor.  Then Julien could have added an optional new `order=0`
argument to the old function too (instead of creating an additional

While not ideal, it's minor, and naming the fixed arguments (in both
methods), e.g., __hook and __order would remove most of the little ugliness.

For more information about ZODB, see the ZODB Wiki:

ZODB-Dev mailing list  -  ZODB-Dev@zope.org

Reply via email to