From 709f2067cde755ec94c1c4eccf4483078d860c35 Mon Sep 17 00:00:00 2001 From: Jan Dittberner Date: Thu, 22 Jan 2009 17:34:46 +0100 Subject: [PATCH] add labels for HTML output - add translatable labels for HTML output (not used for JSON yet) - add oldpeople URL - modify the output template to use one table - add styles - rename action from handle_post to urllist to reflect its use - use a property to determine the order of url sections - use a list with a type to aggregate the urlbuilder results - use textilize to display labels --- ddportfolioservice/config/routing.py | 2 +- ddportfolioservice/controllers/ddportfolio.py | 89 ++++++++++++++++++- ddportfolioservice/model/ddportfolio.ini | 8 +- ddportfolioservice/model/urlbuilder.py | 22 ++--- .../public/stylesheets/style.css | 28 +++++- ddportfolioservice/templates/showform.mako | 7 +- ddportfolioservice/templates/showurls.mako | 48 +++++----- 7 files changed, 163 insertions(+), 41 deletions(-) diff --git a/ddportfolioservice/config/routing.py b/ddportfolioservice/config/routing.py index 19c0972..6d6dfb6 100644 --- a/ddportfolioservice/config/routing.py +++ b/ddportfolioservice/config/routing.py @@ -40,7 +40,7 @@ def make_map(): # CUSTOM ROUTES HERE map.connect('', controller='ddportfolio', action='index') - map.connect('result', controller='ddportfolio', action='handle_post') + map.connect('result', controller='ddportfolio', action='urllist') map.connect(':controller/:action/:id') map.connect('*url', controller='template', action='view') diff --git a/ddportfolioservice/controllers/ddportfolio.py b/ddportfolioservice/controllers/ddportfolio.py index f97a951..d578f18 100644 --- a/ddportfolioservice/controllers/ddportfolio.py +++ b/ddportfolioservice/controllers/ddportfolio.py @@ -30,6 +30,82 @@ from ddportfolioservice.model.urlbuilder import * log = logging.getLogger(__name__) class DdportfolioController(BaseController): + _LABELS = { + 'overview' : { + 'label' : N_('Overview'), + 'ddpo' : N_("Debian Developer's Package Overview"), + 'alladdresses' : N_("""Debian Developer's Package Overview +... showing all email addresses"""), + }, + 'bugs' : { + 'label' : N_('Bugs'), + 'received' : N_('''bugs received +(note: co-maintainers not listed, see \ +#430986)'''), + 'reported' : N_('bugs reported'), + 'bugstats' : N_('bugstats AKA karma'), + 'usertags' : N_('user tags'), + 'searchall' : N_('all messages (i.e., full text search for \ +developer name on all bug logs)'), + 'wnpp' : N_('WNPP'), + }, + 'build' : { + 'label' : N_('Build'), + 'buildd' : N_('buildd.d.o (note: co-maintainers \ +not listed)'), + 'igloo' : N_('igloo'), + 'svnbuildstat' : N_('svnbuildstat'), + }, + 'qa' : { + 'label' : N_('Quality Assurance'), + 'lintian' : N_('lintian reports'), + 'lintianfull' : N_('full lintian reports (i.e. including \ +"info"-level messages)'), + 'dehs' : N_('DEHS (Debian External Health Status)'), + }, + 'upload' : { + 'label' : N_('Upload'), + 'keylog' : N_('''keylog (per-key upload list) +(note: uses key fingerprint)'''), + }, + 'lists' : { + 'label' : N_('Mailing Lists'), + 'dolists' : N_('lists.d.o'), + 'adolists' : N_('lists.a.d.o'), + 'gmane' : N_('gmane'), + }, + 'files' : { + 'label' : N_('Files'), + 'people' : N_('people.d.o'), + 'oldpeople' : N_('oldpeople'), + 'alioth' : N_('Alioth'), + }, + 'membership' : { + 'label' : N_('Membership'), + 'nm' : N_('NM'), + 'db' : N_('DB'), + 'alioth' : N_('Alioth'), + }, + 'miscellaneous' : { + 'label' : N_('Miscellaneous'), + 'debtags' : N_('debtags'), + 'links' : N_('links'), + }, + } + + + def _get_label(self, section, url=None): + if section in self._LABELS: + if url: + if url in self._LABELS[section]: + return self._LABELS[section][url] + elif 'label' in self._LABELS[section]: + return self._LABELS[section]['label'] + if url: + return "%s.%s" % (section, url) + return section + def index(self): # Return a rendered template @@ -37,7 +113,8 @@ class DdportfolioController(BaseController): # or, Return a response return render('/showform.mako') - def handle_post(self): + def urllist(self): + """Handle the actual data.""" schema = DeveloperData() try: formencode.api.set_stdtranslation( @@ -50,6 +127,14 @@ class DdportfolioController(BaseController): data = build_urls(form_result) if 'mode' in request.params and request.params['mode'] == 'json': response.headers['Content-Type'] = 'text/json' - return simplejson.dumps(data['data']) + return simplejson.dumps( + dict([("%s.%s" % \ + (entry[1], entry[2]), entry[3]) \ + for entry in data if entry[0] == 'url'])) + for entry in data: + if entry[0] in ('url', 'error'): + entry.append(_(self._get_label(entry[1], entry[2]))) + elif entry[0] == 'section': + entry.append(_(self._get_label(entry[1]))) c.urldata = data return render('/showurls.mako') diff --git a/ddportfolioservice/model/ddportfolio.ini b/ddportfolioservice/model/ddportfolio.ini index 719d3d6..2f72d40 100644 --- a/ddportfolioservice/model/ddportfolio.ini +++ b/ddportfolioservice/model/ddportfolio.ini @@ -1,4 +1,7 @@ # +# Configuration for DDPortfolio service +# Copyright (c) 2009 Jan Dittberner +# # This file is part of DDPortfolio service. # # DDPortfolio service is free software: you can redistribute it and/or @@ -17,6 +20,8 @@ # [DEFAULT] keyring.dir=/usr/share/keyrings +urlbuilder.sections=overview,bugs,build,qa,upload,lists,files,membership, + miscellaneous [overview] urls=ddpo,alladdresses @@ -55,8 +60,9 @@ adolists.pattern=http://www.google.com/search?q=site%%3Alists.alioth.debian.org+ gmane.pattern=http://search.gmane.org/?email=%(name)s&group=gmane.linux.debian.* [files] -urls=people,alioth +urls=people,oldpeople,alioth people.pattern=http://people.debian.org/~%(username)s/ +oldpeople.pattern=http://oldpeople.debian.org/~%(username)s/ alioth.pattern=http://alioth.debian.org/~%(username)s/ [membership] diff --git a/ddportfolioservice/model/urlbuilder.py b/ddportfolioservice/model/urlbuilder.py index e5cd8ff..f58351b 100644 --- a/ddportfolioservice/model/urlbuilder.py +++ b/ddportfolioservice/model/urlbuilder.py @@ -31,6 +31,7 @@ import pkg_resources from ddportfolioservice.model import keyfinder from urllib import quote_plus + my_config = ConfigParser.ConfigParser() my_config.readfp(pkg_resources.resource_stream(__name__, 'ddportfolio.ini')) @@ -38,23 +39,24 @@ my_config.readfp(pkg_resources.resource_stream(__name__, 'ddportfolio.ini')) def build_urls(fields): """Build personalized URLs using the developer information in fields.""" - data = {} - errors = {} + data = [] qfields = dict([(key, quote_plus(fields[key].encode('utf8'))) \ for key in fields]) fpr = keyfinder.getFingerprintByEmail(fields['email'].encode('utf8')) if fpr: qfields['gpgfp'] = fpr[0] - for section in my_config.sections(): + for section in [section.strip() for section in \ + my_config.get('DEFAULT', + 'urlbuilder.sections').split(',')]: + data.append(['section', section]) if my_config.has_option(section, 'urls'): for url in my_config.get(section, 'urls').split(','): if my_config.has_option(section, url + '.pattern'): try: - data[section + '.' + url] = \ - my_config.get(section, url + '.pattern', - False, qfields) + data.append( + ['url', section, url, + my_config.get(section, url + '.pattern', + False, qfields)]) except Exception, e: - errors['%s.%s.pattern' % (section, url)] = \ - [my_config.get(section, '%s.pattern' % url, - True), str(e)] - return {'data' : data, 'errors' : errors} + data.append(['error', section, url, str(e)]) + return data diff --git a/ddportfolioservice/public/stylesheets/style.css b/ddportfolioservice/public/stylesheets/style.css index db49c40..b052126 100644 --- a/ddportfolioservice/public/stylesheets/style.css +++ b/ddportfolioservice/public/stylesheets/style.css @@ -1,4 +1,28 @@ +html, body { + font-family:sans, Arial; + font-size:10pt; +} + +table { + border-collapse:collapse; + width:100%; +} + +th, td { + border:1px solid grey; +} + +td { + vertical-align:top; + padding:2px; +} + +td p { + padding:0; + margin:0; +} + .errormsg { - font-size: 80%; - color: red; + font-size:80%; + color:red; } \ No newline at end of file diff --git a/ddportfolioservice/templates/showform.mako b/ddportfolioservice/templates/showform.mako index e953bbd..baace1b 100644 --- a/ddportfolioservice/templates/showform.mako +++ b/ddportfolioservice/templates/showform.mako @@ -1,3 +1,5 @@ + <%doc> Template for the data input form. Copyright (c) 2009 Jan Dittberner @@ -18,16 +20,13 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . - ${_('Debian Developer Portfolio')} ${h.stylesheet_link_tag('style')} - ${h.start_form(h.url_for(action='handle_post'), method='get')} + ${h.start_form(h.url_for(action='urllist'), method='get')}
${_('Debian Developer Portfolio')}