def render_message(self, context): if not self.message: context['request'].setResponseCode(404) return self.notFoundMessage # Try to format it using several media, in order of decreasing preference. # The 'xhtml-long' formatter lets messages define a special formatter to # use when an entire page is devoted to their one message, possibly showing # it in greater detail. 'xhtml' is the formatter most messages should have. # 'plaintext' is a nice fallback. # # This default list of media to try can be overridden with an argument in our URL. if 'media' in context['args']: mediaList = context['args']['media'][0].split() else: mediaList = ('xhtml-long', 'xhtml', 'plaintext') for medium in mediaList: try: formatted = Formatters.getFactory().findMedium( medium, self.message).formatMessage(self.message) except Message.NoFormatterError: continue return formatted # Still no luck? Display a warning message and a pretty-printed XML tree return [ tag('h1')[ "No formatter available" ], XML.htmlPrettyPrint(self.message.xml), ]
def render_message(self, context): if not self.message: context["request"].setResponseCode(404) return self.notFoundMessage # Try to format it using several media, in order of decreasing preference. # The 'xhtml-long' formatter lets messages define a special formatter to # use when an entire page is devoted to their one message, possibly showing # it in greater detail. 'xhtml' is the formatter most messages should have. # 'plaintext' is a nice fallback. # # This default list of media to try can be overridden with an argument in our URL. if "media" in context["args"]: mediaList = context["args"]["media"][0].split() else: mediaList = ("xhtml-long", "xhtml", "plaintext") for medium in mediaList: try: formatted = Formatters.getFactory().findMedium(medium, self.message).formatMessage(self.message) except Message.NoFormatterError: continue return formatted # Still no luck? Display a warning message and a pretty-printed XML tree return [tag("h1")["No formatter available"], XML.htmlPrettyPrint(self.message.xml)]
def formatMessage(self, m, medium=None): """Format a message in the requested medium""" if medium is None: medium = self.medium # Look for a proper format_* function to handle special feed-only media f = getattr(self, 'format_' + medium, None) try: if f: return f(m) else: # No special formatter, find a normal one return Formatters.getFactory().findMedium(medium, m).formatMessage(m) except Message.NoFormatterError: return self.formatError()
def render_item(self, context, id, content): url = Link.MessageLink(self.target, id).getURL(context) m = Message.Message(content) tags = [ tag('link')[ url ], tag('dc:date')[ TimeUtil.formatDateISO8601(XML.digValue(m.xml, int, "message", "timestamp")) ], tag('description')[ quote(self.formatMessage(m)) ], ] # Generate a title if we can, but if we can't don't worry too much try: tags.append(tag('title')[ Formatters.getFactory().findMedium('title', m).formatMessage(m) ]) except Message.NoFormatterError: pass return tag('item', **{'rdf:about': url})[tags]
def messageToItemContent(self, context, m, id): """Render an XML message as the content of an RSS <item>""" url = Link.MessageLink(self.target, id).getURL(context) tags = [ tag('pubDate')[ TimeUtil.formatDateRFC822(XML.digValue(m.xml, int, "message", "timestamp")) ], tag('guid')[url], tag('link')[url], tag('description')[ quote(self.formatMessage(m)) ], ] # Generate a title if we can, but if we can't don't worry too much try: tags.append(tag('title')[ Formatters.getFactory().findMedium('title', m).formatMessage(m) ]) except Message.NoFormatterError: pass return tags
class Message: serializer = Serializer() formatter_factory = OldFormatters.getFactory() def __init__(self, (id, xml)): self.id = id self.hex_id = "%x" % id self.oldmsg = OldMessage(xml) self.timestamp = datetime.datetime.fromtimestamp( XML.digValue(self.oldmsg.xml, float, "message", "timestamp")) self.formatter = self.formatter_factory.findMedium( 'xhtml', self.oldmsg) self.is_commit = isinstance(self.formatter, CommitFormatter) if self.is_commit: for shortcut, path in XML.pathShortcuts.items(): doc = XML.XPath(path).queryObject(self.oldmsg) if doc: setattr(self, shortcut, XML.shallowText(doc[0]))
def getValue(self, message): try: return Formatters.getFactory().findMedium( 'xhtml', message).formatMessage(message) except: return Template.error[str(sys.exc_info()[1])]
from LibCIA import Message, Formatters messageText = """<?xml version='1.0' encoding='UTF-8'?> <message><body><commit><author>johan</author><files> <file action='modify'>pygtk/ChangeLog</file> <file action='modify'>pygtk/NEWS</file> </files> <log>* codegen/codegen.py: Check arguments if we have no arguments. Fixes bug #170266 [http://bugzilla.gnome.org/show_bug.cgi?id=170266] (Doug Quale) * gtk/gdk.override: * gtk/gtktreeview.override: gcc4 patches stolen from redhat * NEWS: Updated </log> <url>http://cvs.gnome.org/bonsai/cvsquery.cgi?branch=&dir=gnome-python&who=johan&date=explicit&mindate=2005-03-15%2016:50&maxdate=2005-03-15%2016:52</url> </commit></body><generator><name>CIA Email Filters</name></generator> <source><project>gnome</project><module>gnome-python</module></source> <timestamp>1110923531</timestamp></message> """ r = range(200) start = time.time() for i in r: m = Message.Message(messageText) f = Formatters.getFactory().findMedium("xhtml", m).formatMessage(m) end = time.time() print "%.04f seconds/message" % ((end - start) / len(r)) ### The End ###
def getValue(self, message): try: return Formatters.getFactory().findMedium('xhtml', message).formatMessage(message) except: return Template.error[str(sys.exc_info()[1])]
from LibCIA import Message, Formatters messageText = """<?xml version='1.0' encoding='UTF-8'?> <message><body><commit><author>johan</author><files> <file action='modify'>pygtk/ChangeLog</file> <file action='modify'>pygtk/NEWS</file> </files> <log>* codegen/codegen.py: Check arguments if we have no arguments. Fixes bug #170266 [http://bugzilla.gnome.org/show_bug.cgi?id=170266] (Doug Quale) * gtk/gdk.override: * gtk/gtktreeview.override: gcc4 patches stolen from redhat * NEWS: Updated </log> <url>http://cvs.gnome.org/bonsai/cvsquery.cgi?branch=&dir=gnome-python&who=johan&date=explicit&mindate=2005-03-15%2016:50&maxdate=2005-03-15%2016:52</url> </commit></body><generator><name>CIA Email Filters</name></generator> <source><project>gnome</project><module>gnome-python</module></source> <timestamp>1110923531</timestamp></message> """ r = range(200) start = time.time() for i in r: m = Message.Message(messageText) f = Formatters.getFactory().findMedium('xhtml', m).formatMessage(m) end = time.time() print "%.04f seconds/message" % ((end - start) / len(r)) ### The End ###