[Zope3-dev] Re: Subscriber Ordering
Philipp von Weitershausen
philipp at weitershausen.de
Thu Nov 4 18:11:28 EST 2004
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.
Philipp
More information about the Zope3-dev
mailing list