annotate website/issues/detectors/rsswriter.py @ 7971:fe0348bbe45b

issue2551353 - Add roundup-classhelper for 2.4.0 release Changes to the classic template are not done yet. Still testing. This commit has document updates and changes to rest.py. rest.py: add /rest/data/user/role endpoint to core so the user doesn't have to add the /rest/roles endpoint via interfaces.py. It will only send roles for a user with Admin role and there is no way to override this currently. acknowledgements.txt: Added members of team3 to other contributors. Specified for all other contributes what they worked on. upgrading.txt: added classhelper section and basic template change directions. Linked to admin_guide for full directions. admin_guide.txt: documented install, translation, troubleshooting, config etc. user_guide.txt: added section on using the classhelper. Added reference to section earlier in the doc. Added image for section.
author John Rouillard <rouilj@ieee.org>
date Tue, 21 May 2024 01:17:28 -0400
parents bed1313898d4
children
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.
6465
bed1313898d4 Force time format to include offset, use dc:creator not author
John Rouillard <rouilj@ieee.org>
parents: 6327
diff changeset
66 RSS20_DATE_FORMAT = '%a, %d %b %Y %H:%M:%S +0000'
6229
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")
6465
bed1313898d4 Force time format to include offset, use dc:creator not author
John Rouillard <rouilj@ieee.org>
parents: 6327
diff changeset
77 root.setAttribute("xmlns:dc","http://purl.org/dc/elements/1.1/")
6229
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
78
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
79 channel = root.appendChild(rss.createElement("channel"))
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
80 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
81 def addElA(tag,attr):
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
82 node=rss.createElement(tag)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
83 for attr, val in attr.items():
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
84 node.setAttribute(attr, val)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
85 channel.appendChild(node)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
86
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
87 addEl("title", title)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
88 addElA('atom:link', attr={"rel": "self",
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
89 "type": "application/rss+xml", "href": link + "@@file/rss.xml"})
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
90 addEl("link", link)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
91 addEl("description", description)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
92
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
93 return rss # has no items
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
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
96 def writeRss(db, cl, nodeid, olddata):
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
97 """
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
98 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
99 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
100 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
101 rsswriter.newRss.
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
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
104 # The filename of a tracker's RSS feed. Tracker config variables
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
105 # are placed with the standard '%' operator syntax.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
106
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
107 FILENAME = "%s/rss.xml"%db.config['TEMPLATES']
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
108
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
109 # i.e., roundup.cgi/projects/_file/rss.xml
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
110 # FILENAME = "/home/markpasc/public_html/%(TRACKER_NAME)s.xml"
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
111
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
112 filename = FILENAME % db.config.__dict__
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
113
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
114 # return if issue is private
6308
c34171b2af43 Fix rss generator. No private atribute in issues in this tracker.
John Rouillard <rouilj@ieee.org>
parents: 6229
diff changeset
115 # enable when private property is added
c34171b2af43 Fix rss generator. No private atribute in issues in this tracker.
John Rouillard <rouilj@ieee.org>
parents: 6229
diff changeset
116 ##if ( db.issue.get(nodeid, 'private') ):
c34171b2af43 Fix rss generator. No private atribute in issues in this tracker.
John Rouillard <rouilj@ieee.org>
parents: 6229
diff changeset
117 ## if __debug__:
c34171b2af43 Fix rss generator. No private atribute in issues in this tracker.
John Rouillard <rouilj@ieee.org>
parents: 6229
diff changeset
118 ## logger.debug("rss: Private issue. not generating rss")
c34171b2af43 Fix rss generator. No private atribute in issues in this tracker.
John Rouillard <rouilj@ieee.org>
parents: 6229
diff changeset
119 ## return
6229
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
120
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
121 if __debug__:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
122 logger.debug("rss: generating rss for issue %s", nodeid)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
123
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
124 # open the RSS
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
125 import xml.dom.minidom
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
126 from xml.parsers.expat import ExpatError
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
127
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
128 try:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
129 rss = xml.dom.minidom.parse(filename)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
130 except IOError as e:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
131 if 2 != e.errno: raise
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
132 # File not found
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
133 rss = newRss(
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
134 "%s tracker" % (db.config.TRACKER_NAME,),
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
135 db.config.TRACKER_WEB,
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
136 "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
137 )
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
138 except ExpatError as e:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
139 if os.path.getsize(filename) == 0:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
140 # delete the file, it's broke
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
141 os.remove(filename)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
142 # create new rss file
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
143 rss = newRss(
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
144 "%s tracker" % (db.config.TRACKER_NAME,),
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
145 db.config.TRACKER_WEB,
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
146 "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
147 )
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
148 else:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
149 raise
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
150
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
151 channel = rss.documentElement.getElementsByTagName('channel')[0]
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
152 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
153 issuelink = '%sissue%s' % (db.config.TRACKER_WEB, nodeid)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
154
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
155
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
156 if olddata:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
157 chg = cl.generateChangeNote(nodeid, olddata)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
158 else:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
159 chg = cl.generateCreateNote(nodeid)
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 def addItem(desc, date, userid):
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
162 """
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
163 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
164 link are those of the current issue.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
165
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
166 desc: the description text to use
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
167 date: an appropriately formatted string for pubDate
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
168 userid: a Roundup user ID to use as author
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
169 """
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 item = rss.createElement('item')
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
172
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
173 addEl(item, 'title', db.issue.get(nodeid, 'title'))
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
174 addEl(item, 'link', issuelink)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
175 addEl(item, 'guid', issuelink + '#' + date.replace(' ','+'))
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
176 addEl(item, 'comments', issuelink)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
177 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
178 addEl(item, 'pubDate', date)
6465
bed1313898d4 Force time format to include offset, use dc:creator not author
John Rouillard <rouilj@ieee.org>
parents: 6327
diff changeset
179 # use dc:creator as username is not valid email address and
bed1313898d4 Force time format to include offset, use dc:creator not author
John Rouillard <rouilj@ieee.org>
parents: 6327
diff changeset
180 # author element must be valid email address
bed1313898d4 Force time format to include offset, use dc:creator not author
John Rouillard <rouilj@ieee.org>
parents: 6327
diff changeset
181 # addEl(item, 'author',
bed1313898d4 Force time format to include offset, use dc:creator not author
John Rouillard <rouilj@ieee.org>
parents: 6327
diff changeset
182 addEl(item, 'dc:creator',
6327
0014af559224 do not include email address in rss feed. Username only.
John Rouillard <rouilj@ieee.org>
parents: 6308
diff changeset
183 '%s' % (
6229
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
184 db.user.get(userid, 'username')
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 )
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
187
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
188 channel.appendChild(item)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
189
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
190 # add detectors directory to path if it's not there.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
191 # FIXME - see if this pollutes the sys.path for other
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
192 # trackers.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
193 detector_path="%s/detectors"%(db.config.TRACKER_HOME)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
194 if ( sys.path.count(detector_path) == 0 ):
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
195 sys.path.insert(0,detector_path)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
196
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
197 from nosyreaction import determineNewMessages
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
198 for msgid in determineNewMessages(cl, nodeid, olddata):
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
199 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
200 desc = db.msg.get(msgid, 'content')
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
201
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
202 if desc and chg:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
203 desc += chg
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
204 elif chg:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
205 desc = chg
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
206 chg = None
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
207
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
208 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
209
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
210 if chg:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
211 from time import strftime
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
212 addItem(chg.replace('\n----------\n', ''), strftime(RSS20_DATE_FORMAT), db.getuid())
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
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
215 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
216 channel.removeChild(c)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
217
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
218 # write the RSS
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
219 out = open(filename, 'w')
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
220
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
221 try:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
222 out.write(rss.toxml())
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
223 except Exception as e:
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
224 # record the falure This should not happen.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
225 logger.error(e)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
226 out.close() # create 0 length file maybe?? But we handle above.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
227 raise # let the user know something went wrong.
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
228
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
229 out.close()
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
230
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
231
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
232 def init(db):
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
233 db.issue.react('create', writeRss)
461a322a79af issue2551085 - add rss feed
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
234 db.issue.react('set', writeRss)
6308
c34171b2af43 Fix rss generator. No private atribute in issues in this tracker.
John Rouillard <rouilj@ieee.org>
parents: 6229
diff changeset
235 #SHA: c4f916a13d533ff0c49386fc4f1f9f254adeb744

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