[csw-devel] Atom feed with releases to unstable

Maciej Bliziński maciej at opencsw.org
Sat Mar 19 14:54:32 CET 2011


2011/3/19 Ben Walton <bwalton at opencsw.org>:
> Excerpts from Maciej Bliziński's message of Sat Mar 19 07:12:22 -0400 2011:
>
>> Implementing the atom feed would require setting up a new feed
>> served by http, and a glue code between the catalog notifier and the
>> feed data backend (e.g. mysql).
>
> It seems to me that this could be done by the notifier itself.  The
> catalog parser and comparator parts would remain the same.  The data
> that generates the email notification from the template would just
> need a second step that appends to the xml atom feed...or maybe calls
> out to a separate tool that does this.
>
> At that point, it's just a matter of making the atom feed visible.
>
> I think that right around here[1] a bit of code would be added that
> uses the catalog comparator code (already self contained) and spits
> makes the appropriate changes to the feed.  It might make sense to
> factor out the calls to catalog comparator from the
> NotificationFormatter too, but I didn't look too deeply at that.
>
> Maciej, is this roughly accurate?

Yes, that's it.

Catalog downloading and comparing results are best reused.  The
comparator class only compares a single catalog, specific to an
architecture and OS release.  During one run, the notifier downloads
and compares 6 (2 architectures × 3 OS releases) catalogs and stores
all diffs in a single data structure.  This data structure could be
reused.  You could for instance memoize the _GetPkgsByMaintainer
function and call it again, reusing the data.

You could add a new method, similar to FormatNotifications, calling
memoized _GetPkgsByMaintainer and doing something else with the data.
I've packaged an atom formatting library for Python: py_atomixlib.

To persist data between runs, the same simple method could be used:
pickle the data on disk, and read them during the next.  Something like:

unpickle old feed data
get new information by comparing catalogs
add new entries to the feed
remove old items from the feed
format feed
save feed
save data

Maciej


More information about the devel mailing list