Doki Pen wrote:
> I want to revisit this topic[0]:
>
> I took over the abandoned AnnouncerPlugin[1] last year. I've been working on
> the AnnouncerPlugin quite a bit[2]. I'd like to know what we need to do to
> get this thing into trac.
>
> One thing that is becoming cumbersome is supporting backward compatibility
> with trac notifications. Specifically, other plugins use the Notification api
> to send their own notifications. This code has to be reimplemented using the
> AnnouncerPlugin api since the Notification api is not very extensible.
>
> I still think AnnouncerPlugin needs a good amount of work before being
> included in core, but I think it's at a point where I need specific feedback.
> The core API is very stable. The existing notification functionality is
> there. I think the arch is well described in api.py, but I'd be happy to
> write up a proposal on the wiki.
>
Good timing, we're wrapping up for 0.12, so it's appropriate to start
discussing the steps ahead. As a notification overhaul has always been
on the table, I think your proposal is very welcome.
I looked a bit in the code, without actually testing the plugin yet, but
I must say that at this point I'm already pretty much convinced by what
I've seen. The code is very clean (1), understandable, and its general
architecture seems sound. Great work, from both you and Stephen!
Now we have to think about how we could integrate this in Trac itself,
as a replacement to the current notification system. I think the
separation we have introduced between trac and tracopt lately will be
very useful here, as a way to separate the core announcer components
from those which are not always required, like some subscribers.
The question of backward compatibility is also worth mentioning, and
that can perhaps be done with a transition period where the legacy
modules are first part of trac.announcer.subscribers, then in a next
release moved to tracopt.announcer.subscribers, before their complete
removal(?).
Concerning the producers, I'd welcome your opinion on the discussion
about IResourceChangeListener (
http://trac.edgewall.org/ticket/8834), I
think it can be used to simplify things, eventually getting rid of the
producers entirely.
But I think that the main issue here is not really about the code, more
generally about the contribution process. Integrating such a large
subsystem can't be done without integrating at the same time a dedicated
contributor ;-) Judging by the amount of support you've already done on
the Announcer, I see that you're able to undertake this task. Of course,
what I'm asking for is not a "lifetime commitment" on your part for
supporting the new notification / announcer subsystem in Trac, but
rather the dedication necessary to get a high quality starting point, in
the release of Trac where this feature will ship. The new system has to
blend naturally with the rest of Trac and the code must lend itself to
be easily extended and maintained. As I've said before, the plugin as it
stands now shows every promise for that.
Besides, we have a huge list of open tickets on t.e.o for the
notification component, so it would be useful if you could update them
and put them in perspective of the announcer merge. You could also
create a new TracDev/Proposals page (.../AnnouncerIntegration?), which
can be used to document the integration plan, as it evolves. The later
steps would be to get an overview ticket where we could get the initial
patches, then a branch in the sandbox and an associated sub-milestone, a
bit like we did for the multirepos feature (and let's hope that *this*
time, the branch won't take 2 years before being merged ;-) ).
-- Christian
(1) in particular, the SQL queries are very nicely presented, e.g.
13 cursor.execute("""
14 SELECT value, authenticated
15 FROM session_attribute
16 WHERE sid=%s
17 AND name=%s
18 """, (sid, 'email'))
We should do that in the rest of Trac as well ;-)