aboutsummaryrefslogtreecommitdiffstats
path: root/becommands/html.py
diff options
context:
space:
mode:
authorGianluca Montecchi <gian@grys.it>2009-07-27 23:59:40 +0200
committerGianluca Montecchi <gian@grys.it>2009-07-27 23:59:40 +0200
commitd2cdec6be03037269c41b1726252c9d1420a13a5 (patch)
tree7550b79c425b756367827063e43451c570a3eaeb /becommands/html.py
parent694e2bfbdf64e2c50efae81aa848777b65e6dc0a (diff)
downloadbugseverywhere-d2cdec6be03037269c41b1726252c9d1420a13a5.tar.gz
Moved all the implementation into the html.py file
Implemented the creation of the index for active and inactive bugs, with detail for earch of them
Diffstat (limited to 'becommands/html.py')
-rw-r--r--becommands/html.py465
1 files changed, 435 insertions, 30 deletions
diff --git a/becommands/html.py b/becommands/html.py
index b0441b9..3f6d923 100644
--- a/becommands/html.py
+++ b/becommands/html.py
@@ -19,8 +19,8 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
"""Re-open a bug"""
from libbe import cmdutil, bugdir, bug
-from html_data import *
-import os, re, time
+#from html_data import *
+import os, re, time, string
__desc__ = __doc__
@@ -55,19 +55,24 @@ def execute(args, test=False):
st = {}
se = {}
stime = {}
- bugs = []
+ bugs_active = []
+ bugs_inactive = []
for s in status_list:
st[s] = 0
for b in bd:
stime[b.uuid] = b.time
if b.status in ["open", "test", "unconfirmed", "assigned"]:
- bugs.append(b)
+ bugs_active.append(b)
+ else:
+ bugs_inactive.append(b)
st[b.status] += 1
ordered_bug_list = sorted([(value,key) for (key,value) in stime.items()])
+ ordered_bug_list_in = sorted([(value,key) for (key,value) in stime.items()])
#open_bug_list = sorted([(value,key) for (key,value) in bugs.items()])
html_gen = BEHTMLGen(bd)
- html_gen.create_index_file(out_dir, st, bugs, ordered_bug_list)
+ html_gen.create_index_file(out_dir, st, bugs_active, ordered_bug_list, "active")
+ html_gen.create_index_file(out_dir, st, bugs_inactive, ordered_bug_list, "inactive")
def get_parser():
parser = cmdutil.CmdOptionParser("be open OUTPUT_DIR")
@@ -86,7 +91,363 @@ class BEHTMLGen():
self.index_value = ""
self.bd = bd
- def create_index_file(self, out_dir_path, summary, bugs, ordered_bug):
+ self.css_file = """
+ body {
+ font-family: "lucida grande", "sans serif";
+ color: #333;
+ width: 60em;
+ margin: auto;
+ }
+
+
+ div.main {
+ padding: 20px;
+ margin: auto;
+ padding-top: 0;
+ margin-top: 1em;
+ background-color: #fcfcfc;
+ }
+
+ .comment {
+ padding: 20px;
+ margin: auto;
+ padding-top: 20px;
+ margin-top: 0;
+ }
+
+ .commentF {
+ padding: 0px;
+ margin: auto;
+ padding-top: 20px;
+ paddin-bottom: 40px;
+ margin-top: 0;
+ }
+
+ tb {
+ border = 1;
+ }
+
+ .open-row {
+ background-color: #e9e9e2;
+ width: 5%;
+ }
+
+ .assigned-row {
+ background-color: #f9f9f9;
+ width: 5%;
+ }
+
+
+ .test-row {
+ background-color: #f9f9f9;
+ width: 5%;
+ }
+
+ .unconfirmed-row {
+ background-color: #f9f9f9;
+ width: 5%;
+ }
+
+ .fixed-row {
+ background-color: #f9f9f9;
+ width: 5%;
+ }
+
+ .closed-row {
+ background-color: #f9f9f9;
+ width: 5%;
+ }
+
+ .wontfix-row {
+ background-color: #f9f9f9;
+ width: 5%;
+ }
+
+
+ .person {
+ font-family: courier;
+ }
+
+ a, a:visited {
+ background: inherit;
+ text-decoration: none;
+ }
+
+ a {
+ color: #003d41;
+ }
+
+ a:visited {
+ color: #553d41;
+ }
+
+ ul {
+ list-style-type: none;
+ padding: 0;
+ }
+
+ p {
+ width: 40em;
+ }
+
+ .inline-status-image {
+ position: relative;
+ top: 0.2em;
+ }
+
+ .dimmed {
+ color: #bbb;
+ }
+
+ table {
+ border-style: none;
+ border-spacing: 0;
+ }
+
+ table.log {
+ }
+
+
+ td {
+ border-width: 0;
+ border-style: none;
+ padding-right: 0.5em;
+ padding-left: 0.5em;
+ }
+
+ tr {
+ vertical-align: top;
+ }
+
+ h1 {
+ padding: 0.5em;
+ background-color: #305275;
+ margin-top: 0;
+ margin-bottom: 0;
+ color: #fff;
+ margin-left: -20px;
+ margin-right: -20px;
+ }
+
+ h2 {
+ text-transform: uppercase;
+ font-size: smaller;
+ margin-top: 1em;
+ margin-left: -0.5em;
+ /*background: #fffbce;*/
+ /*background: #628a0d;*/
+ padding: 5px;
+ color: #305275;
+ }
+
+
+
+ .attrname {
+ text-align: right;
+ font-size: smaller;
+ }
+
+ .attrval {
+ color: #222;
+ }
+
+ .issue-closed-fixed {
+ background-image: "green-check.png";
+ }
+
+ .issue-closed-wontfix {
+ background-image: "red-check.png";
+ }
+
+ .issue-closed-reorg {
+ background-image: "blue-check.png";
+ }
+
+ .inline-issue-link {
+ text-decoration: underline;
+ }
+
+ img {
+ border: 0;
+ }
+
+
+ div.footer {
+ font-size: small;
+ padding-left: 20px;
+ padding-right: 20px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ margin: auto;
+ background: #305275;
+ color: #fffee7;
+ }
+
+ .footer a {
+ color: #508d91;
+ }
+
+
+ .header {
+ font-family: "lucida grande", "sans serif";
+ font-size: smaller;
+ background-color: #a9a9a9;
+ text-align: left;
+
+ padding-right: 0.5em;
+ padding-left: 0.5em;
+
+ }
+
+
+ .selected-cell {
+ background-color: #e9e9e2;
+ }
+
+ .plain-cell {
+ background-color: #f9f9f9;
+ }
+
+ .backptr {
+ font-size: smaller;
+ width: 100%;
+ text-align: left;
+ padding-bottom: 1em;
+ margin-top: 0;
+ }
+
+ .logcomment {
+ padding-left: 4em;
+ font-size: smaller;
+ }
+
+ .id {
+ font-family: courier;
+ }
+
+ .description {
+ background: #f2f2f2;
+ padding-left: 1em;
+ padding-right: 1em;
+ padding-top: 0.5em;
+ padding-bottom: 0.5em;
+ }
+
+ .message {
+ }
+
+ .littledate {
+ font-size: smaller;
+ }
+
+ .progress-meter-done {
+ background-color: #03af00;
+ }
+
+ .progress-meter-undone {
+ background-color: #ddd;
+ }
+
+ .progress-meter {
+ }
+ """
+
+ self.index_first = """
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <title>BugsEverywhere Issue Tracker</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <link rel="stylesheet" href="style.css" type="text/css" />
+ </head>
+ <body>
+
+
+ <div class="main">
+ <h1>BugsEverywhere Bug List</h1>
+ <table><tr>
+ <td><a href="index.html"><h2>Active Bugs</h2></a></td>
+ <td><a href="index_inactive.html"><h2>Inactive Bugs</h2></a></td>
+ </tr>
+ </table>
+ <table width=100%>
+ <tbody>
+ """
+
+ self.bug_line ="""
+ <tr class=%s-row cellspacing=1>
+ <td ><a href="bugs/%s.html">%s</a></td>
+ <td ><a href="bugs/%s.html">%s</a></td>
+ <td><a href="bugs/%s.html">%s</a></td>
+ <td><a href="bugs/%s.html">%s</a></td>
+ <td><a href="bugs/%s.html">%s</a></td>
+ </tr>
+ """
+
+ self.detail_first = """
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <title>BugsEverywhere Issue Tracker</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <link rel="stylesheet" href="../style.css" type="text/css" />
+ </head>
+ <body>
+
+
+ <div class="main">
+ <h1>BugsEverywhere Bug List</h1>
+ <h2>Bug: _bug_id_</h2>
+ <table >
+ <tbody>
+ """
+
+
+
+ self.detail_line ="""
+ <tr>
+ <td align="right">%s</td><td>%s</td>
+ </tr>
+ """
+
+ self.index_last = """
+ </tbody>
+ </table>
+
+ </div>
+
+ <div class="footer">Generated by <a href="http://www.bugseverywhere.org/">BugsEverywhere</a>.</div>
+
+ </body>
+ </html>
+ """
+
+ self.comment_section = """
+ """
+
+ self.begin_comment_section ="""
+ <tr>
+ <td align=right>Comments:
+ </td>
+ <td>
+ """
+
+
+ self.end_comment_section ="""
+ </td>
+ </tr>
+ """
+
+ self.detail_last = """
+ </tbody>
+ </table>
+ </div>
+ <h2><a href="%s">Back to Index</a></h2>
+ <div class="footer">Generated by <a href="http://www.bugseverywhere.org/">BugsEverywhere</a>.</div>
+ </body>
+ </html>
+ """
+
+
+ def create_index_file(self, out_dir_path, summary, bugs, ordered_bug, fileid):
try:
os.stat(out_dir_path)
except:
@@ -96,7 +457,7 @@ class BEHTMLGen():
raise cmdutil.UsageError, "Cannot create output directory."
try:
FO = open(out_dir_path+"/style.css", "w")
- FO.write(css_file)
+ FO.write(self.css_file)
FO.close()
except:
raise cmdutil.UsageError, "Cannot create the style.css file."
@@ -107,15 +468,18 @@ class BEHTMLGen():
pass
try:
- FO = open(out_dir_path+"/index.html", "w")
+ if fileid == "active":
+ FO = open(out_dir_path+"/index.html", "w")
+ if fileid == "inactive":
+ FO = open(out_dir_path+"/index_inactive.html", "w")
except:
raise cmdutil.UsageError, "Cannot create the index.html file."
- FO.write(index_first)
+ FO.write(self.index_first)
c = 0
t = len(bugs) - 1
for l in range(t, -1, -1):
- line = bug_line%(bugs[l].status,
+ line = self.bug_line%(bugs[l].status,
bugs[l].uuid, bugs[l].uuid[0:3],
bugs[l].uuid, bugs[l].status,
bugs[l].uuid, bugs[l].severity,
@@ -124,11 +488,11 @@ class BEHTMLGen():
)
FO.write(line)
c += 1
- self.CreateDetailFile(bugs[l], out_dir_path)
- FO.write(index_last)
+ self.CreateDetailFile(bugs[l], out_dir_path, fileid)
+ FO.write(self.index_last)
- def CreateDetailFile(self, bug, out_dir_path):
+ def CreateDetailFile(self, bug, out_dir_path, fileid):
f = "%s.html"%bug.uuid
p = out_dir_path+"/bugs/"+f
try:
@@ -136,26 +500,67 @@ class BEHTMLGen():
except:
raise cmdutil.UsageError, "Cannot create the detail html file."
- detail_first_ = re.sub('_bug_id_', bug.uuid[0:3], detail_first)
+ detail_first_ = re.sub('_bug_id_', bug.uuid[0:3], self.detail_first)
FD.write(detail_first_)
- bug_ = self.bd.bug_from_shortname(bug.uuid[0:3])
+ bug_ = self.bd.bug_from_shortname(bug.uuid)
bug_.load_comments(load_full=True)
+
+ FD.write(self.detail_line%("ID : ", bug.uuid))
+ FD.write(self.detail_line%("Short name : ", bug.uuid[0:3]))
+ FD.write(self.detail_line%("Severity : ", bug.severity))
+ FD.write(self.detail_line%("Status : ", bug.status))
+ FD.write(self.detail_line%("Assigned : ", bug.assigned))
+ FD.write(self.detail_line%("Target : ", bug.target))
+ FD.write(self.detail_line%("Reporter : ", bug.reporter))
+ FD.write(self.detail_line%("Creator : ", bug.creator))
+ FD.write(self.detail_line%("Created : ", bug.time_string))
+ FD.write(self.detail_line%("Summary : ", bug.summary))
+ FD.write("<tr><td colspan=2><hr></td></tr>")
+ FD.write(self.begin_comment_section)
+ tr = []
+ b = ''
+ level = 0
for i in bug_.comments():
- print i.uuid, i.in_reply_to
-
- FD.write(detail_line%("ID : ", bug.uuid))
- FD.write(detail_line%("Short name : ", bug.uuid[0:3]))
- FD.write(detail_line%("Severity : ", bug.severity))
- FD.write(detail_line%("Status : ", bug.status))
- FD.write(detail_line%("Assigned : ", bug.assigned))
- FD.write(detail_line%("Target : ", bug.target))
- FD.write(detail_line%("Reporter : ", bug.reporter))
- FD.write(detail_line%("Creator : ", bug.creator))
- FD.write(detail_line%("Created : ", bug.time_string))
- FD.write(detail_line%("Summary : ", bug.summary))
- FD.write("<tr></tr>")
- FD.write(detail_last)
- FD.close() \ No newline at end of file
+ if not isinstance(i.in_reply_to,str):
+ first = True
+ a = i.string_thread(flatten=False)
+ d = re.split('\n',a)
+ for x in range(0,len(d)):
+ hr = ""
+ if re.match(" *--------- Comment ---------",d[x]):
+ com = """
+ %s<br>
+ %s<br>
+ %s<br>
+ %s<br>
+ %s<br>
+ """%(d[x+1],d[x+2],d[x+3],d[x+4],d[x+5])
+ l = re.sub("--------- Comment ---------", "", d[x])
+ ll = l.split(" ")
+ la = l
+ ba = ""
+ if len(la) > level:
+ FD.write("<div class='comment'>")
+ if len(la) < level:
+ FD.write("</div>")
+ if len(la) == 0:
+ if not first :
+ FD.write("</div>")
+ first = False
+ FD.write("<div class='commentF'>")
+ level = len(la)
+ x += 5
+ FD.write(com)
+ FD.write("<hr />")
+ FD.write("</div>")
+ FD.write(self.end_comment_section)
+ if fileid == "active":
+ FD.write(self.detail_last%"../index.html")
+ if fileid == "inactive":
+ FD.write(self.detail_last%"../index_inactive.html")
+ FD.close()
+
+ \ No newline at end of file