[Grok-dev] New feature in grokcore.component.

Sylvain Viollon sylvain at infrae.com
Tue Jan 4 12:55:57 EST 2011


Hello,

  I would like to use in my project subscribers, but not for events.
  Basically, I would to be able to define the following things:

  class MyFilter(grokcore.component.MultiSubscriber):
     grok.adapts(IMyContent, IHTTPRequest)
     grok.provides(IFilter)
     grok.implements(IFilter)
     grok.order(10)

     def __init__(self, context, request):
         self.context = context
         self.request = request


     def process(...):
         pass

  class AdvancedFilter(MyFilter):
     grok.adapts(IMyOtherContent, IHTTPRequest)
     grok.order(20)


  After with the yet to be implemented function
  queryOrderedSubscribers, I should be able to do things like:

  for content_filter in queryOrderedSubscribers(
      (my_content, request), IFilter):
      content_filter.process(...)

   
  To do this, we would have to add to grokcore.component:

  - A MultiSubscriber base class, that is grokked as a subscribers (like
    would do the @susbcribe decorator). You would be able to use the
    adapts, provides, implements and order directive on it (subscribers
    doesn't have a name). From what I read in zope.interface, the
    provides would be required for this usage of subscription, like for
    adapter.

  - Maybe to be consistent with Adapter, we could do a Subscriber base
    class, that do the same, using the context directive instead of the
    adapts one, and having a default __init__.

  - A queryOrderedMultiSubscribers: that would query the list of
    subscribers, return a list of instance of them (like do
    queryMultiAdapter), and sort them using the information of the
    grok.order directive (having not sorted events/subscribers is often
    annoying). Probably we want to add queryMultiSubscribers (do the
    same without sorting), queryOrderedSubscribers and
    querySubscribers. I don't thing there is a meaning in having get
    functions for subscribers. Well the list of those function to have
    is open to discussion, I just require the
    queryOrderedMultiSubscribers for my project.

  Unless someone thinks it is a terrible idea, I can add this to
  grokcore.component tomorrow morning. I can even do it only in a
  branch.

  Regards,

  Sylvain,

-- 
Sylvain Viollon -- Infrae
t +31 10 243 7051 -- http://infrae.com
Hoevestraat 10 3033GC Rotterdam -- The Netherlands


More information about the Grok-dev mailing list