~brian-murray/merge-o-matic/linkify-uploader

« back to all changes in this revision

Viewing changes to manual-status.py

  • Committer: Colin Watson
  • Date: 2012-05-22 14:32:34 UTC
  • Revision ID: cjwatson@canonical.com-20120522143234-u20m4o4717lp4h3x
Use Python 3-compatible print functions.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
# You should have received a copy of the GNU General Public License
18
18
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
19
 
20
 
from __future__ import with_statement
 
20
from __future__ import print_function, with_statement
21
21
 
22
22
import os
23
23
import bz2
145
145
 
146
146
    status_file = "%s/merges/%s-manual.html" % (ROOT, component)
147
147
    with open(status_file + ".new", "w") as status:
148
 
        print >>status, "<html>"
149
 
        print >>status
150
 
        print >>status, "<head>"
151
 
        print >>status, "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"
152
 
        print >>status, "<title>Ubuntu Merge-o-Matic: %s manual</title>" \
153
 
              % component
154
 
        print >>status, "<style>"
155
 
        print >>status, "img#ubuntu {"
156
 
        print >>status, "    border: 0;"
157
 
        print >>status, "}"
158
 
        print >>status, "h1 {"
159
 
        print >>status, "    padding-top: 0.5em;"
160
 
        print >>status, "    font-family: sans-serif;"
161
 
        print >>status, "    font-size: 2.0em;"
162
 
        print >>status, "    font-weight: bold;"
163
 
        print >>status, "}"
164
 
        print >>status, "h2 {"
165
 
        print >>status, "    padding-top: 0.5em;"
166
 
        print >>status, "    font-family: sans-serif;"
167
 
        print >>status, "    font-size: 1.5em;"
168
 
        print >>status, "    font-weight: bold;"
169
 
        print >>status, "}"
170
 
        print >>status, "p, td {"
171
 
        print >>status, "    font-family: sans-serif;"
172
 
        print >>status, "    margin-bottom: 0;"
173
 
        print >>status, "}"
174
 
        print >>status, "li {"
175
 
        print >>status, "    font-family: sans-serif;"
176
 
        print >>status, "    margin-bottom: 1em;"
177
 
        print >>status, "}"
178
 
        print >>status, "tr.first td {"
179
 
        print >>status, "    border-top: 2px solid white;"
180
 
        print >>status, "}"
181
 
        print >>status, "</style>"
182
 
        print >>status, "<% from momlib import * %>"
183
 
        print >>status, "</head>"
184
 
        print >>status, "<body>"
185
 
        print >>status, "<img src=\".img/ubuntulogo-100.png\" id=\"ubuntu\">"
186
 
        print >>status, "<h1>Ubuntu Merge-o-Matic: %s manual</h1>" % component
187
 
 
188
 
        for section in SECTIONS:
189
 
            section_merges = [ m for m in merges if m[0] == section ]
190
 
            print >>status, ("<p><a href=\"#%s\">%s %s merges</a></p>"
191
 
                             % (section, len(section_merges), section))
192
 
 
193
 
        print >>status, "<% comment = get_comments() %>"
194
 
 
195
 
        for section in SECTIONS:
196
 
            section_merges = [ m for m in merges if m[0] == section ]
197
 
 
198
 
            print >>status, ("<h2 id=\"%s\">%s Merges</h2>"
199
 
                             % (section, section.title()))
 
148
        print("<html>", file=status)
 
149
        print(file=status)
 
150
        print("<head>", file=status)
 
151
        print("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">", file=status)
 
152
        print("<title>Ubuntu Merge-o-Matic: %s manual</title>" % component,
 
153
              file=status)
 
154
        print("<style>", file=status)
 
155
        print("img#ubuntu {", file=status)
 
156
        print("    border: 0;", file=status)
 
157
        print("}", file=status)
 
158
        print("h1 {", file=status)
 
159
        print("    padding-top: 0.5em;", file=status)
 
160
        print("    font-family: sans-serif;", file=status)
 
161
        print("    font-size: 2.0em;", file=status)
 
162
        print("    font-weight: bold;", file=status)
 
163
        print("}", file=status)
 
164
        print("h2 {", file=status)
 
165
        print("    padding-top: 0.5em;", file=status)
 
166
        print("    font-family: sans-serif;", file=status)
 
167
        print("    font-size: 1.5em;", file=status)
 
168
        print("    font-weight: bold;", file=status)
 
169
        print("}", file=status)
 
170
        print("p, td {", file=status)
 
171
        print("    font-family: sans-serif;", file=status)
 
172
        print("    margin-bottom: 0;", file=status)
 
173
        print("}", file=status)
 
174
        print("li {", file=status)
 
175
        print("    font-family: sans-serif;", file=status)
 
176
        print("    margin-bottom: 1em;", file=status)
 
177
        print("}", file=status)
 
178
        print("tr.first td {", file=status)
 
179
        print("    border-top: 2px solid white;", file=status)
 
180
        print("}", file=status)
 
181
        print("</style>", file=status)
 
182
        print("<% from momlib import * %>", file=status)
 
183
        print("</head>", file=status)
 
184
        print("<body>", file=status)
 
185
        print("<img src=\".img/ubuntulogo-100.png\" id=\"ubuntu\">",
 
186
              file=status)
 
187
        print("<h1>Ubuntu Merge-o-Matic: %s manual</h1>" % component,
 
188
              file=status)
 
189
 
 
190
        for section in SECTIONS:
 
191
            section_merges = [ m for m in merges if m[0] == section ]
 
192
            print("<p><a href=\"#%s\">%s %s merges</a></p>" %
 
193
                  (section, len(section_merges), section), file=status)
 
194
 
 
195
        print("<% comment = get_comments() %>", file=status)
 
196
 
 
197
        for section in SECTIONS:
 
198
            section_merges = [ m for m in merges if m[0] == section ]
 
199
 
 
200
            print("<h2 id=\"%s\">%s Merges</h2>" % (section, section.title()),
 
201
                  file=status)
200
202
 
201
203
            do_table(status, section_merges, left_distro, right_distro, component)
202
204
 
203
 
        print >>status, "</body>"
204
 
        print >>status, "</html>"
 
205
        print("</body>", file=status)
 
206
        print("</html>", file=status)
205
207
 
206
208
    os.rename(status_file + ".new", status_file)
207
209
 
227
229
 
228
230
def do_table(status, merges, left_distro, right_distro, component):
229
231
    """Output a table."""
230
 
    print >>status, "<table cellspacing=0>"
231
 
    print >>status, "<tr bgcolor=#d0d0d0>"
232
 
    print >>status, "<td rowspan=2><b>Package</b></td>"
233
 
    print >>status, "<td colspan=2><b>Last Uploader</b></td>"
234
 
    print >>status, "<td rowspan=2><b>Comment</b></td>"
235
 
    print >>status, "<td rowspan=2><b>Bug</b></td>"
236
 
    print >>status, "</tr>"
237
 
    print >>status, "<tr bgcolor=#d0d0d0>"
238
 
    print >>status, "<td><b>%s Version</b></td>" % left_distro.title()
239
 
    print >>status, "<td><b>%s Version</b></td>" % right_distro.title()
240
 
    print >>status, "</tr>"
 
232
    print("<table cellspacing=0>", file=status)
 
233
    print("<tr bgcolor=#d0d0d0>", file=status)
 
234
    print("<td rowspan=2><b>Package</b></td>", file=status)
 
235
    print("<td colspan=2><b>Last Uploader</b></td>", file=status)
 
236
    print("<td rowspan=2><b>Comment</b></td>", file=status)
 
237
    print("<td rowspan=2><b>Bug</b></td>", file=status)
 
238
    print("</tr>", file=status)
 
239
    print("<tr bgcolor=#d0d0d0>", file=status)
 
240
    print("<td><b>%s Version</b></td>" % left_distro.title(), file=status)
 
241
    print("<td><b>%s Version</b></td>" % right_distro.title(), file=status)
 
242
    print("</tr>", file=status)
241
243
 
242
244
    for uploaded, priority, package, user, uploader, source, \
243
245
            left_version, right_version in merges:
262
264
        else:
263
265
            who = "&nbsp;"
264
266
 
265
 
        print >>status, "<tr bgcolor=%s class=first>" % COLOURS[priority]
266
 
        print >>status, "<td><tt><a href=\"https://patches.ubuntu.com/" \
 
267
        print("<tr bgcolor=%s class=first>" % COLOURS[priority], file=status)
 
268
        print("<td><tt><a href=\"https://patches.ubuntu.com/" \
267
269
              "%s/%s/%s_%s.patch\">%s</a></tt>" \
268
 
              % (pathhash(package), package, package, left_version, package)
269
 
        print >>status, " <sup><a href=\"https://launchpad.net/ubuntu/" \
270
 
              "+source/%s\">LP</a></sup>" % package
271
 
        print >>status, " <sup><a href=\"http://packages.qa.debian.org/" \
272
 
              "%s\">PTS</a></sup></td>" % package
273
 
        print >>status, "<td colspan=2>%s</td>" % who
274
 
        print >>status, "<td rowspan=2><form method=\"get\" action=\"addcomment.py\"><br />"
275
 
        print >>status, "<input type=\"hidden\" name=\"component\" value=\"%s-manual\" />" % component
276
 
        print >>status, "<input type=\"hidden\" name=\"package\" value=\"%s\" />" % package
277
 
        print >>status, "<%%\n\
 
270
              % (pathhash(package), package, package, left_version, package),
 
271
              file=status)
 
272
        print(" <sup><a href=\"https://launchpad.net/ubuntu/" \
 
273
              "+source/%s\">LP</a></sup>" % package, file=status)
 
274
        print(" <sup><a href=\"http://packages.qa.debian.org/" \
 
275
              "%s\">PTS</a></sup></td>" % package, file=status)
 
276
        print("<td colspan=2>%s</td>" % who, file=status)
 
277
        print("<td rowspan=2><form method=\"get\" action=\"addcomment.py\"><br />",
 
278
              file=status)
 
279
        print("<input type=\"hidden\" name=\"component\" value=\"%s-manual\" />" % component,
 
280
              file=status)
 
281
        print("<input type=\"hidden\" name=\"package\" value=\"%s\" />" % package,
 
282
              file=status)
 
283
        print("<%%\n\
278
284
the_comment = \"\"\n\
279
285
if \"%s\" in comment:\n\
280
286
    the_comment = comment[\"%s\"]\n\
281
287
req.write(\"<input type=\\\"text\\\" style=\\\"border-style: none; background-color: %s\\\" name=\\\"comment\\\" value=\\\"%%s\\\" title=\\\"%%s\\\" />\" %% (the_comment, the_comment))\n\
282
 
%%>" % (package, package, COLOURS[priority])
283
 
        print >>status, "</form></td>"
284
 
        print >>status, "<td rowspan=2>"
285
 
        print >>status, "<%%\n\
 
288
%%>" % (package, package, COLOURS[priority]), file=status)
 
289
        print("</form></td>", file=status)
 
290
        print("<td rowspan=2>", file=status)
 
291
        print("<%%\n\
286
292
if \"%s\" in comment:\n\
287
293
    req.write(\"%%s\" %% gen_buglink_from_comment(comment[\"%s\"]))\n\
288
294
else:\n\
289
295
    req.write(\"&nbsp;\")\n\
290
296
\n\
291
 
%%>" % (package, package)
292
 
        print >>status, "</td>"
293
 
        print >>status, "</tr>"
294
 
        print >>status, "<tr bgcolor=%s>" % COLOURS[priority]
295
 
        print >>status, "<td><small>%s</small></td>" % source["Binary"]
296
 
        print >>status, "<td>%s</td>" % left_version
297
 
        print >>status, "<td>%s</td>" % right_version
298
 
        print >>status, "</tr>"
 
297
%%>" % (package, package), file=status)
 
298
        print("</td>", file=status)
 
299
        print("</tr>", file=status)
 
300
        print("<tr bgcolor=%s>" % COLOURS[priority], file=status)
 
301
        print("<td><small>%s</small></td>" % source["Binary"], file=status)
 
302
        print("<td>%s</td>" % left_version, file=status)
 
303
        print("<td>%s</td>" % right_version, file=status)
 
304
        print("</tr>", file=status)
299
305
 
300
 
    print >>status, "</table>"
 
306
    print("</table>", file=status)
301
307
 
302
308
 
303
309
def write_status_json(component, merges, left_distro, right_distro):
306
312
    with open(status_file + ".new", "w") as status:
307
313
        # No json module available on merges.ubuntu.com right now, but it's
308
314
        # not that hard to do it ourselves.
309
 
        print >>status, '['
 
315
        print('[', file=status)
310
316
        cur_merge = 0
311
317
        for uploaded, priority, package, user, uploader, source, \
312
318
                left_version, right_version in merges:
313
 
            print >>status, ' {',
 
319
            print(' {', end=' ', file=status)
314
320
            # source_package, short_description, and link are for
315
321
            # Harvest (http://daniel.holba.ch/blog/?p=838).
316
 
            print >>status, '"source_package": "%s",' % package,
317
 
            print >>status, '"short_description": "merge %s",' % right_version,
318
 
            print >>status, '"link": "https://merges.ubuntu.com/%s/%s/",' % (pathhash(package), package),
319
 
            print >>status, '"uploaded": "%s",' % uploaded,
320
 
            print >>status, '"priority": "%s",' % priority,
 
322
            print('"source_package": "%s",' % package, end=' ', file=status)
 
323
            print('"short_description": "merge %s",' % right_version,
 
324
                  end=' ', file=status)
 
325
            print('"link": "https://merges.ubuntu.com/%s/%s/",' %
 
326
                  (pathhash(package), package), end=' ', file=status)
 
327
            print('"uploaded": "%s",' % uploaded, end=' ', file=status)
 
328
            print('"priority": "%s",' % priority, end=' ', file=status)
321
329
            if user is not None:
322
330
                who = user
323
331
                who = who.replace('\\', '\\\\')
324
332
                who = who.replace('"', '\\"')
325
 
                print >>status, '"user": "%s",' % who,
 
333
                print('"user": "%s",' % who, end=' ', file=status)
326
334
                if uploader is not None:
327
335
                    (usr_name, usr_mail) = parseaddr(user)
328
336
                    (upl_name, upl_mail) = parseaddr(uploader)
330
338
                        u_who = uploader
331
339
                        u_who = u_who.replace('\\', '\\\\')
332
340
                        u_who = u_who.replace('"', '\\"')
333
 
                        print >>status, '"uploader": "%s",' % u_who,
 
341
                        print('"uploader": "%s",' % u_who, end=' ', file=status)
334
342
            binaries = re.split(', *', source["Binary"].replace('\n', ''))
335
 
            print >>status, '"binaries": [ %s ],' % \
336
 
                            ', '.join(['"%s"' % b for b in binaries]),
337
 
            print >>status, '"left_version": "%s",' % left_version,
338
 
            print >>status, '"right_version": "%s"' % right_version,
 
343
            print('"binaries": [ %s ],' %
 
344
                  ', '.join(['"%s"' % b for b in binaries]),
 
345
                  end=' ', file=status)
 
346
            print('"left_version": "%s",' % left_version, end=' ', file=status)
 
347
            print('"right_version": "%s"' % right_version,
 
348
                  end=' ', file=status)
339
349
            cur_merge += 1
340
350
            if cur_merge < len(merges):
341
 
                print >>status, '},'
 
351
                print('},', file=status)
342
352
            else:
343
 
                print >>status, '}'
344
 
        print >>status, ']'
 
353
                print('}', file=status)
 
354
        print(']', file=status)
345
355
 
346
356
    os.rename(status_file + ".new", status_file)
347
357
 
351
361
    with open(status_file + ".new", "w") as status:
352
362
        for uploaded, priority, package, user, uploader, source, \
353
363
                left_version, right_version in merges:
354
 
            print >>status, "%s %s %s %s, %s, %s, %s" \
 
364
            print("%s %s %s %s, %s, %s, %s"
355
365
                  % (package, priority,
356
 
                     left_version, right_version, user, uploader, uploaded)
 
366
                     left_version, right_version, user, uploader, uploaded),
 
367
                  file=status)
357
368
 
358
369
    os.rename(status_file + ".new", status_file)
359
370