[Zope3-dev] Re: Subscriber Ordering

Tres Seaver tseaver at zope.com
Thu Nov 4 17:43:44 EST 2004


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.

Tres.
-- 
===============================================================
Tres Seaver                                tseaver at zope.com
Zope Corporation      "Zope Dealers"       http://www.zope.com



More information about the Zope3-dev mailing list