annotate website/issues/detectors/rsswriter.py @ 6279:9ec3a9bc4ea5

issue2551097 - fix call to markdown2 - fix fenced code blocks. The invocation of fenced codeblock support in markdown2 was wrong. With this fixed the code that was used to test markdown processor exception handling no longer works. Fixed test case to make it pass. Added new test with invalid markdown that tests markdown exception handling. Also renamed test to include markdown. Makes using -k option in run_tests easier.
author John Rouillard <rouilj@ieee.org>
date Thu, 29 Oct 2020 17:08:44 -0400
parents 461a322a79af
children c34171b2af43
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6229
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
1 #!/usr/bin/python
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
2
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
3 #
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
4 # RSS writer Roundup reactor
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
5 # Mark Paschal <markpasc@markpasc.org>
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
6 #
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
7
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
8 import os
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
9
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
10 import logging
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
11 logger = logging.getLogger('detector')
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
12
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
13 import sys
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
14
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
15 # How many <item>s to have in the feed, at most.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
16 MAX_ITEMS = 30
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
17
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
18 #
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
19 # Module metadata
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
20 #
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
21
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
22 __author__ = "Mark Paschal <markpasc@markpasc.org>"
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
23 __copyright__ = "Copyright 2003 Mark Paschal"
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
24 __version__ = "1.2"
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
25
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
26 __changes__ = """
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
27 1.1 29 Aug 2003 Produces valid pubDates. Produces pubDates and authors for
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
28 change notes. Consolidates a message and change note into one
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
29 item. Uses TRACKER_NAME in filename to produce one feed per
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
30 tracker. Keeps to MAX_ITEMS limit more efficiently.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
31 1.2 5 Sep 2003 Fixes bug with programmatically submitted issues having
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
32 messages without summaries (?!).
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
33 x.x 26 Feb 2017 John Rouillard try to deal with truncation of rss
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
34 file cause by error in parsing 8'bit characcters in
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
35 input message. Further attempts to fix issue by
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
36 modifying message bail on 0 length rss file. Delete
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
37 it and retry.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
38 """
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
39
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
40 __license__ = 'MIT'
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
41
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
42 #
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
43 # Copyright 2003 Mark Paschal
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
44 #
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
45 # Permission is hereby granted, free of charge, to any person obtaining a copy
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
46 # of this software and associated documentation files (the "Software"), to deal
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
47 # in the Software without restriction, including without limitation the rights
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
48 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
49 # copies of the Software, and to permit persons to whom the Software is
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
50 # furnished to do so, subject to the following conditions:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
51 #
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
52 # The above copyright notice and this permission notice shall be included in all
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
53 # copies or substantial portions of the Software.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
54 #
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
55 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
56 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
57 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
58 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
59 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
60 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
61 # SOFTWARE.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
62 #
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
63
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
64
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
65 # The strftime format to use for <pubDate>s.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
66 RSS20_DATE_FORMAT = '%a, %d %b %Y %H:%M:%S %z'
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
67
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
68
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
69 def newRss(title, link, description):
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
70 """Returns an XML Document containing an RSS 2.0 feed with no items."""
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
71 import xml.dom.minidom
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
72 rss = xml.dom.minidom.Document()
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
73
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
74 root = rss.appendChild(rss.createElement("rss"))
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
75 root.setAttribute("version", "2.0")
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
76 root.setAttribute("xmlns:atom","http://www.w3.org/2005/Atom")
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
77
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
78 channel = root.appendChild(rss.createElement("channel"))
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
79 addEl = lambda tag,value: channel.appendChild(rss.createElement(tag)).appendChild(rss.createTextNode(value))
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
80 def addElA(tag,attr):
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
81 node=rss.createElement(tag)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
82 for attr, val in attr.items():
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
83 node.setAttribute(attr, val)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
84 channel.appendChild(node)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
85
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
86 addEl("title", title)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
87 addElA('atom:link', attr={"rel": "self",
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
88 "type": "application/rss+xml", "href": link + "@@file/rss.xml"})
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
89 addEl("link", link)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
90 addEl("description", description)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
91
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
92 return rss # has no items
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
93
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
94
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
95 def writeRss(db, cl, nodeid, olddata):
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
96 """
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
97 Reacts to a created or changed issue. Puts new messages and the change note
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
98 in items in the RSS feed, as determined by the rsswriter.py FILENAME setting.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
99 If no RSS feed exists where FILENAME specifies, a new feed is created with
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
100 rsswriter.newRss.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
101 """
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
102
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
103 # The filename of a tracker's RSS feed. Tracker config variables
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
104 # are placed with the standard '%' operator syntax.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
105
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
106 FILENAME = "%s/rss.xml"%db.config['TEMPLATES']
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
107
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
108 # i.e., roundup.cgi/projects/_file/rss.xml
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
109 # FILENAME = "/home/markpasc/public_html/%(TRACKER_NAME)s.xml"
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
110
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
111 filename = FILENAME % db.config.__dict__
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
112
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
113 # return if issue is private
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
114 if ( db.issue.get(nodeid, 'private') ):
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
115 if __debug__:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
116 logger.debug("rss: Private issue. not generating rss")
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
117 return
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
118
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
119 if __debug__:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
120 logger.debug("rss: generating rss for issue %s", nodeid)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
121
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
122 # open the RSS
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
123 import xml.dom.minidom
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
124 from xml.parsers.expat import ExpatError
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
125
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
126 try:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
127 rss = xml.dom.minidom.parse(filename)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
128 except IOError as e:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
129 if 2 != e.errno: raise
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
130 # File not found
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
131 rss = newRss(
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
132 "%s tracker" % (db.config.TRACKER_NAME,),
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
133 db.config.TRACKER_WEB,
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
134 "Recent changes to the %s Roundup issue tracker" % (db.config.TRACKER_NAME,)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
135 )
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
136 except ExpatError as e:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
137 if os.path.getsize(filename) == 0:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
138 # delete the file, it's broke
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
139 os.remove(filename)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
140 # create new rss file
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
141 rss = newRss(
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
142 "%s tracker" % (db.config.TRACKER_NAME,),
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
143 db.config.TRACKER_WEB,
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
144 "Recent changes to the %s Roundup issue tracker" % (db.config.TRACKER_NAME,)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
145 )
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
146 else:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
147 raise
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
148
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
149 channel = rss.documentElement.getElementsByTagName('channel')[0]
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
150 addEl = lambda parent,tag,value: parent.appendChild(rss.createElement(tag)).appendChild(rss.createTextNode(value))
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
151 issuelink = '%sissue%s' % (db.config.TRACKER_WEB, nodeid)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
152
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
153
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
154 if olddata:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
155 chg = cl.generateChangeNote(nodeid, olddata)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
156 else:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
157 chg = cl.generateCreateNote(nodeid)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
158
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
159 def addItem(desc, date, userid):
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
160 """
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
161 Adds an RSS item to the RSS document. The title, link, and comments
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
162 link are those of the current issue.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
163
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
164 desc: the description text to use
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
165 date: an appropriately formatted string for pubDate
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
166 userid: a Roundup user ID to use as author
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
167 """
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
168
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
169 item = rss.createElement('item')
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
170
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
171 addEl(item, 'title', db.issue.get(nodeid, 'title'))
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
172 addEl(item, 'link', issuelink)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
173 addEl(item, 'guid', issuelink + '#' + date.replace(' ','+'))
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
174 addEl(item, 'comments', issuelink)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
175 addEl(item, 'description', desc.replace('&','&amp;').replace('<','&lt;').replace('\n', '<br>\n'))
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
176 addEl(item, 'pubDate', date)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
177 addEl(item, 'author',
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
178 '%s (%s)' % (
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
179 db.user.get(userid, 'address'),
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
180 db.user.get(userid, 'username')
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
181 )
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
182 )
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
183
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
184 channel.appendChild(item)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
185
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
186 # add detectors directory to path if it's not there.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
187 # FIXME - see if this pollutes the sys.path for other
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
188 # trackers.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
189 detector_path="%s/detectors"%(db.config.TRACKER_HOME)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
190 if ( sys.path.count(detector_path) == 0 ):
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
191 sys.path.insert(0,detector_path)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
192
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
193 from nosyreaction import determineNewMessages
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
194 for msgid in determineNewMessages(cl, nodeid, olddata):
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
195 logger.debug("Processing new message msg%s for issue%s", msgid, nodeid)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
196 desc = db.msg.get(msgid, 'content')
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
197
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
198 if desc and chg:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
199 desc += chg
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
200 elif chg:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
201 desc = chg
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
202 chg = None
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
203
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
204 addItem(desc or '', db.msg.get(msgid, 'date').pretty(RSS20_DATE_FORMAT), db.msg.get(msgid, 'author'))
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
205
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
206 if chg:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
207 from time import strftime
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
208 addItem(chg.replace('\n----------\n', ''), strftime(RSS20_DATE_FORMAT), db.getuid())
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
209
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
210
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
211 for c in channel.getElementsByTagName('item')[0:-MAX_ITEMS]: # leaves at most MAX_ITEMS at the end
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
212 channel.removeChild(c)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
213
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
214 # write the RSS
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
215 out = open(filename, 'w')
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
216
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
217 try:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
218 out.write(rss.toxml())
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
219 except Exception as e:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
220 # record the falure This should not happen.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
221 logger.error(e)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
222 out.close() # create 0 length file maybe?? But we handle above.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
223 raise # let the user know something went wrong.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
224
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
225 out.close()
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
226
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
227
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
228 def init(db):
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
229 db.issue.react('create', writeRss)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
230 db.issue.react('set', writeRss)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
231 #SHA: f4c0ccb5d0d9a6ef7829696333b33bc0619b0167

Roundup Issue Tracker: http://roundup-tracker.org/