bodhi/config/app.cfg | 3
bodhi/metadata.py | 57 +++---
bodhi/static/css/layout.css | 418 ++++++++++++++++++++------------------------
bodhi/templates/login.kid | 25 --
bodhi/templates/metrics.kid | 1
bodhi/templates/new.kid | 1
bodhi/templates/pkg.kid | 7
bodhi/templates/show.kid | 6
bodhi/templates/welcome.kid | 6
9 files changed, 251 insertions(+), 273 deletions(-)
New commits:
commit 5e5d0b21e13e4f529776d1408c764a9bf2c2e4fc
Author: Luke Macken <lmacken(a)redhat.com>
Date: Wed Apr 6 14:56:09 2011 -0400
Apply a patch from Corey Maynard to make our Koji urls configurable.
diff --git a/bodhi/config/app.cfg b/bodhi/config/app.cfg
index 6cd2684..2c951f4 100644
--- a/bodhi/config/app.cfg
+++ b/bodhi/config/app.cfg
@@ -128,6 +128,9 @@ build_dir = '%(top_level_dir)s/../packages'
# Koji's XML-RPC hub
koji_hub = 'https://koji.fedoraproject.org/kojihub'
+# Root url of the Koji instance to point to. No trailing slash
+koji_url = "http://koji.fedoraproject.org"
+
# Koji certs
client_cert = None
clientca_cert = None
diff --git a/bodhi/templates/pkg.kid b/bodhi/templates/pkg.kid
index 96fda69..af142af 100644
--- a/bodhi/templates/pkg.kid
+++ b/bodhi/templates/pkg.kid
@@ -8,6 +8,11 @@
py:replace="''"/>
<title>${pkg.name}</title>
</head>
+<?python
+from turbogears import config
+
+koji_url = config.get('koji_url')
+?>
<body>
@@ -32,7 +37,7 @@
</li>
<li>
<img
src="https://fedoraproject.org/static/images/icons/fedora-infra-icon...
- <a
href="http://koji.fedoraproject.org/koji/search?terms=${pkg.name}&am...
Buildsystem</a>
+ <a
href="${koji_url}/koji/search?terms=${pkg.name}&type=package&match=glob">Koji
Buildsystem</a>
</li>
<li>
<img
src="https://fedoraproject.org/static/css/../images/icons/fedora-inf...
diff --git a/bodhi/templates/show.kid b/bodhi/templates/show.kid
index 458f082..d98cd12 100644
--- a/bodhi/templates/show.kid
+++ b/bodhi/templates/show.kid
@@ -17,15 +17,17 @@
<?python
from cgi import escape
from bodhi import util
-from turbogears import identity
+from turbogears import identity, config
from markdown import markdown
import re
+koji_url = config.get('koji_url')
+
## Link to build info and logs
buildinfo = ''
for build in update.builds:
nvr = util.get_nvr(build.nvr)
- buildinfo += '<a
href="http://koji.fedoraproject.org/koji/search?terms=%s&typ...
(<a
href="http://koji.fedoraproject.org/packages/%s/%s/%s/data/logs"...
% (build.nvr, build.nvr, nvr[0], nvr[1], nvr[2])
+ buildinfo += '<a
href="%s/koji/search?terms=%s&type=build&match=glob">%s</a>
(<a href="%s/packages/%s/%s/%s/data/logs">logs</a>)<br/>'
% (koji_url, build.nvr, build.nvr, koji_url, nvr[0], nvr[1], nvr[2])
## Make the package name linkable in the n-v-r
title = ''
diff --git a/bodhi/templates/welcome.kid b/bodhi/templates/welcome.kid
index 0ebed19..a6530f5 100644
--- a/bodhi/templates/welcome.kid
+++ b/bodhi/templates/welcome.kid
@@ -25,6 +25,10 @@
</script>
</head>
+<?python
+from turbogears import config
+koji_url = config.get('koji_url')
+?>
<body>
<table width="90%" align="center" valign="top">
<tr>
@@ -65,7 +69,7 @@
</td>
<td>
<span id="kojitip" title="Koji
Buildsystem">
- <a
href="http://koji.fedoraproject.org/koji/" class="list"><font
size="6">麹</font></a>
+ <a href="${koji_url}/koji/"
class="list"><font size="6">麹</font></a>
</span>
</td>
</tr>
commit b9a785bf913fa474e260b3853a3391c4e5eb8695
Author: Corey Maynard <me(a)coreymaynard.com>
Date: Wed Apr 6 09:17:42 2011 -0400
This patch makes the check for the package tags optional, by either making the URL an
empty string or None in app.cfg.
Also, adds a header on new.kid, and a title on metrics.kid. Changes to layout.css to
make indentations uniform throughout the file. Minor changes to the structure of
login.kid
diff --git a/bodhi/metadata.py b/bodhi/metadata.py
index 0996943..04c43e5 100644
--- a/bodhi/metadata.py
+++ b/bodhi/metadata.py
@@ -282,35 +282,36 @@ class ExtendedMetadata(object):
def insert_pkgtags(self):
""" Download and inject the pkgtags sqlite from the pkgdb
"""
- try:
- for arch in os.listdir(self.repo):
- if arch == 'SRPMS':
- continue
- filename = ''
- reponame = os.path.basename(self.repo)
- if reponame.startswith('f'):
- release = reponame[1:].split('-')[0]
- filename = 'F-%s-%s-' % (release, arch)
- if 'testing' in reponame:
- filename += 'tu'
+ if config.get('pkgtags_url') not in [None, ""]:
+ try:
+ for arch in os.listdir(self.repo):
+ if arch == 'SRPMS':
+ continue
+ filename = ''
+ reponame = os.path.basename(self.repo)
+ if reponame.startswith('f'):
+ release = reponame[1:].split('-')[0]
+ filename = 'F-%s-%s-' % (release, arch)
+ if 'testing' in reponame:
+ filename += 'tu'
+ else:
+ filename += 'u'
+ elif reponame.startswith('el'):
+ release = reponame[2:].split('-')[0]
+ filename = 'E-%s-%s' % (release, arch)
+ if 'testing' in reponame:
+ filename += '-t'
else:
- filename += 'u'
- elif reponame.startswith('el'):
- release = reponame[2:].split('-')[0]
- filename = 'E-%s-%s' % (release, arch)
- if 'testing' in reponame:
- filename += '-t'
- else:
- log.error('Unknown repo %s' % reponame)
- return
+ log.error('Unknown repo %s' % reponame)
+ return
- tags_url = config.get('pkgtags_url') + filename
- log.info('Downloading %s' % tags_url)
- f = urllib.urlretrieve(tags_url, filename='/tmp/pkgtags.sqlite')
+ tags_url = config.get('pkgtags_url') + filename
+ log.info('Downloading %s' % tags_url)
+ f = urllib.urlretrieve(tags_url,
filename='/tmp/pkgtags.sqlite')
- repomd = RepoMetadata(join(self.repo, arch, 'repodata'))
- repomd.add('/tmp/pkgtags.sqlite')
+ repomd = RepoMetadata(join(self.repo, arch, 'repodata'))
+ repomd.add('/tmp/pkgtags.sqlite')
- except Exception, e:
- log.exception(e)
- log.error("There was a problem injecting pkgtags")
+ except Exception, e:
+ log.exception(e)
+ log.error("There was a problem injecting pkgtags")
diff --git a/bodhi/static/css/layout.css b/bodhi/static/css/layout.css
index f546154..bbcfc0b 100644
--- a/bodhi/static/css/layout.css
+++ b/bodhi/static/css/layout.css
@@ -1,12 +1,12 @@
/* $Id: layout.css,v 1.3 2007/01/06 08:03:27 lmacken Exp $ */
body {
- font-size: 0.9em;
- font-family: liberation, veranda, sans-serif;
+ font-size: 0.9em;
+ font-family: liberation, veranda, sans-serif;
color: #4F4F4F;
- margin: 0;
- padding: 0;
- background-color: #d9d9d9;
+ margin: 0;
+ padding: 0;
+ background-color: #d9d9d9;
}
#form_builds_text {
@@ -14,248 +14,232 @@ body {
}
a:link {
- color: #22437F;
+ color: #22437F;
}
a:visited {
- color: #48468f;
+ color: #48468f;
}
a:hover {
- color: #f20;
+ color: #f20;
}
a[name] {
- color: inherit;
- text-decoration: inherit;
+ color: inherit;
+ text-decoration: inherit;
}
#fedora-header {
- background-color: #fff;
- height: 62px;
+ background-color: #fff;
+ height: 62px;
}
#fedora-header img {
- border: 0;
- vertical-align: middle;
+ border: 0;
+ vertical-align: middle;
}
#fedora-header-logo {
- /* position is offset by the header padding amount */
- position: absolute;
- left: 26px;
- top: 13px;
- z-index: 3;
+ /* position is offset by the header padding amount */
+ position: absolute;
+ left: 26px;
+ top: 13px;
+ z-index: 3;
}
#fedora-header-logo img {
/*
- width: 110px;
- height: 40; */
+ width: 110px;
+ height: 40; */
}
#fedora-header-items {
- /* position is offset by the header padding amount */
- position: absolute;
- right: 10px;
- top: 8px;
- text-align: right;
- display: inline;
+ /* position is offset by the header padding amount */
+ position: absolute;
+ right: 10px;
+ top: 8px;
+ text-align: right;
+ display: inline;
}
#fedora-header-items a {
- color: #000;
- text-decoration: none;
- padding: 7pt;
- font-size: 0.8em;
+ color: #000;
+ text-decoration: none;
+ padding: 7pt;
+ font-size: 0.8em;
}
#fedora-header-items a:hover, #fedora-header-search-button:hover {
- color: #f20;
- cursor: pointer;
+ color: #f20;
+ cursor: pointer;
}
#fedora-header-items img {
- margin-right: 1px;
+ margin-right: 1px;
/*
- width: 36px;
- height: 36px;*/
+ width: 36px;
+ height: 36px;*/
}
#fedora-header-search {
- height: 25px;
+ height: 25px;
}
#fedora-header-search-entry {
- vertical-align: top;
- margin: 0.65em 4px 0 10px;
- padding: 2px 4px;
- background-color: #f5f5f5;
- border: 1px solid #999;
- font-size: 0.8em !important;
+ vertical-align: top;
+ margin: 0.65em 4px 0 10px;
+ padding: 2px 4px;
+ background-color: #f5f5f5;
+ border: 1px solid #999;
+ font-size: 0.8em !important;
}
#fedora-header-search-entry:focus {
- background-color: #fff;
- border: 1px solid #555;
+ background-color: #fff;
+ border: 1px solid #555;
}
#fedora-header-search-button {
- font-size: 0.8em !important;
- vertical-align: top;
- margin-top: 0.2em;
- border: 0;
- padding: 7px;
- padding-left: 21px;
-}
-#fedora-header-items form {
- float: right;
-}
-#fedora-header-items input {
- font-size: 0.85em;
+ font-size: 0.8em !important;
+ vertical-align: top;
+ margin-top: 0.2em;
+ border: 0;
+ padding: 7px;
+ padding-left: 21px;
}
+#fedora-header-items form { float: right; }
+#fedora-header-items input { font-size: 0.85em; }
#fedora-nav {
- margin: 0;
- padding: 0;
- background-color: #22437f;
- font-size: 0;
- height: 5px;
- border-top: 1px solid #000;
- border-bottom: 1px solid #f5f5f5;
+ margin: 0;
+ padding: 0;
+ background-color: #22437f;
+ font-size: 0;
+ height: 5px;
+ border-top: 1px solid #000;
+ border-bottom: 1px solid #f5f5f5;
}
#fedora-nav ul {
- margin: 0;
- padding: 0;
+ margin: 0;
+ padding: 0;
}
#fedora-nav li {
- display: inline;
- list-style: none;
- padding: 0 5pt;
+ display: inline;
+ list-style: none;
+ padding: 0 5pt;
}
#fedora-nav li + li {
- padding-left: 8pt;
- border-left: 1px solid #99a5bf;
+ padding-left: 8pt;
+ border-left: 1px solid #99a5bf;
}
#fedora-nav a {
- color: #c5ccdb;
- text-decoration: none;
-}
-#fedora-nav a:hover {
- color: #fff;
+ color: #c5ccdb;
+ text-decoration: none;
}
+#fedora-nav a:hover { color: #fff; }
#fedora-side-left {
- position: absolute;
- z-index: 2;
- width: 12em;
- /* Space down for the approx line height (fonts) */
- left: 12px;
+ position: absolute;
+ z-index: 2;
+ width: 12em;
+ /* Space down for the approx line height (fonts) */
+ left: 12px;
}
#fedora-side-right {
- position: absolute;
- z-index: 1;
- width: 13em;
- right: 12px;
- padding-top: 3px;
- }
+ position: absolute;
+ z-index: 1;
+ width: 13em;
+ right: 12px;
+ padding-top: 3px;
+}
#fedora-side-left, #fedora-side-right {
- top: 2px;
- /* add to the top margin to compensate for the fixed sizes */
- margin-top: 75px;
- color: #555;
- font-size: 0.9em;
+ top: 2px;
+ /* add to the top margin to compensate for the fixed sizes */
+ margin-top: 75px;
+ color: #555;
+ font-size: 0.9em;
}
#fedora-side-right ul {
- list-style: square inside;
- padding: 0;
- margin: 0;
+ list-style: square inside;
+ padding: 0;
+ margin: 0;
}
/* Left-side naviagation */
-#fedora-side-nav-label {
- display: none;
-}
+#fedora-side-nav-label { display: none; }
#fedora-side-nav {
- list-style: none;
- margin: 0;
- padding: 0;
- border: 1px solid #5976b2;
- border-top: 0;
- background-color: #22437f;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ border: 1px solid #5976b2;
+ border-top: 0;
+ background-color: #22437f;
}
#fedora-side-nav li {
- margin: 0;
- padding: 0;
- border-top: 1px solid #5976b2;
- /* IE/Win gets upset if there is no bottom border... Go figure. */
- border-bottom: 1px solid #22437f;
+ margin: 0;
+ padding: 0;
+ border-top: 1px solid #5976b2;
+ /* IE/Win gets upset if there is no bottom border... Go figure. */
+ border-bottom: 1px solid #22437f;
}
#fedora-side-nav a {
- margin: 0;
- color: #c5ccdb;
- display: block;
- text-decoration: none;
- padding: 4px 6px;
+ margin: 0;
+ color: #c5ccdb;
+ display: block;
+ text-decoration: none;
+ padding: 4px 6px;
}
#fedora-side-nav a:hover {
- background-color: #34548f;
- color: #fff;
+ background-color: #34548f;
+ color: #fff;
}
#fedora-side-nav ul {
- list-style: none;
- margin: 0;
- padding: 0;
+ list-style: none;
+ margin: 0;
+ padding: 0;
}
#fedora-side-nav ul li {
- border-top: 1px solid #34548e;
- background-color: #34548e;
- /* IE/Win gets upset if there is no bottom border... Go figure. */
- border-bottom: 1px solid #34548e;
-}
-#fedora-side-nav ul li:hover {
- border-bottom: 1px solid #34548f;
+ border-top: 1px solid #34548e;
+ background-color: #34548e;
+ /* IE/Win gets upset if there is no bottom border... Go figure. */
+ border-bottom: 1px solid #34548e;
}
+#fedora-side-nav ul li:hover { border-bottom: 1px solid #34548f; }
#fedora-side-nav ul li a {
- padding-left: 18px;
- color: #a7b2c9;
+ padding-left: 18px;
+ color: #a7b2c9;
}
#fedora-side-nav ul li a:hover {
- /*
- background-color: #46659e;
- */
-}
-#fedora-side-nav ul ul li a {
- padding-left: 36px;
+ /*
+ background-color: #46659e;
+ */
}
+#fedora-side-nav ul ul li a { padding-left: 36px; }
#fedora-side-nav strong a {
- font-weight: normal;
- color: #fff !important;
- background-color: #10203b;
-}
-#fedora-side-nav strong a:hover {
- background-color: #172e56 !important;
+ font-weight: normal;
+ color: #fff !important;
+ background-color: #10203b;
}
+#fedora-side-nav strong a:hover { background-color: #172e56 !important; }
/* content containers */
#fedora-middle-one, #fedora-middle-two, #fedora-middle-three {
- font-size: 0.9em;
- /* position: relative; */ /* relative to utilize z-index */
- width: auto;
- min-width: 120px;
- margin: 10px;
- z-index: 3; /* content can overlap when the browser is narrow */
+ font-size: 0.9em;
+ /* position: relative; */ /* relative to utilize z-index */
+ width: auto;
+ min-width: 120px;
+ margin: 10px;
+ z-index: 3; /* content can overlap when the browser is narrow */
}
#fedora-middle-two, #fedora-middle-three {
- margin-left: 12em;
- padding-left: 24px;
-}
-#fedora-middle-three {
- margin-right: 13em;
+ margin-left: 12em;
+ padding-left: 24px;
}
+#fedora-middle-three { margin-right: 13em; }
#fedora-content {
- padding-top: 24px;
- padding-bottom: 24px;
- border: 1px solid #aaa;
- background-color: #fff;
+ padding-top: 24px;
+ padding-bottom: 24px;
+ border: 1px solid #aaa;
+ background-color: #fff;
}
#fedora-content > .fedora-corner-bottom { top: 0 }
.fedora-corner-tl, .fedora-corner-tr, .fedora-corner-bl, .fedora-corner-br {
- background-color: #d9d9d9;
- position: relative;
- width: 19px;
- height: 19px;
- /* The following line is to render PNGs with alpha transparency within IE/Win, using
DirectX */
- /* Work-around for IE6/Mac borkage (Part 1) */
- display: none;
+ background-color: #d9d9d9;
+ position: relative;
+ width: 19px;
+ height: 19px;
+ /* The following line is to render PNGs with alpha transparency within IE/Win, using
DirectX */
+ /* Work-around for IE6/Mac borkage (Part 1) */
+ display: none;
}
.fedora-corner-tl, .fedora-corner-bl { float: left; left: 0px; }
@@ -269,75 +253,71 @@ html>body .fedora-corner-bl { background: #d9d9d9
url("/updates/static/images/co
html>body .fedora-corner-br { background: #d9d9d9
url("/updates/static/images/corner-br.png") no-repeat right bottom; }
.fedora-corner-tl, .fedora-corner-tr, .fedora-corner-bl, .fedora-corner-br {
- /* Restore the view for everything but IE6/Mac (part 2 of the "IE/Mac fix")
*/
- display: block;
+ /* Restore the view for everything but IE6/Mac (part 2 of the "IE/Mac fix")
*/
+ display: block;
}
-.fedora-corner-bl, .fedora-corner-br {
- top: 0px;
-}
+.fedora-corner-bl, .fedora-corner-br { top: 0px; }
.content { margin: 0 1em }
#fedora-sidelist {
- position: relative;
- bottom: 3px;
- margin: 0;
- padding: 3px !important;
- border: 1px solid #bbb;
- background-color: #ccc;
- -moz-border-radius: 2.5px;
+ position: relative;
+ bottom: 3px;
+ margin: 0;
+ padding: 3px !important;
+ border: 1px solid #bbb;
+ background-color: #ccc;
+ -moz-border-radius: 2.5px;
}
#fedora-sidelist strong a {
- font-weight: normal;
- background-color: #555;
- color: #fff;
+ font-weight: normal;
+ background-color: #555;
+ color: #fff;
}
#fedora-sidelist strong a:hover {
- background-color: #333;
- color: #fff;
+ background-color: #333;
+ color: #fff;
}
#fedora-sidelist li {
- list-style-position: outside;
- font-size: 0.9em;
- list-style: none;
- border: 1px solid #ccc;
- border-width: 1px 0;
- padding: 0;
- list-style: none;
+ list-style-position: outside;
+ font-size: 0.9em;
+ list-style: none;
+ border: 1px solid #ccc;
+ border-width: 1px 0;
+ padding: 0;
+ list-style: none;
}
#fedora-sidelist li a {
- text-decoration: none;
- display: block;
- padding: 6px 8px;
- -moz-border-radius: 2.5px;
+ text-decoration: none;
+ display: block;
+ padding: 6px 8px;
+ -moz-border-radius: 2.5px;
}
#fedora-sidelist li a:hover {
- background-color: #999;
- color: #eee;
+ background-color: #999;
+ color: #eee;
}
#fedora-footer {
- font-size: 0.75em;
- text-align: right;
- color: #777;
- margin-bottom: 2em;
+ font-size: 0.75em;
+ text-align: right;
+ color: #777;
+ margin-bottom: 2em;
margin-right: 2em;
}
#fedora-printable {
- text-align: center;
- margin: 1em 0;
- font-size: 0.85em;
+ text-align: center;
+ margin: 1em 0;
+ font-size: 0.85em;
}
#fedora-printable a {
- text-decoration: none;
- padding: 5px 0;
- padding-left: 18px;
- background: transparent url("/images/printable.png") no-repeat left;
-}
-#fedora-printable a:hover {
- text-decoration: underline;
+ text-decoration: none;
+ padding: 5px 0;
+ padding-left: 18px;
+ background: transparent url("/images/printable.png") no-repeat left;
}
+#fedora-printable a:hover { text-decoration: underline; }
input.c1 {
font-size:12px;
@@ -487,13 +467,7 @@ td.value {
padding: 5px;
}
-h1.padded {
- padding-left: 10px;
-}
-
-p.padded {
- padding-left: 10px;
-}
+.padded { padding-left: 10px; }
/*
td.title {
@@ -510,20 +484,17 @@ td.value {
padding-left: 5px;
}
-.release
-{
+.release {
overflow: auto;
}
-.release .link
-{
+.release .link {
float: left;
margin: 0;
padding: 0;
}
-.release .rsslink
-{
+.release .rsslink {
float: right;
width: 18px;
overflow:hidden;
@@ -531,21 +502,18 @@ td.value {
padding-right: 4px!important;
}
-.release .rsslink:hover, .release .link:hover
-{
+.release .rsslink:hover, .release .link:hover {
background: none!important;
}
-.rsslink img
-{
+.rsslink img {
display: block;
border: none;
margin: 0;
padding: 0;
}
-#mashstatus
-{
+#mashstatus {
overflow: scroll;
height: 50em;
}
diff --git a/bodhi/templates/login.kid b/bodhi/templates/login.kid
index eb41cfc..c090fa1 100644
--- a/bodhi/templates/login.kid
+++ b/bodhi/templates/login.kid
@@ -11,25 +11,21 @@
</head>
<body onload="document.login.user_name.focus()">
- <blockquote>
- <h1 class="padded">Fedora Update System</h1>
- <p class="padded">${message}<br/>
- Hint: Use your Fedora username, not your e-mail address.</p>
- </blockquote>
- <form action="${previous_url}" method="POST"
name="login">
+ <div class="padded">
+ <h1>Fedora Update System</h1>
+ <p>${message}</p>
+ <p>Hint: Use your Fedora username, not your e-mail address.</p>
+ </div>
+ <form action="${tg.url(previous_url)}" method="POST"
name="login">
<table class="login">
<tr>
- <td class="title">
- Username:
- </td>
+ <td class="title">Username:</td>
<td class="value">
<input type="text" size="25"
name="user_name" />
</td>
</tr>
<tr>
- <td class="title">
- Password:
- </td>
+ <td class="title">Password:</td>
<td class="value">
<input type="password" size="25"
name="password" />
</td>
@@ -48,9 +44,6 @@
<input py:for="name,value in original_parameters.items()"
type="hidden" name="${name}"
value="${value}"/>
</form>
- <blockquote>
- <p class="padded">Forgot your password? Reset it in the <a
href="https://admin.fedoraproject.org/accounts/user/resetpass"&...
Accounts System</a>.</p>
- </blockquote>
-
+ <p class="padded">Forgot your password? Reset it in the <a
href="https://admin.fedoraproject.org/accounts/user/resetpass"&...
Accounts System</a>.</p>
</body>
</html>
diff --git a/bodhi/templates/metrics.kid b/bodhi/templates/metrics.kid
index f3f4628..09563e0 100644
--- a/bodhi/templates/metrics.kid
+++ b/bodhi/templates/metrics.kid
@@ -5,6 +5,7 @@
<meta content="text/html; charset=UTF-8"
http-equiv="content-type" py:replace="''"/>
<script language="javascript" type="text/javascript"
src="${tg.url('/static/js/jquery.flot.js')}"></script>
<script language="javascript" type="text/javascript"
src="${tg.url('/static/js/excanvas.js')}"></script>
+ <title>${title}</title>
</head>
<body>
<center>
diff --git a/bodhi/templates/new.kid b/bodhi/templates/new.kid
index 40c8933..d605d61 100644
--- a/bodhi/templates/new.kid
+++ b/bodhi/templates/new.kid
@@ -65,6 +65,7 @@
<div py:for="field in hidden_fields"
py:replace="field.display(value_for(field), **params_for(field))"
/>
+ <h3 class="padded">Add New Update</h3>
<table border="0" cellspacing="0"
cellpadding="0">
<tr py:for="i, field in enumerate(fields)">
<td class="title">