forked from jan/debianmemberportfolio
Jan Dittberner
74ed088cf9
* extraparams: generate wikihomepage from name if parameter is missing add translations for new pattern labels add support for optional patterns support non unicode fields add new patterns for wiki and forum improve handling of missing fields accept extra fields forumsid and wikihomepage use the fixed set of dependency versions from Lenny
181 lines
6.7 KiB
Python
181 lines
6.7 KiB
Python
# -*- python -*-
|
|
# -*- coding: utf-8 -*-
|
|
#
|
|
# DDPortfolio service DdportfolioController
|
|
# Copyright © 2009, 2010 Jan Dittberner <jan@dittberner.info>
|
|
#
|
|
# This file is part of DDPortfolio service.
|
|
#
|
|
# DDPortfolio service is free software: you can redistribute it and/or
|
|
# modify it under the terms of the GNU Affero General Public License
|
|
# as published by the Free Software Foundation, either version 3 of
|
|
# the License, or (at your option) any later version.
|
|
#
|
|
# DDPortfolio service is distributed in the hope that it will be
|
|
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
|
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# Affero General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public
|
|
# License along with this program. If not, see
|
|
# <http://www.gnu.org/licenses/>.
|
|
#
|
|
import logging
|
|
import simplejson
|
|
|
|
from pylons import request, tmpl_context as c
|
|
from pylons.i18n import N_, _
|
|
import formencode.api
|
|
import formencode.validators
|
|
|
|
from ddportfolioservice.lib.base import BaseController, render
|
|
from ddportfolioservice.model.form import DDDataRequest, DeveloperData
|
|
from ddportfolioservice.model.urlbuilder import build_urls
|
|
from ddportfolioservice.model import dddatabuilder
|
|
|
|
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 \
|
|
<a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?\
|
|
bug=430986">#430986</a>)'''),
|
|
'reported' : N_('bugs reported'),
|
|
'bugstats' : N_('bugstats AKA <em>karma</em>'),
|
|
'usertags' : N_('user tags'),
|
|
'searchall' : N_('all messages (i.e., full text search for \
|
|
developer name on all bug logs)'),
|
|
'wnpp' : N_('<a href="http://wiki.debian.org/WNPP">WNPP</a>'),
|
|
'correspondent' : N_('correspondent for bugs'),
|
|
},
|
|
'build' : {
|
|
'label' : N_('Build'),
|
|
'buildd' : N_('buildd.d.o (note: co-maintainers \
|
|
<em>not</em> 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)'),
|
|
'piuparts' : N_('piuparts'),
|
|
'patchtracker' : N_('Debian patch tracking system'),
|
|
},
|
|
'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'),
|
|
'wiki' : N_('Wiki'),
|
|
'forum' : N_('Forum'),
|
|
},
|
|
'miscellaneous' : {
|
|
'label' : N_('Miscellaneous'),
|
|
'debtags' : N_('debtags'),
|
|
'links' : N_('links'),
|
|
'website' : N_('Debian website'),
|
|
'search' : N_('Debian search'),
|
|
},
|
|
'ubuntu' : {
|
|
'label' : N_('Ubuntu'),
|
|
'ubuntudiff' : N_('Available patches from Ubuntu'),
|
|
},
|
|
}
|
|
|
|
|
|
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
|
|
# return render('/some/template.mako')
|
|
# or, Return a response
|
|
return render('/showform.mako')
|
|
|
|
def urllist(self):
|
|
"""Handle the actual data."""
|
|
schema = DDDataRequest()
|
|
try:
|
|
formencode.api.set_stdtranslation(
|
|
domain="FormEncode",
|
|
languages=[lang[0:2] for lang in request.languages])
|
|
form_result = schema.to_python(request.params)
|
|
except formencode.validators.Invalid, error:
|
|
c.messages = { 'errors' : error.unpack_errors() }
|
|
return render('/showform.mako')
|
|
fields = dddatabuilder.build_data(form_result['email'])
|
|
rp = request.params.copy()
|
|
if fields['isdd']:
|
|
for tuple in (('name', 'name'),
|
|
('gpgfp', 'gpgfp'),
|
|
('username', 'username'),
|
|
('aliothusername', 'username'),
|
|
('nonddemail', 'email')):
|
|
if not tuple[0] in rp or not rp[tuple[0]]:
|
|
rp[tuple[0]] = fields[tuple[1]]
|
|
|
|
schema = DeveloperData()
|
|
try:
|
|
formencode.api.set_stdtranslation(
|
|
domain="FormEncode",
|
|
languages=[lang[0:2] for lang in request.languages])
|
|
form_result = schema.to_python(rp)
|
|
except formencode.validators.Invalid, error:
|
|
c.messages = { 'errors' : error.unpack_errors() }
|
|
return render('/showform.mako')
|
|
if form_result['wikihomepage'] is None:
|
|
log.debug('generate wikihomepage from name')
|
|
form_result['wikihomepage'] = "".join(
|
|
[part.capitalize() for part in form_result['name'].split()])
|
|
data = build_urls(form_result)
|
|
if form_result['mode'] == 'json':
|
|
response.headers['Content-Type'] = 'text/javascript'
|
|
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')
|