teichmann@452: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
teichmann@452:   "http://www.w3.org/TR/html4/loose.dtd">
teichmann@452: <%
teichmann@452: from cgi import escape
teichmann@452: from xml.sax.saxutils import quoteattr
teichmann@452: 
teichmann@452: from datetime import date
teichmann@452: %>
teichmann@452: <html>
teichmann@452:     <head>
teichmann@452:         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
teichmann@452:         <link rel="stylesheet" href="styles/style.css" type="text/css" media="screen" />
teichmann@452:         <title>S&auml;gewerker - Free Software forestry</title>
teichmann@452:  </head>
teichmann@452: 
teichmann@452:  <body>
teichmann@452:   <table border="0" width="100%" cellspacing="0" cellpadding="0">
teichmann@452:    <tr>
teichmann@452:     <td>
teichmann@460:      <a href="index.py"><img src="img/logo.jpg" border="0" alt="" width="533" height="94" /></a>
teichmann@452:     </td>
teichmann@452:    </tr>
teichmann@452:   </table>
teichmann@452:   <table border="0" width="100%" cellspacing="0" cellpadding="0">
teichmann@452: 
teichmann@452:    <tr>
teichmann@452:         <td align="left" bgcolor="#E0E0E0" width="9">
teichmann@452:      <img src="img/topleft.png" height="9" width="9" alt="" />
teichmann@452:     </td>
teichmann@452:         <td bgcolor="#E0E0E0" width="30">
teichmann@452:      <img src="img/clear.png" width="30" height="1" alt="" />
teichmann@452:     </td>
teichmann@452:         <td bgcolor="#E0E0E0">
teichmann@452:      <img src="img/clear.png" width="1" height="1" alt="" />
teichmann@452: 
teichmann@452:     </td>
teichmann@452:         <td bgcolor="#E0E0E0" width="30">
teichmann@452:      <img src="img/clear.png" width="30" height="1" alt="" />
teichmann@452:     </td>
teichmann@452:         <td align="right" bgcolor="#E0E0E0" width="9">
teichmann@452:      <img src="img/topright.png" height="9" width="9" alt="" />
teichmann@452:     </td>
teichmann@452:      </tr>
teichmann@452: 
teichmann@452:      <tr>
teichmann@452:     <!-- Outer body row -->
teichmann@452:     <td bgcolor="#E0E0E0">
teichmann@452:      <img src="img/clear.png" width="10" height="1" alt="" />
teichmann@452:     </td>
teichmann@452:         <td valign="top" width="99%" bgcolor="#E0E0E0" colspan="3">
teichmann@452:        <!-- Inner Tabs / Shell -->
teichmann@452:          <table border="0" width="100%" cellspacing="0" cellpadding="0">
teichmann@452:           <tr>
teichmann@452: 
teichmann@452:              <td align="left" bgcolor="#ffffff" width="9">
teichmann@452:         <img src="img/topleft-inner.png" height="9" width="9" alt="" />
teichmann@452:        </td>
teichmann@452:              <td bgcolor="#ffffff">
teichmann@452:         <img src="img/clear.png" width="1" height="1" alt="" />
teichmann@452:        </td>
teichmann@452:              <td align="right" bgcolor="#ffffff" width="9">
teichmann@452:         <img src="img/topright-inner.png" height="9" width="9" alt="" />
teichmann@452:        </td>
teichmann@452: 
teichmann@452:             </tr>
teichmann@452:             <tr>
teichmann@452:              <td bgcolor="#ffffff">
teichmann@452:         <img src="img/clear.png" width="10" height="1" alt="" />
teichmann@452:        </td>
teichmann@452:              <td valign="top" width="99%" bgcolor="white" class="css_prison">
teichmann@452:         <!-- end main body row -->
teichmann@452: <h1><%= escape(description) %></h1>
teichmann@452: <%= header %>
teichmann@452: <table class="statustable">
teichmann@452: <tr>
teichmann@452:     <th class="statustablehead">Status</th>
teichmann@452:     <th class="statustablehead">Package</th>
teichmann@452:     <th class="statustablehead">Revision</th>
teichmann@452:     <th class="statustablehead">Start</th>
teichmann@452:     <th class="statustablehead">Stop</th>
teichmann@452:     <th class="statustablehead">Notes</th>
teichmann@452: </tr>
teichmann@452: <%
teichmann@452: 
teichmann@452: def nn(s, d=""):
teichmann@452:     if not s: return d
teichmann@452:     return escape(s)
teichmann@452: 
teichmann@452: def pretty_time(t, format="%Y-%m-%d %H:%M:%S"):
teichmann@452:     if not t: return "&lt;unknown&gt;"
teichmann@452:     return t.strftime(format)
teichmann@452: 
teichmann@452: 
teichmann@452: def date_from_datetime(x):
teichmann@452:     if not x: return None
teichmann@452:     return date(x.year, x.month, x.day)
teichmann@452: 
teichmann@452: def sort_by_start(a, b):
teichmann@452:     a_start = a.build_start
teichmann@452:     b_start = b.build_start
teichmann@452:     if not a_start and not b_start: return 0
teichmann@452:     if not a_start: return 1
teichmann@452:     if not b_start: return -1
teichmann@452:     return cmp(a_start, b_start)
teichmann@452: 
teichmann@452: track_items = sorted(track_items, cmp=sort_by_start, reverse=True)
teichmann@452: 
teichmann@452: last_date = None
teichmann@452: 
teichmann@452: STATUS2CLASS = {
teichmann@452:     'creating_binary_package': 'inprogress',
teichmann@468:     'creating_source_package': 'inprogress',
aheinecke@472:     'source_package_created':  'inprogress',
teichmann@452:     'binary_package_created':  'finished'
teichmann@452: }
teichmann@452: 
teichmann@452: STATUS2MSG = {
teichmann@452:     'creating_binary_package': 'building binary packages',
teichmann@468:     'creating_source_package': 'building source package',
aheinecke@472:     'source_package_created':  'preparing build envrionment',
aheinecke@472:     'binary_package_created':  'build successful'
teichmann@452: }
teichmann@452: 
teichmann@452: for track_item in track_items:
teichmann@452:     # for all track items
teichmann@452:     curr_date = date_from_datetime(track_item.build_start)
teichmann@452:     if curr_date != last_date:
teichmann@452:         last_date = curr_date
teichmann@452: %>
teichmann@452: <tr class="date_row"><td colspan="6"><%= pretty_time(last_date, "%Y-%m-%d") %></td></tr>
teichmann@452: <%
teichmann@452:     # date changed
teichmann@452: %>
teichmann@452: <tr class="<%= STATUS2CLASS.get(track_item.build_status, 'error') %>">
teichmann@452:     <td><%= STATUS2MSG.get(track_item.build_status, 'error') %></td>
teichmann@452:     <td style="font-weight:bold;"><%= nn(track_item.track) %></td>
teichmann@452:     <td align="right"><%= nn(track_item.revision) %></td>
teichmann@452:     <td><%= pretty_time(track_item.build_start) %></td>
teichmann@452:     <td><%= pretty_time(track_item.build_stop) %></td>
teichmann@452:     <td>
teichmann@452: <%
teichmann@452:     for log_desc, log_path in track_item.build_logs:
teichmann@452:         # for all logs
teichmann@452: %>
teichmann@452: [<a href=<%= quoteattr("%s/%s" % (base_dir, log_path)) %>><%= nn(log_desc) %></a>]
teichmann@452: 
teichmann@452: <%
teichmann@452:     # for all logs
teichmann@452: %>
teichmann@452:     </td>
teichmann@452: </tr>
teichmann@452: 
teichmann@452: <%
teichmann@452: # for all track itemes
teichmann@452: %>
teichmann@452: 
teichmann@452: </table>
teichmann@452: 
teichmann@452: 
teichmann@452:       <!-- end main body row -->
teichmann@452:              </td>
teichmann@452:              <td width="10" bgcolor="#ffffff">
teichmann@452:         <img src="img/clear.png" width="2" height="1" alt="" />
teichmann@452:        </td>
teichmann@452:             </tr>
teichmann@452: 
teichmann@452:             <tr>
teichmann@452:              <td align="left" bgcolor="#E0E0E0" width="9">
teichmann@452:         <img src="img/bottomleft-inner.png" height="11" width="11" alt="" />
teichmann@452:         </td>
teichmann@452:                 <td bgcolor="#ffffff">
teichmann@452:          <img src="img/clear.png" width="1" height="1" alt="" />
teichmann@452:         </td>
teichmann@452:                 <td align="right" bgcolor="#E0E0E0" width="9">
teichmann@452:          <img src="img/bottomright-inner.png" height="11" width="11" alt="" />
teichmann@452: 
teichmann@452:         </td>
teichmann@452:              </tr>
teichmann@452:             </table>
teichmann@452: 
teichmann@452:           <!-- end inner body row -->
teichmann@452: 
teichmann@452:          </td>
teichmann@452:          <td width="10" bgcolor="#E0E0E0">
teichmann@452:       <img src="img/clear.png" width="2" height="1" alt="" />
teichmann@452:      </td>
teichmann@452: 
teichmann@452:       </tr>
teichmann@452:       <tr>
teichmann@452:          <td align="left" bgcolor="#E0E0E0" width="9">
teichmann@452:       <img src="img/bottomleft.png" height="9" width="9" alt="" />
teichmann@452:      </td>
teichmann@452:          <td bgcolor="#E0E0E0" colspan="3">
teichmann@452:       <img src="img/clear.png" width="1" height="1" alt="" />
teichmann@452:      </td>
teichmann@452:          <td align="right" bgcolor="#E0E0E0" width="9">
teichmann@452: 
teichmann@452:       <img src="img/bottomright.png" height="9" width="9" alt="" />
teichmann@452:      </td>
teichmann@452:       </tr>
teichmann@452:    </table>
teichmann@452:    <br />
teichmann@452:    <center>
teichmann@452:     <b style="color:white; font-size:13px;"> 
teichmann@452:      This site is hosted by the <a href="http://www.intevation.de">Intevation GmbH</a>
teichmann@452:     </b>
teichmann@452:    </center>
teichmann@452: 
teichmann@452:     </body>
teichmann@452: </html>