[Zope3-dev] Re: Subscriber Ordering
Philipp von Weitershausen
philipp at weitershausen.de
Thu Nov 4 18:50:55 EST 2004
Tres Seaver wrote:
> Philipp von Weitershausen wrote:
>
>> Tres Seaver wrote:
>>
>>> Philipp von Weitershausen wrote:
>>>
>>>> Jim Fulton wrote:
>>>>
>>>>> Currently, the order that subscription adapters are called in is
>>>>> undefined [1]_. Sometimes, we *do* want some control over the order
>>>>> of subscriber notification. There are a number of ways to do this:
>>>>>
>>>>> 1. You can publish multiple events. This has the disadvantage that
>>>>> the publisher of the events has to be aware of the desired
>>>>> ordering. It doesn't work if the ordering is a policy of the
>>>>> subscribers themselves.
>>>>>
>>>>> 2. If a subscriber needs to come after some earlier subscriber, we
>>>>> have the earlier subscriber generate an event. The later subscriber
>>>>> subscribes to the event generated by the earlier subscriber, rather
>>>>> than to the original event. This requires the collaboration of the
>>>>> subscribers to implement the policy.
>>>>>
>>>>> It would be nice, at times, to provide the ordering policy outside the
>>>>> subscribers and the notifiers. Here is an idea.
>>>>>
>>>>> - We allow subscribers to be named. There could be multiple
>>>>> subscribers of the same type [2]_ and name, so the names will
>>>>> really name classes of subscribers.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> -1
>>>>
>>>> As far as I understand this, you want to express the functionality
>>>> of the subscriber in these names. The example you mention is PAS
>>>> which needs to send out events for credential extraction and
>>>> challenge. They are essentially registered for the same event so
>>>> there needs to be a way of telling them apart so that we can invoke
>>>> them in a defined order.
>>>> Did I get this right?
>>>>
>>>> I think introducing subscriber names is not necessary. I think one
>>>> can leverage the understanding (and implementation) of subscribers
>>>> as subscription *adapters*. They subscribe to an object in order to
>>>> provide certain functionality for it which is expressed in the
>>>> provided interface they are registered with.
>>>>
>>>> In other words, instead of having PAS send out events like this (I'm
>>>> using mock-up code here):
>>>>
>>>> zapi.subscribers((NeedYouToDoSomething, request),
>>>> name="credentials")
>>>> zapi.subscribers((NeedYouToDoSomething, request),
>>>> name="challenge")
>>>>
>>>> or even
>>>>
>>>> zapi.subscribers((NeedYouToDoSomething, request),
>>>> order=["credentials", "challenge"])
>>>>
>>>>
>>>> I would prefer it subscription-adapting them to specific interfaces
>>>> that describe the functionality you'd expect from the subscribers:
>>>>
>>>> zapi.subscribers((NeedYouToDoSomething, request),
>>>> IExtractCredentials)
>>>> zapi.subscribers((NeedYouToDoSomething, request),
>>>> IChallengeUser)
>>>>
>>>> Advantages:
>>>>
>>>> - Consistency: interfaces are used to describe functionality
>>>>
>>>> - It's already implemented.
>>>>
>>>> As you suggested, decoupling event send out and the subscribers from
>>>> the actual order can be achieved through an "unnamed" (providing
>>>> None in my case) subscriber that somehow "knows" the order (probably
>>>> through configuration). In my case, of course, the elements in that
>>>> ordered list would be interfaces, not names.
>>>
>>> Yuo are missing Jim's point: for a given subscriber interface, there
>>> may be *multiple* subscribers, and we may need to control the order
>>> in which those subscribers are notified.
>>
>> Nope, I didn't miss that point. I'm just saying that I want a
>> different way of controlling that order. Jim wants to introduce names,
>> I'm saying let's use the interfaces we already have.
>
> If I have three plugins which implement a given plugin interface (e.g.,
> IExtractCredentials), how do you propose that I specify the order in
> which they are notified? Your syntax above gives me *no* control over
> that order.
I see what you mean now. I guess I did misunderstand Jim then. In that
case named subscription adapters seem like a good idea. And they would
perfect the symmetry since regular adapters can be named already.
Philipp
More information about the Zope3-dev
mailing list