from . import data from .web import Difftable from ll.xist import xsc, parse from ll.xist.ns import xml, rss20 def rss(): versions = data.Version.raw('''\ SELECT * FROM version v WHERE EXISTS (SELECT 1 FROM version v2 WHERE v2.id != v.id AND v2.item_id == v.item_id AND v2.created_date < v.created_date) ORDER BY v.created_date DESC LIMIT 30''') items = [] for to_version in versions: from_version = data.Version.select() \ .where((data.Version.id != to_version.id) & (data.Version.item == to_version.item) & (data.Version.created_date < to_version.created_date)) \ .order_by(data.Version.created_date.desc()) \ .first() difftable = Difftable(to_version, from_version, inline_style=True).string('utf-8') items.append(rss20.item( rss20.title( '{} - {}'.format(to_version.item.feed.title, to_version.title)), rss20.author(to_version.authors), rss20.pubDate(to_version.created_date.strftime( '%a, %d %b %Y %T %z')), rss20.guid('from={},to={}'.format(from_version.id, to_version.id)), rss20.link(to_version.url), rss20.description( xsc.Text(difftable) ) )) return xsc.Frag(xml.XML(), rss20.rss( rss20.channel( rss20.title('Watchnews change report'), *items ) ) ).string('utf-8')