コード例 #1
0
ファイル: MessageViewer.py プロジェクト: scanlime/cia-vc
    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),
            ]
コード例 #2
0
ファイル: MessageViewer.py プロジェクト: Kays/cia-vc
    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)]
コード例 #3
0
ファイル: Feed.py プロジェクト: Kays/cia-vc
    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()
コード例 #4
0
ファイル: Feed.py プロジェクト: Kays/cia-vc
    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]
コード例 #5
0
ファイル: Feed.py プロジェクト: Kays/cia-vc
    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
コード例 #6
0
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]))
コード例 #7
0
 def getValue(self, message):
     try:
         return Formatters.getFactory().findMedium(
             'xhtml', message).formatMessage(message)
     except:
         return Template.error[str(sys.exc_info()[1])]
コード例 #8
0
ファイル: benchmark_formatting.py プロジェクト: Kays/cia-vc
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=&amp;dir=gnome-python&amp;who=johan&amp;date=explicit&amp;mindate=2005-03-15%2016:50&amp;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 ###
コード例 #9
0
ファイル: Browser.py プロジェクト: SkyFire/cia-vc
 def getValue(self, message):
     try:
         return Formatters.getFactory().findMedium('xhtml', message).formatMessage(message)
     except:
         return Template.error[str(sys.exc_info()[1])]
コード例 #10
0
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=&amp;dir=gnome-python&amp;who=johan&amp;date=explicit&amp;mindate=2005-03-15%2016:50&amp;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 ###