Merge branch 'release/0.2.2'

* release/0.2.2:
  bump version to 0.2.2
  PEP-8 compliance
  add missing import of response from pylons
  update translation
  update strings in controllers
  update translations
  add babel to install_requires
  modify templates
  rewrap README
This commit is contained in:
Jan Dittberner 2012-01-07 01:50:49 +01:00
commit f27e193b0f
25 changed files with 295 additions and 252 deletions

View file

@ -1,3 +1,9 @@
2012-01-07 Jan Dittberner <jan@dittberner.info>
* rename Debian Developer to Debian Member, change URL to
portfolio.debian.net
* PEP-8 compliance
2011-03-06 Jan Dittberner <jan@dittberner.info> 2011-03-06 Jan Dittberner <jan@dittberner.info>
* add one year bug history graph URL (http://glandium.org/blog/?p=1817) * add one year bug history graph URL (http://glandium.org/blog/?p=1817)

View file

@ -1,5 +1,6 @@
This file is for you to describe the ddportfolioservice application. Typically This file is for you to describe the ddportfolioservice
you would include information such as the information below: application. Typically you would include information such as the
information below:
Installation and Setup Installation and Setup
====================== ======================

View file

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# DDPortfolio service environment configuration # DDPortfolio service environment configuration
# Copyright © 2009, 2010 Jan Dittberner <jan@dittberner.info> # Copyright © 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of DDPortfolio service. # This file is part of DDPortfolio service.
# #
@ -31,9 +31,10 @@ import ddportfolioservice.lib.app_globals as app_globals
import ddportfolioservice.lib.helpers import ddportfolioservice.lib.helpers
from ddportfolioservice.config.routing import make_map from ddportfolioservice.config.routing import make_map
def load_environment(global_conf, app_conf): def load_environment(global_conf, app_conf):
"""Configure the Pylons environment via the ``pylons.config`` """
object Configure the Pylons environment via the ``pylons.config`` object
""" """
config = PylonsConfig() config = PylonsConfig()
@ -45,7 +46,8 @@ def load_environment(global_conf, app_conf):
templates=[os.path.join(root, 'templates')]) templates=[os.path.join(root, 'templates')])
# Initialize config with the basic options # Initialize config with the basic options
config.init_app(global_conf, app_conf, package='ddportfolioservice', paths=paths) config.init_app(
global_conf, app_conf, package='ddportfolioservice', paths=paths)
config['routes.map'] = make_map(config) config['routes.map'] = make_map(config)
config['pylons.app_globals'] = app_globals.Globals(config) config['pylons.app_globals'] = app_globals.Globals(config)
@ -54,7 +56,6 @@ def load_environment(global_conf, app_conf):
# Setup cache object as early as possible # Setup cache object as early as possible
import pylons import pylons
pylons.cache._push_object(config['pylons.app_globals'].cache) pylons.cache._push_object(config['pylons.app_globals'].cache)
# Create the Mako TemplateLookup, with the default auto-escaping # Create the Mako TemplateLookup, with the default auto-escaping
config['pylons.app_globals'].mako_lookup = TemplateLookup( config['pylons.app_globals'].mako_lookup = TemplateLookup(

View file

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# DDPortfolio service middleware configuration # DDPortfolio service middleware configuration
# Copyright © 2009, 2010 Jan Dittberner <jan@dittberner.info> # Copyright © 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of DDPortfolio service. # This file is part of DDPortfolio service.
# #
@ -32,6 +32,7 @@ from routes.middleware import RoutesMiddleware
from ddportfolioservice.config.environment import load_environment from ddportfolioservice.config.environment import load_environment
def make_app(global_conf, full_stack=True, static_files=True, **app_conf): def make_app(global_conf, full_stack=True, static_files=True, **app_conf):
"""Create a Pylons WSGI application and return it """Create a Pylons WSGI application and return it

View file

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# DDPortfolio service routing configuration # DDPortfolio service routing configuration
# Copyright © 2009, 2010 Jan Dittberner <jan@dittberner.info> # Copyright © 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of DDPortfolio service. # This file is part of DDPortfolio service.
# #
@ -28,6 +28,7 @@ refer to the routes manual at http://routes.groovie.org/docs/
""" """
from routes import Mapper from routes import Mapper
def make_map(config): def make_map(config):
"""Create, configure and return the routes Mapper""" """Create, configure and return the routes Mapper"""
map = Mapper(directory=config['pylons.paths']['controllers'], map = Mapper(directory=config['pylons.paths']['controllers'],

View file

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# DDPortfolio service DdportfolioController # DDPortfolio service DdportfolioController
# Copyright © 2009, 2010, 2011 Jan Dittberner <jan@dittberner.info> # Copyright © 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of DDPortfolio service. # This file is part of DDPortfolio service.
# #
@ -23,7 +23,7 @@
import logging import logging
import simplejson import simplejson
from pylons import request, tmpl_context as c from pylons import request, response, tmpl_context as c
from pylons.i18n import N_, _ from pylons.i18n import N_, _
import formencode.api import formencode.api
import formencode.validators import formencode.validators
@ -35,91 +35,92 @@ from ddportfolioservice.model import dddatabuilder
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class DdportfolioController(BaseController): class DdportfolioController(BaseController):
_LABELS = { _LABELS = {
'overview' : { 'overview': {
'label' : N_('Overview'), 'label': N_('Overview'),
'ddpo' : N_("Debian Developer's Package Overview"), 'ddpo': N_("Debian Member's Package Overview"),
'alladdresses' : N_("""Debian Developer's Package Overview 'alladdresses': N_("""Debian Member's Package Overview
... showing all email addresses"""), ... showing all email addresses"""),
}, },
'bugs' : { 'bugs': {
'label' : N_('Bugs'), 'label': N_('Bugs'),
'received' : N_('''bugs received 'received': N_('''bugs received
(note: co-maintainers not listed, see \ (note: co-maintainers not listed, see \
<a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?\ <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?\
bug=430986">#430986</a>)'''), bug=430986">#430986</a>)'''),
'reported' : N_('bugs reported'), 'reported': N_('bugs reported'),
'bugstats' : N_('bugstats AKA <em>karma</em>'), 'bugstats': N_('bugstats AKA <em>karma</em>'),
'usertags' : N_('user tags'), 'usertags': N_('user tags'),
'searchall' : N_('all messages (i.e., full text search for \ 'searchall': N_('all messages (i.e., full text search for \
developer name on all bug logs)'), developer name on all bug logs)'),
'wnpp' : N_('<a href="http://wiki.debian.org/WNPP">WNPP</a>'), 'wnpp': N_('<a href="http://wiki.debian.org/WNPP">WNPP</a>'),
'correspondent' : N_('correspondent for bugs'), 'correspondent': N_('correspondent for bugs'),
'graph' : N_('one year open bug history graph'), 'graph': N_('one year open bug history graph'),
}, },
'build' : { 'build': {
'label' : N_('Build'), 'label': N_('Build'),
'buildd' : N_('buildd.d.o'), 'buildd': N_('buildd.d.o'),
'igloo' : N_('igloo'), 'igloo': N_('igloo'),
}, },
'qa' : { 'qa': {
'label' : N_('Quality Assurance'), 'label': N_('Quality Assurance'),
'lintian' : N_('lintian reports'), 'lintian': N_('lintian reports'),
'lintianfull' : N_('full lintian reports (i.e. including \ 'lintianfull': N_('full lintian reports (i.e. including \
"info"-level messages)'), "info"-level messages)'),
'dehs' : N_('DEHS (Debian External Health Status)'), 'dehs': N_('DEHS (Debian External Health Status)'),
'piuparts' : N_('piuparts'), 'piuparts': N_('piuparts'),
'patchtracker' : N_('Debian patch tracking system'), 'patchtracker': N_('Debian patch tracking system'),
}, },
'upload' : { 'upload': {
'label' : N_('Upload'), 'label': N_('Upload'),
'keylog' : N_('''keylog (per-key upload list) 'keylog': N_('''keylog (per-key upload list)
(note: uses key fingerprint)'''), (note: uses key fingerprint)'''),
}, },
'lists' : { 'lists': {
'label' : N_('Mailing Lists'), 'label': N_('Mailing Lists'),
'dolists' : N_('lists.d.o'), 'dolists': N_('lists.d.o'),
'adolists' : N_('lists.a.d.o'), 'adolists': N_('lists.a.d.o'),
'gmane' : N_('gmane'), 'gmane': N_('gmane'),
}, },
'files' : { 'files': {
'label' : N_('Files'), 'label': N_('Files'),
'people' : N_('people.d.o'), 'people': N_('people.d.o'),
'oldpeople' : N_('oldpeople'), 'oldpeople': N_('oldpeople'),
'alioth' : N_('Alioth'), 'alioth': N_('Alioth'),
}, },
'membership' : { 'membership': {
'label' : N_('Membership'), 'label': N_('Membership'),
'nm' : N_('NM'), 'nm': N_('NM'),
'dbfinger' : N_('DB information via finger'), 'dbfinger': N_('DB information via finger'),
'db' : N_('DB information via HTTP'), 'db': N_('DB information via HTTP'),
'alioth' : N_('Alioth'), 'alioth': N_('Alioth'),
'wiki' : N_('Wiki'), 'wiki': N_('Wiki'),
'forum' : N_('Forum'), 'forum': N_('Forum'),
}, },
'miscellaneous' : { 'miscellaneous': {
'label' : N_('Miscellaneous'), 'label': N_('Miscellaneous'),
'debtags' : N_('debtags'), 'debtags': N_('debtags'),
'links' : N_('links'), 'links': N_('links'),
'website' : N_('Debian website'), 'website': N_('Debian website'),
'search' : N_('Debian search'), 'search': N_('Debian search'),
'gpgfinger' : N_('GPG public key via finger'), 'gpgfinger': N_('GPG public key via finger'),
'gpgweb' : N_('GPG public key via HTTP'), 'gpgweb': N_('GPG public key via HTTP'),
}, },
'ssh' : { 'ssh': {
'label' : N_('Information reachable via ssh (for DDs)'), 'label': N_('Information reachable via ssh (for Debian Members)'),
'owndndoms' : N_('owned debian.net domains'), 'owndndoms': N_('owned debian.net domains'),
'miainfo' : N_('<a href="http://wiki.debian.org/qa.debian.org/MIATeam">MIA</a> database information'), 'miainfo': N_('<a href="http://wiki.debian.org/qa.debian.org/'
'groupinfo' : N_('Group membership information'), 'MIATeam">MIA</a> database information'),
'groupinfo': N_('Group membership information'),
}, },
'ubuntu' : { 'ubuntu': {
'label' : N_('Ubuntu'), 'label': N_('Ubuntu'),
'ubuntudiff' : N_('Available patches from Ubuntu'), 'ubuntudiff': N_('Available patches from Ubuntu'),
}, },
} }
def _get_label(self, section, url=None): def _get_label(self, section, url=None):
if section in self._LABELS: if section in self._LABELS:
if url: if url:
@ -131,11 +132,10 @@ developer name on all bug logs)'),
return "%s.%s" % (section, url) return "%s.%s" % (section, url)
return section return section
def index(self): def index(self):
# Return a rendered template """
# return render('/some/template.mako') Render the input form.
# or, Return a response """
return render('/showform.mako') return render('/showform.mako')
def urllist(self): def urllist(self):
@ -147,7 +147,7 @@ developer name on all bug logs)'),
languages=[lang[0:2] for lang in request.languages]) languages=[lang[0:2] for lang in request.languages])
form_result = schema.to_python(request.params) form_result = schema.to_python(request.params)
except formencode.validators.Invalid, error: except formencode.validators.Invalid, error:
c.messages = { 'errors' : error.unpack_errors() } c.messages = {'errors': error.unpack_errors()}
return render('/showform.mako') return render('/showform.mako')
fields = dddatabuilder.build_data(form_result['email']) fields = dddatabuilder.build_data(form_result['email'])
rp = request.params.copy() rp = request.params.copy()
@ -174,7 +174,7 @@ developer name on all bug logs)'),
languages=[lang[0:2] for lang in request.languages]) languages=[lang[0:2] for lang in request.languages])
form_result = schema.to_python(rp) form_result = schema.to_python(rp)
except formencode.validators.Invalid, error: except formencode.validators.Invalid, error:
c.messages = { 'errors' : error.unpack_errors() } c.messages = {'errors': error.unpack_errors()}
return render('/showform.mako') return render('/showform.mako')
if form_result['wikihomepage'] is None: if form_result['wikihomepage'] is None:
log.debug('generate wikihomepage from name') log.debug('generate wikihomepage from name')

View file

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# DDPortfolio service ErrorController # DDPortfolio service ErrorController
# Copyright © 2009, 2010 Jan Dittberner <jan@dittberner.info> # Copyright © 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of DDPortfolio service. # This file is part of DDPortfolio service.
# #
@ -30,8 +30,8 @@ from webhelpers.html.builder import literal
from ddportfolioservice.lib.base import BaseController from ddportfolioservice.lib.base import BaseController
class ErrorController(BaseController):
class ErrorController(BaseController):
"""Generates error documents as and when they are required. """Generates error documents as and when they are required.
The ErrorDocuments middleware forwards to ErrorController when error The ErrorDocuments middleware forwards to ErrorController when error
@ -39,16 +39,17 @@ class ErrorController(BaseController):
This behaviour can be altered by changing the parameters to the This behaviour can be altered by changing the parameters to the
ErrorDocuments middleware in your config/middleware.py file. ErrorDocuments middleware in your config/middleware.py file.
""" """
def document(self): def document(self):
"""Render the error document""" """Render the error document"""
resp = request.environ.get('pylons.original_response') resp = request.environ.get('pylons.original_response')
content = literal(resp.body) or cgi.escape(request.GET.get('message', '')) content = literal(resp.body) or cgi.escape(
request.GET.get('message', ''))
page = error_document_template % \ page = error_document_template % \
dict(prefix=request.environ.get('SCRIPT_NAME', ''), dict(prefix=request.environ.get('SCRIPT_NAME', ''),
code=cgi.escape(request.GET.get('code', str(resp.status_int))), code=cgi.escape(
request.GET.get('code', str(resp.status_int))),
message=content) message=content)
return page return page
@ -61,8 +62,9 @@ class ErrorController(BaseController):
return self._serve_file('/'.join(['media/style', id])) return self._serve_file('/'.join(['media/style', id]))
def _serve_file(self, path): def _serve_file(self, path):
"""Call Paste's FileApp (a WSGI application) to serve the file """
at the specified path Call Paste's FileApp (a WSGI application) to serve the file at
the specified path
""" """
request.environ['PATH_INFO'] = '/%s' % path request.environ['PATH_INFO'] = '/%s' % path
return forward(PkgResourcesParser('pylons', 'pylons')) return forward(PkgResourcesParser('pylons', 'pylons'))

View file

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# DDPortfolio service ShowformscriptController. # DDPortfolio service ShowformscriptController.
# Copyright © 2009, 2010 Jan Dittberner <jan@dittberner.info> # Copyright © 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of DDPortfolio service. # This file is part of DDPortfolio service.
# #
@ -34,6 +34,7 @@ from ddportfolioservice.model import dddatabuilder
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class ShowformscriptsController(BaseController): class ShowformscriptsController(BaseController):
"""This controller is used to support data entry in showform. """This controller is used to support data entry in showform.
@ -41,12 +42,17 @@ class ShowformscriptsController(BaseController):
responses for autocompletion of fields.""" responses for autocompletion of fields."""
def index(self): def index(self):
"""This action generates the helper script for the showform """
page.""" This action generates the helper script for the showform page.
"""
response.headers['Content-Type'] = 'text/javascript; charset=utf-8' response.headers['Content-Type'] = 'text/javascript; charset=utf-8'
return render('/showformscript.mako') return render('/showformscript.mako')
def fetchdddata(self): def fetchdddata(self):
"""
This action fetches the data for a given mail address and
returns them as JSON.
"""
schema = DDDataRequest() schema = DDDataRequest()
try: try:
formencode.api.set_stdtranslation( formencode.api.set_stdtranslation(

View file

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# DDPortfolio service TemplateController # DDPortfolio service TemplateController
# Copyright © 2009, 2010 Jan Dittberner <jan@dittberner.info> # Copyright © 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of DDPortfolio service. # This file is part of DDPortfolio service.
# #
@ -22,6 +22,7 @@
# #
from ddportfolioservice.lib.base import BaseController from ddportfolioservice.lib.base import BaseController
class TemplateController(BaseController): class TemplateController(BaseController):
def view(self, url): def view(self, url):

View file

@ -1,34 +1,34 @@
# Translations template for ddportfolioservice. # Translations template for ddportfolioservice.
# Copyright (C) 2011 ORGANIZATION # Copyright (C) 2012 ORGANIZATION
# This file is distributed under the same license as the ddportfolioservice # This file is distributed under the same license as the ddportfolioservice
# project. # project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011. # FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
# #
#, fuzzy #, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: ddportfolioservice 0.2.1\n" "Project-Id-Version: ddportfolioservice 0.2.1\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2011-03-06 17:30+0100\n" "POT-Creation-Date: 2012-01-07 01:16+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 0.9.4\n" "Generated-By: Babel 0.9.5\n"
#: ddportfolioservice/controllers/ddportfolio.py:41 #: ddportfolioservice/controllers/ddportfolio.py:41
msgid "Overview" msgid "Overview"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:42 #: ddportfolioservice/controllers/ddportfolio.py:42
msgid "Debian Developer's Package Overview" msgid "Debian Member's Package Overview"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:43 #: ddportfolioservice/controllers/ddportfolio.py:43
msgid "" msgid ""
"Debian Developer's Package Overview\n" "Debian Member's Package Overview\n"
"... showing all email addresses" "... showing all email addresses"
msgstr "" msgstr ""
@ -79,152 +79,152 @@ msgstr ""
msgid "buildd.d.o" msgid "buildd.d.o"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:65 #: ddportfolioservice/controllers/ddportfolio.py:64
msgid "igloo" msgid "igloo"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:68 #: ddportfolioservice/controllers/ddportfolio.py:67
msgid "Quality Assurance" msgid "Quality Assurance"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:69 #: ddportfolioservice/controllers/ddportfolio.py:68
msgid "lintian reports" msgid "lintian reports"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:70 #: ddportfolioservice/controllers/ddportfolio.py:69
msgid "full lintian reports (i.e. including \"info\"-level messages)" msgid "full lintian reports (i.e. including \"info\"-level messages)"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:72 #: ddportfolioservice/controllers/ddportfolio.py:71
msgid "DEHS (Debian External Health Status)" msgid "DEHS (Debian External Health Status)"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:73 #: ddportfolioservice/controllers/ddportfolio.py:72
msgid "piuparts" msgid "piuparts"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:74 #: ddportfolioservice/controllers/ddportfolio.py:73
msgid "Debian patch tracking system" msgid "Debian patch tracking system"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:77 #: ddportfolioservice/controllers/ddportfolio.py:76
msgid "Upload" msgid "Upload"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:78 #: ddportfolioservice/controllers/ddportfolio.py:77
msgid "" msgid ""
"keylog (per-key upload list)\n" "keylog (per-key upload list)\n"
"(note: uses key fingerprint)" "(note: uses key fingerprint)"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:82 #: ddportfolioservice/controllers/ddportfolio.py:81
msgid "Mailing Lists" msgid "Mailing Lists"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:83 #: ddportfolioservice/controllers/ddportfolio.py:82
msgid "lists.d.o" msgid "lists.d.o"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:84 #: ddportfolioservice/controllers/ddportfolio.py:83
msgid "lists.a.d.o" msgid "lists.a.d.o"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:85 #: ddportfolioservice/controllers/ddportfolio.py:84
msgid "gmane" msgid "gmane"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:88 #: ddportfolioservice/controllers/ddportfolio.py:87
msgid "Files" msgid "Files"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:89 #: ddportfolioservice/controllers/ddportfolio.py:88
msgid "people.d.o" msgid "people.d.o"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:90 #: ddportfolioservice/controllers/ddportfolio.py:89
msgid "oldpeople" msgid "oldpeople"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:91 #: ddportfolioservice/controllers/ddportfolio.py:90
#: ddportfolioservice/controllers/ddportfolio.py:98 #: ddportfolioservice/controllers/ddportfolio.py:97
msgid "Alioth" msgid "Alioth"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:94 #: ddportfolioservice/controllers/ddportfolio.py:93
msgid "Membership" msgid "Membership"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:95 #: ddportfolioservice/controllers/ddportfolio.py:94
msgid "NM" msgid "NM"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:96 #: ddportfolioservice/controllers/ddportfolio.py:95
msgid "DB information via finger" msgid "DB information via finger"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:97 #: ddportfolioservice/controllers/ddportfolio.py:96
msgid "DB information via HTTP" msgid "DB information via HTTP"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:99 #: ddportfolioservice/controllers/ddportfolio.py:98
msgid "Wiki" msgid "Wiki"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:100 #: ddportfolioservice/controllers/ddportfolio.py:99
msgid "Forum" msgid "Forum"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:103 #: ddportfolioservice/controllers/ddportfolio.py:102
msgid "Miscellaneous" msgid "Miscellaneous"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:104 #: ddportfolioservice/controllers/ddportfolio.py:103
msgid "debtags" msgid "debtags"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:105 #: ddportfolioservice/controllers/ddportfolio.py:104
msgid "links" msgid "links"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:106 #: ddportfolioservice/controllers/ddportfolio.py:105
msgid "Debian website" msgid "Debian website"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:107 #: ddportfolioservice/controllers/ddportfolio.py:106
msgid "Debian search" msgid "Debian search"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:108 #: ddportfolioservice/controllers/ddportfolio.py:107
msgid "GPG public key via finger" msgid "GPG public key via finger"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:109 #: ddportfolioservice/controllers/ddportfolio.py:108
msgid "GPG public key via HTTP" msgid "GPG public key via HTTP"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:112 #: ddportfolioservice/controllers/ddportfolio.py:111
msgid "Information reachable via ssh (for DDs)" msgid "Information reachable via ssh (for Debian Members)"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:113 #: ddportfolioservice/controllers/ddportfolio.py:112
msgid "owned debian.net domains" msgid "owned debian.net domains"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:114 #: ddportfolioservice/controllers/ddportfolio.py:113
msgid "" msgid ""
"<a href=\"http://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> database " "<a href=\"http://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> database "
"information" "information"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:115 #: ddportfolioservice/controllers/ddportfolio.py:114
msgid "Group membership information" msgid "Group membership information"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:118 #: ddportfolioservice/controllers/ddportfolio.py:117
msgid "Ubuntu" msgid "Ubuntu"
msgstr "" msgstr ""
#: ddportfolioservice/controllers/ddportfolio.py:119 #: ddportfolioservice/controllers/ddportfolio.py:118
msgid "Available patches from Ubuntu" msgid "Available patches from Ubuntu"
msgstr "" msgstr ""
@ -245,7 +245,7 @@ msgid "Debian user name"
msgstr "" msgstr ""
#: ddportfolioservice/model/urlbuilder.py:44 #: ddportfolioservice/model/urlbuilder.py:44
msgid "Non DD email address" msgid "Non Debian email address"
msgstr "" msgstr ""
#: ddportfolioservice/model/urlbuilder.py:45 #: ddportfolioservice/model/urlbuilder.py:45
@ -260,7 +260,7 @@ msgstr ""
#: ddportfolioservice/templates/base.mako:26 #: ddportfolioservice/templates/base.mako:26
#: ddportfolioservice/templates/base.mako:34 #: ddportfolioservice/templates/base.mako:34
msgid "Debian Developer Portfolio Service" msgid "Debian Member Portfolio Service"
msgstr "" msgstr ""
#: ddportfolioservice/templates/base.mako:32 #: ddportfolioservice/templates/base.mako:32
@ -272,7 +272,7 @@ msgid ""
"This service has been inspired by Stefano Zacchiroli's <a " "This service has been inspired by Stefano Zacchiroli's <a "
"href=\"http://wiki.debian.org/DDPortfolio\">DDPortfolio page in the Debian " "href=\"http://wiki.debian.org/DDPortfolio\">DDPortfolio page in the Debian "
"Wiki</a>. You can create a set of customized links leading to a Debian " "Wiki</a>. You can create a set of customized links leading to a Debian "
"Developer's or package maintainer's information regarding Debian." "Member's or package maintainer's information regarding Debian."
msgstr "" msgstr ""
#: ddportfolioservice/templates/base.mako:46 #: ddportfolioservice/templates/base.mako:46
@ -292,7 +292,7 @@ msgid ""
msgstr "" msgstr ""
#: ddportfolioservice/templates/base.mako:49 #: ddportfolioservice/templates/base.mako:49
msgid "Copyright © 2009, 2010, 2011 Jan Dittberner" msgid "Copyright © 2009, 2010, 2011, 2012 Jan Dittberner"
msgstr "" msgstr ""
#: ddportfolioservice/templates/showform.mako:24 #: ddportfolioservice/templates/showform.mako:24
@ -301,7 +301,7 @@ msgstr ""
#: ddportfolioservice/templates/showform.mako:30 #: ddportfolioservice/templates/showform.mako:30
#: ddportfolioservice/templates/showurls.mako:28 #: ddportfolioservice/templates/showurls.mako:28
msgid "Debian Developer Portfolio" msgid "Debian Member Portfolio"
msgstr "" msgstr ""
#: ddportfolioservice/templates/showform.mako:36 #: ddportfolioservice/templates/showform.mako:36
@ -325,7 +325,7 @@ msgid "Debian user name:"
msgstr "" msgstr ""
#: ddportfolioservice/templates/showform.mako:94 #: ddportfolioservice/templates/showform.mako:94
msgid "Non DD email address:" msgid "Non Debian email address:"
msgstr "" msgstr ""
#: ddportfolioservice/templates/showform.mako:109 #: ddportfolioservice/templates/showform.mako:109

View file

@ -9,29 +9,30 @@ msgstr ""
"Project-Id-Version: ddportfolioservice 0.2.1\n" "Project-Id-Version: ddportfolioservice 0.2.1\n"
"Report-Msgid-Bugs-To: jan@dittberner.info\n" "Report-Msgid-Bugs-To: jan@dittberner.info\n"
"POT-Creation-Date: 2009-01-20 23:13+0100\n" "POT-Creation-Date: 2009-01-20 23:13+0100\n"
"PO-Revision-Date: 2011-03-06 17:31+0100\n" "PO-Revision-Date: 2012-01-07 01:16+0100\n"
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n" "Last-Translator: Jan Dittberner <jan@dittberner.info>\n"
"Language-Team: de <de@li.org>\n" "Language-Team: de <de@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 0.9.4\n" "Generated-By: Babel 0.9.5\n"
#: ddportfolioservice/controllers/ddportfolio.py:41 #: ddportfolioservice/controllers/ddportfolio.py:41
msgid "Overview" msgid "Overview"
msgstr "Überblick" msgstr "Überblick"
#: ddportfolioservice/controllers/ddportfolio.py:42 #: ddportfolioservice/controllers/ddportfolio.py:42
msgid "Debian Developer's Package Overview" msgid "Debian Member's Package Overview"
msgstr "Paketübersicht des Debian-Entwicklers" msgstr "Paketübersicht des Debian-Mitglieds"
#: ddportfolioservice/controllers/ddportfolio.py:43 #: ddportfolioservice/controllers/ddportfolio.py:43
#| addresses"
msgid "" msgid ""
"Debian Developer's Package Overview\n" "Debian Member's Package Overview\n"
"... showing all email addresses" "... showing all email addresses"
msgstr "" msgstr ""
"Paketübersicht des Debian-Entwicklers\n" "Paketübersicht des Debian-Mitglieds\n"
"... mit allen E-Mailadressen" "... mit allen E-Mailadressen"
#: ddportfolioservice/controllers/ddportfolio.py:47 #: ddportfolioservice/controllers/ddportfolio.py:47
@ -83,45 +84,45 @@ msgstr "Graph der Entwicklung offener Fehlerberichte über ein Jahr"
msgid "Build" msgid "Build"
msgstr "Build" msgstr "Build"
#: ddportfolioservice/controllers/ddportfolio.py:62 #: ddportfolioservice/controllers/ddportfolio.py:63
msgid "buildd.d.o" msgid "buildd.d.o"
msgstr "buildd.d.o" msgstr "buildd.d.o"
#: ddportfolioservice/controllers/ddportfolio.py:65 #: ddportfolioservice/controllers/ddportfolio.py:64
msgid "igloo" msgid "igloo"
msgstr "Igloo" msgstr "Igloo"
#: ddportfolioservice/controllers/ddportfolio.py:68 #: ddportfolioservice/controllers/ddportfolio.py:67
msgid "Quality Assurance" msgid "Quality Assurance"
msgstr "Qualitätssicherung" msgstr "Qualitätssicherung"
#: ddportfolioservice/controllers/ddportfolio.py:69 #: ddportfolioservice/controllers/ddportfolio.py:68
msgid "lintian reports" msgid "lintian reports"
msgstr "Lintian-Berichte" msgstr "Lintian-Berichte"
#: ddportfolioservice/controllers/ddportfolio.py:70 #: ddportfolioservice/controllers/ddportfolio.py:69
msgid "full lintian reports (i.e. including \"info\"-level messages)" msgid "full lintian reports (i.e. including \"info\"-level messages)"
msgstr "" msgstr ""
"vollständige Lintian-Berichte (d.h. inklusive Meldungen der Stufe " "vollständige Lintian-Berichte (d.h. inklusive Meldungen der Stufe "
"\"info\")" "\"info\")"
#: ddportfolioservice/controllers/ddportfolio.py:72 #: ddportfolioservice/controllers/ddportfolio.py:71
msgid "DEHS (Debian External Health Status)" msgid "DEHS (Debian External Health Status)"
msgstr "DEHS (Debian External Health Status)" msgstr "DEHS (Debian External Health Status)"
#: ddportfolioservice/controllers/ddportfolio.py:73 #: ddportfolioservice/controllers/ddportfolio.py:72
msgid "piuparts" msgid "piuparts"
msgstr "piuparts" msgstr "piuparts"
#: ddportfolioservice/controllers/ddportfolio.py:74 #: ddportfolioservice/controllers/ddportfolio.py:73
msgid "Debian patch tracking system" msgid "Debian patch tracking system"
msgstr "Debian Nachverfolgungssystem für Patches" msgstr "Debian Nachverfolgungssystem für Patches"
#: ddportfolioservice/controllers/ddportfolio.py:77 #: ddportfolioservice/controllers/ddportfolio.py:76
msgid "Upload" msgid "Upload"
msgstr "Upload" msgstr "Upload"
#: ddportfolioservice/controllers/ddportfolio.py:78 #: ddportfolioservice/controllers/ddportfolio.py:77
msgid "" msgid ""
"keylog (per-key upload list)\n" "keylog (per-key upload list)\n"
"(note: uses key fingerprint)" "(note: uses key fingerprint)"
@ -129,100 +130,100 @@ msgstr ""
"Keylog\n" "Keylog\n"
"(Anmerkung: verwendet den Fingerabdruck des Schlüssels)" "(Anmerkung: verwendet den Fingerabdruck des Schlüssels)"
#: ddportfolioservice/controllers/ddportfolio.py:82 #: ddportfolioservice/controllers/ddportfolio.py:81
msgid "Mailing Lists" msgid "Mailing Lists"
msgstr "Mailinglisten" msgstr "Mailinglisten"
#: ddportfolioservice/controllers/ddportfolio.py:83 #: ddportfolioservice/controllers/ddportfolio.py:82
msgid "lists.d.o" msgid "lists.d.o"
msgstr "lists.d.o" msgstr "lists.d.o"
#: ddportfolioservice/controllers/ddportfolio.py:84 #: ddportfolioservice/controllers/ddportfolio.py:83
msgid "lists.a.d.o" msgid "lists.a.d.o"
msgstr "lists.a.d.o" msgstr "lists.a.d.o"
#: ddportfolioservice/controllers/ddportfolio.py:85 #: ddportfolioservice/controllers/ddportfolio.py:84
msgid "gmane" msgid "gmane"
msgstr "Gmane" msgstr "Gmane"
#: ddportfolioservice/controllers/ddportfolio.py:88 #: ddportfolioservice/controllers/ddportfolio.py:87
msgid "Files" msgid "Files"
msgstr "Dateien" msgstr "Dateien"
#: ddportfolioservice/controllers/ddportfolio.py:89 #: ddportfolioservice/controllers/ddportfolio.py:88
msgid "people.d.o" msgid "people.d.o"
msgstr "people.d.o" msgstr "people.d.o"
#: ddportfolioservice/controllers/ddportfolio.py:90 #: ddportfolioservice/controllers/ddportfolio.py:89
msgid "oldpeople" msgid "oldpeople"
msgstr "oldpeople" msgstr "oldpeople"
#: ddportfolioservice/controllers/ddportfolio.py:91 #: ddportfolioservice/controllers/ddportfolio.py:90
#: ddportfolioservice/controllers/ddportfolio.py:98 #: ddportfolioservice/controllers/ddportfolio.py:97
msgid "Alioth" msgid "Alioth"
msgstr "Alioth" msgstr "Alioth"
#: ddportfolioservice/controllers/ddportfolio.py:94 #: ddportfolioservice/controllers/ddportfolio.py:93
msgid "Membership" msgid "Membership"
msgstr "Mitgliedschaft" msgstr "Mitgliedschaft"
#: ddportfolioservice/controllers/ddportfolio.py:95 #: ddportfolioservice/controllers/ddportfolio.py:94
msgid "NM" msgid "NM"
msgstr "NM" msgstr "NM"
#: ddportfolioservice/controllers/ddportfolio.py:96 #: ddportfolioservice/controllers/ddportfolio.py:95
msgid "DB information via finger" msgid "DB information via finger"
msgstr "DB-Informationen per finger" msgstr "DB-Informationen per finger"
#: ddportfolioservice/controllers/ddportfolio.py:97 #: ddportfolioservice/controllers/ddportfolio.py:96
msgid "DB information via HTTP" msgid "DB information via HTTP"
msgstr "DB-Informationen per HTTP" msgstr "DB-Informationen per HTTP"
#: ddportfolioservice/controllers/ddportfolio.py:99 #: ddportfolioservice/controllers/ddportfolio.py:98
msgid "Wiki" msgid "Wiki"
msgstr "Wiki" msgstr "Wiki"
#: ddportfolioservice/controllers/ddportfolio.py:100 #: ddportfolioservice/controllers/ddportfolio.py:99
msgid "Forum" msgid "Forum"
msgstr "Forum" msgstr "Forum"
#: ddportfolioservice/controllers/ddportfolio.py:103 #: ddportfolioservice/controllers/ddportfolio.py:102
msgid "Miscellaneous" msgid "Miscellaneous"
msgstr "Sonstiges" msgstr "Sonstiges"
#: ddportfolioservice/controllers/ddportfolio.py:104 #: ddportfolioservice/controllers/ddportfolio.py:103
msgid "debtags" msgid "debtags"
msgstr "debtags" msgstr "debtags"
#: ddportfolioservice/controllers/ddportfolio.py:105 #: ddportfolioservice/controllers/ddportfolio.py:104
msgid "links" msgid "links"
msgstr "Links" msgstr "Links"
#: ddportfolioservice/controllers/ddportfolio.py:106 #: ddportfolioservice/controllers/ddportfolio.py:105
msgid "Debian website" msgid "Debian website"
msgstr "Debian Webseite" msgstr "Debian Webseite"
#: ddportfolioservice/controllers/ddportfolio.py:107 #: ddportfolioservice/controllers/ddportfolio.py:106
msgid "Debian search" msgid "Debian search"
msgstr "Debian-Suche" msgstr "Debian-Suche"
#: ddportfolioservice/controllers/ddportfolio.py:108 #: ddportfolioservice/controllers/ddportfolio.py:107
msgid "GPG public key via finger" msgid "GPG public key via finger"
msgstr "öffentlicher GPG-Schlüssel per finger" msgstr "öffentlicher GPG-Schlüssel per finger"
#: ddportfolioservice/controllers/ddportfolio.py:109 #: ddportfolioservice/controllers/ddportfolio.py:108
msgid "GPG public key via HTTP" msgid "GPG public key via HTTP"
msgstr "öffentlicher GPG-Schlüssel per HTTP" msgstr "öffentlicher GPG-Schlüssel per HTTP"
#: ddportfolioservice/controllers/ddportfolio.py:112 #: ddportfolioservice/controllers/ddportfolio.py:111
msgid "Information reachable via ssh (for DDs)" msgid "Information reachable via ssh (for Debian Members)"
msgstr "Per ssh erreichbare Informationen (für DDs)" msgstr "Per ssh erreichbare Informationen (für Debian Mitglieder)"
#: ddportfolioservice/controllers/ddportfolio.py:113 #: ddportfolioservice/controllers/ddportfolio.py:112
msgid "owned debian.net domains" msgid "owned debian.net domains"
msgstr "Besitz von debian.net-Domains" msgstr "Besitz von debian.net-Domains"
#: ddportfolioservice/controllers/ddportfolio.py:114 #: ddportfolioservice/controllers/ddportfolio.py:113
msgid "" msgid ""
"<a href=\"http://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> database" "<a href=\"http://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a> database"
" information" " information"
@ -230,15 +231,15 @@ msgstr ""
"Informationen in der <a " "Informationen in der <a "
"href=\"http://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a>-Datenbank" "href=\"http://wiki.debian.org/qa.debian.org/MIATeam\">MIA</a>-Datenbank"
#: ddportfolioservice/controllers/ddportfolio.py:115 #: ddportfolioservice/controllers/ddportfolio.py:114
msgid "Group membership information" msgid "Group membership information"
msgstr "Information über Gruppenmitgliedschaften" msgstr "Information über Gruppenmitgliedschaften"
#: ddportfolioservice/controllers/ddportfolio.py:118 #: ddportfolioservice/controllers/ddportfolio.py:117
msgid "Ubuntu" msgid "Ubuntu"
msgstr "Ubuntu" msgstr "Ubuntu"
#: ddportfolioservice/controllers/ddportfolio.py:119 #: ddportfolioservice/controllers/ddportfolio.py:118
msgid "Available patches from Ubuntu" msgid "Available patches from Ubuntu"
msgstr "Verfügbare Patches aus Ubuntu" msgstr "Verfügbare Patches aus Ubuntu"
@ -259,8 +260,8 @@ msgid "Debian user name"
msgstr "Debian-Benutzername" msgstr "Debian-Benutzername"
#: ddportfolioservice/model/urlbuilder.py:44 #: ddportfolioservice/model/urlbuilder.py:44
msgid "Non DD email address" msgid "Non Debian email address"
msgstr "Nicht-DD E-Mailadresse:" msgstr "Nicht-Debian-E-Mailadresse"
#: ddportfolioservice/model/urlbuilder.py:45 #: ddportfolioservice/model/urlbuilder.py:45
msgid "Alioth user name" msgid "Alioth user name"
@ -274,8 +275,8 @@ msgstr "Fehlende Eingabe: %s"
#: ddportfolioservice/templates/base.mako:26 #: ddportfolioservice/templates/base.mako:26
#: ddportfolioservice/templates/base.mako:34 #: ddportfolioservice/templates/base.mako:34
msgid "Debian Developer Portfolio Service" msgid "Debian Member Portfolio Service"
msgstr "Debian-Entwicklerportfolioservice" msgstr "Debian-Mitglieder-Portfolioservice"
#: ddportfolioservice/templates/base.mako:32 #: ddportfolioservice/templates/base.mako:32
msgid "Debian Logo" msgid "Debian Logo"
@ -286,12 +287,12 @@ msgid ""
"This service has been inspired by Stefano Zacchiroli's <a " "This service has been inspired by Stefano Zacchiroli's <a "
"href=\"http://wiki.debian.org/DDPortfolio\">DDPortfolio page in the " "href=\"http://wiki.debian.org/DDPortfolio\">DDPortfolio page in the "
"Debian Wiki</a>. You can create a set of customized links leading to a " "Debian Wiki</a>. You can create a set of customized links leading to a "
"Debian Developer's or package maintainer's information regarding Debian." "Debian Member's or package maintainer's information regarding Debian."
msgstr "" msgstr ""
"Dieser Dienst wurde durch Stefano Zacchirolis <a " "Dieser Dienst wurde durch Stefano Zacchirolis <a "
"href=\"http://wiki.debian.org/DDPortfolio\">DDPortfolio-Seite im Debian " "href=\"http://wiki.debian.org/DDPortfolio\">DDPortfolio-Seite im Debian "
"Wiki</a> inspiriert. Mit dem Dienst können personalisierte Links zu " "Wiki</a> inspiriert. Mit dem Dienst können personalisierte Links zu "
"Informationen im Bezug auf Debian für Debian-Entwickler und Paketbetreuer" "Informationen im Bezug auf Debian für Debian-Mitglieder und Paketbetreuer"
" erzeugt werden." " erzeugt werden."
#: ddportfolioservice/templates/base.mako:46 #: ddportfolioservice/templates/base.mako:46
@ -321,8 +322,8 @@ msgstr ""
"klonen." "klonen."
#: ddportfolioservice/templates/base.mako:49 #: ddportfolioservice/templates/base.mako:49
msgid "Copyright © 2009, 2010, 2011 Jan Dittberner" msgid "Copyright © 2009, 2010, 2011, 2012 Jan Dittberner"
msgstr "Copyright © 2009, 2010, 2011 Jan Dittberner" msgstr "Copyright © 2009, 2010, 2011, 2012 Jan Dittberner"
#: ddportfolioservice/templates/showform.mako:24 #: ddportfolioservice/templates/showform.mako:24
msgid "Enter your personal information" msgid "Enter your personal information"
@ -330,8 +331,8 @@ msgstr "Eingabe der persönlichen Informationen"
#: ddportfolioservice/templates/showform.mako:30 #: ddportfolioservice/templates/showform.mako:30
#: ddportfolioservice/templates/showurls.mako:28 #: ddportfolioservice/templates/showurls.mako:28
msgid "Debian Developer Portfolio" msgid "Debian Member Portfolio"
msgstr "Debian-Entwicklerportfolio" msgstr "Debian-Mitgliedererportfolio"
#: ddportfolioservice/templates/showform.mako:36 #: ddportfolioservice/templates/showform.mako:36
msgid "Email address:" msgid "Email address:"
@ -354,8 +355,8 @@ msgid "Debian user name:"
msgstr "Debian-Benutzername:" msgstr "Debian-Benutzername:"
#: ddportfolioservice/templates/showform.mako:94 #: ddportfolioservice/templates/showform.mako:94
msgid "Non DD email address:" msgid "Non Debian email address:"
msgstr "Nicht-DD-E-Mailadresse" msgstr "Nicht-Debian-E-Mailadresse"
#: ddportfolioservice/templates/showform.mako:109 #: ddportfolioservice/templates/showform.mako:109
msgid "Alioth user name:" msgid "Alioth user name:"

View file

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# DDPortfolio service application Globals # DDPortfolio service application Globals
# Copyright © 2009, 2010 Jan Dittberner <jan@dittberner.info> # Copyright © 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of DDPortfolio service. # This file is part of DDPortfolio service.
# #
@ -25,17 +25,17 @@
from beaker.cache import CacheManager from beaker.cache import CacheManager
from beaker.util import parse_cache_config_options from beaker.util import parse_cache_config_options
class Globals(object): class Globals(object):
"""
"""Globals acts as a container for objects available throughout the Globals acts as a container for objects available throughout the
life of the application life of the application
""" """
def __init__(self, config): def __init__(self, config):
"""One instance of Globals is created during application """
One instance of Globals is created during application
initialization and is available during requests via the initialization and is available during requests via the
'app_globals' variable 'app_globals' variable
""" """
self.cache = CacheManager(**parse_cache_config_options(config)) self.cache = CacheManager(**parse_cache_config_options(config))

View file

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# DDPortfolio service base controller # DDPortfolio service base controller
# Copyright © 2009, 2010 Jan Dittberner <jan@dittberner.info> # Copyright © 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of DDPortfolio service. # This file is part of DDPortfolio service.
# #
@ -29,6 +29,7 @@ from pylons.controllers import WSGIController
from pylons.i18n import add_fallback from pylons.i18n import add_fallback
from pylons.templating import render_mako as render from pylons.templating import render_mako as render
class BaseController(WSGIController): class BaseController(WSGIController):
def __call__(self, environ, start_response): def __call__(self, environ, start_response):
@ -42,5 +43,5 @@ class BaseController(WSGIController):
add_fallback(lang) add_fallback(lang)
except: except:
pass pass
c.messages = { 'errors': [], 'messages': [] } c.messages = {'errors': [], 'messages': []}
return WSGIController.__call__(self, environ, start_response) return WSGIController.__call__(self, environ, start_response)

View file

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# DDPortfolio service form handling model # DDPortfolio service form handling model
# Copyright © 2009, 2010 Jan Dittberner <jan@dittberner.info> # Copyright © 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of DDPortfolio service. # This file is part of DDPortfolio service.
# #
@ -22,6 +22,7 @@
# #
import formencode import formencode
class DeveloperData(formencode.Schema): class DeveloperData(formencode.Schema):
"""Validation schema for DeveloperData.""" """Validation schema for DeveloperData."""
allow_extra_fields = True allow_extra_fields = True

View file

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# DDPortfolio service key finder module # DDPortfolio service key finder module
# Copyright (c) 2009 Jan Dittberner <jan@dittberner.info> # Copyright (c) 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of DDPortfolio service. # This file is part of DDPortfolio service.
# #
@ -30,6 +30,7 @@ import time
db = None db = None
cachetimestamp = 0 cachetimestamp = 0
def _get_keyring_cache(): def _get_keyring_cache():
global db, cachetimestamp global db, cachetimestamp
if db is None or (time.time() - cachetimestamp) > 86300: if db is None or (time.time() - cachetimestamp) > 86300:
@ -44,6 +45,7 @@ def _get_keyring_cache():
cachetimestamp = time.time() cachetimestamp = time.time()
return db return db
def _get_cached(cachekey): def _get_cached(cachekey):
cache = _get_keyring_cache() cache = _get_keyring_cache()
logging.debug('cache lookup for %s', cachekey) logging.debug('cache lookup for %s', cachekey)
@ -52,25 +54,33 @@ def _get_cached(cachekey):
return cache[cachekey] return cache[cachekey]
return None return None
def getFingerprintByEmail(email): def getFingerprintByEmail(email):
"""Gets the fingerprints associated with the given email address """
if available.""" Gets the fingerprints associated with the given email address if
available.
"""
return _get_cached('fpr:email:%s' % email) return _get_cached('fpr:email:%s' % email)
def getRealnameByEmail(email): def getRealnameByEmail(email):
"""Gets the real names associated with the given email address if """
available.""" Gets the real names associated with the given email address if
available.
"""
return _get_cached('name:email:%s' % email) return _get_cached('name:email:%s' % email)
def getLoginByEmail(email): def getLoginByEmail(email):
"""Gets the logins associated with the given email address if """
available.""" Gets the logins associated with the given email address if
available.
"""
return _get_cached('login:email:%s' % email) return _get_cached('login:email:%s' % email)
def getLoginByFingerprint(fpr): def getLoginByFingerprint(fpr):
"""Gets the login associated with the given fingerprint if """
available.""" Gets the login associated with the given fingerprint if available.
"""
return _get_cached('login:fpr:%s' % fpr) return _get_cached('login:fpr:%s' % fpr)

View file

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# DDPortfolio service application key ring analyzer tool # DDPortfolio service application key ring analyzer tool
# Copyright © 2009, 2010 Jan Dittberner <jan@dittberner.info> # Copyright © 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of DDPortfolio service. # This file is part of DDPortfolio service.
# #
@ -38,10 +38,13 @@ import sys
def _get_keyrings(): def _get_keyrings():
"""Gets the available keyring files from the keyring directory """
configured in ddportfolio.ini.""" Gets the available keyring files from the keyring directory
configured in ddportfolio.ini.
"""
my_config = ConfigParser.ConfigParser() my_config = ConfigParser.ConfigParser()
my_config.readfp(pkg_resources.resource_stream(__name__, 'ddportfolio.ini')) my_config.readfp(pkg_resources.resource_stream(
__name__, 'ddportfolio.ini'))
keyringdir = os.path.expanduser(my_config.get('DEFAULT', 'keyring.dir')) keyringdir = os.path.expanduser(my_config.get('DEFAULT', 'keyring.dir'))
logging.debug("keyring dir is %s", keyringdir) logging.debug("keyring dir is %s", keyringdir)
keyrings = glob.glob(os.path.join(keyringdir, '*.gpg')) keyrings = glob.glob(os.path.join(keyringdir, '*.gpg'))
@ -51,20 +54,22 @@ def _get_keyrings():
def _parse_uid(uid): def _parse_uid(uid):
"""Parse a uid of the form 'Real Name <email@example.com>' into """
email and realname parts.""" Parse a uid of the form 'Real Name <email@example.com>' into email
and realname parts.
"""
uid = uid.strip() uid = uid.strip()
# First, strip comment # First, strip comment
s = uid.find('(') s = uid.find('(')
e = uid.find(')') e = uid.find(')')
if s >= 0 and e >= 0: if s >= 0 and e >= 0:
uid = uid[:s] + uid[e+1:] uid = uid[:s] + uid[e + 1:]
s = uid.find('<') s = uid.find('<')
e = uid.find('>') e = uid.find('>')
email = None email = None
if s >= 0 and e >= 0: if s >= 0 and e >= 0:
email = uid[s+1:e] email = uid[s + 1:e]
uid = uid[:s] + uid[e+1:] uid = uid[:s] + uid[e + 1:]
uid = uid.strip() uid = uid.strip()
if not email and uid.find('@') >= 0: if not email and uid.find('@') >= 0:
email, uid = uid, email email, uid = uid, email
@ -72,6 +77,7 @@ def _parse_uid(uid):
resultdict = {} resultdict = {}
def _get_canonical(key): def _get_canonical(key):
if not key in resultdict: if not key in resultdict:
resultdict[key] = [] resultdict[key] = []
@ -96,7 +102,7 @@ def process_keyrings():
stdout=subprocess.PIPE) stdout=subprocess.PIPE)
fpr = None fpr = None
entry = None entry = None
lastpub = None lastpub = None
for line in proc.stdout.readlines(): for line in proc.stdout.readlines():
items = line.split(':') items = line.split(':')
uid = None uid = None

View file

@ -2,7 +2,7 @@
# -*- coding: utf8 -*- # -*- coding: utf8 -*-
# #
# DDPortfolio service url builder # DDPortfolio service url builder
# Copyright © 2009, 2010 Jan Dittberner <jan@dittberner.info> # Copyright © 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of DDPortfolio service. # This file is part of DDPortfolio service.
# #
@ -37,12 +37,12 @@ my_config = ConfigParser()
my_config.readfp(pkg_resources.resource_stream(__name__, 'ddportfolio.ini')) my_config.readfp(pkg_resources.resource_stream(__name__, 'ddportfolio.ini'))
_FIELDNAMES_MAP = { _FIELDNAMES_MAP = {
'email' : N_('Email address'), 'email': N_('Email address'),
'name' : N_('Name'), 'name': N_('Name'),
'gpgfp' : N_('GPG fingerprint'), 'gpgfp': N_('GPG fingerprint'),
'username' : N_('Debian user name'), 'username': N_('Debian user name'),
'nonddemail' : N_('Non DD email address'), 'nonddemail': N_('Non Debian email address'),
'aliothusername' : N_('Alioth user name'), 'aliothusername': N_('Alioth user name'),
} }
@ -82,8 +82,9 @@ def build_urls(fields):
'urlbuilder.sections').split(',')]: 'urlbuilder.sections').split(',')]:
data.append(['section', section]) data.append(['section', section])
if my_config.has_option(section, 'urls'): if my_config.has_option(section, 'urls'):
for entry in ([DDPortfolioEntry(my_config, section, url) for url in \ for entry in ([
my_config.get(section, 'urls').split(',')]): DDPortfolioEntry(my_config, section, url) for url in \
my_config.get(section, 'urls').split(',')]):
try: try:
data.append( data.append(
['url', section, entry, ['url', section, entry,

View file

@ -23,7 +23,7 @@ License along with this program. If not, see
</%doc> </%doc>
<html> <html>
<head> <head>
<title>${_('Debian Developer Portfolio Service')}${self.titleaddon()}</title> <title>${_('Debian Member Portfolio Service')}${self.titleaddon()}</title>
${h.stylesheet_link(h.url('/stylesheets/style.css'))} ${h.stylesheet_link(h.url('/stylesheets/style.css'))}
${self.extrahead()} ${self.extrahead()}
</head> </head>
@ -31,10 +31,10 @@ License along with this program. If not, see
<div id="header"> <div id="header">
${h.image(h.url('/images/openlogo-100.jpg'), _('Debian Logo'), 100, 100, ${h.image(h.url('/images/openlogo-100.jpg'), _('Debian Logo'), 100, 100,
id='debianlogo')} id='debianlogo')}
<h1>${_('Debian Developer Portfolio Service')}</h1> <h1>${_('Debian Member Portfolio Service')}</h1>
<p>${h.literal(_('''This service has been inspired by Stefano Zacchiroli's <a href="http://wiki.debian.org/DDPortfolio">DDPortfolio page in the Debian Wiki</a>. You can create a set of customized links leading to a Debian Developer's or package maintainer's information regarding Debian.'''))}</p> <p>${h.literal(_('''This service has been inspired by Stefano Zacchiroli's <a href="http://wiki.debian.org/DDPortfolio">DDPortfolio page in the Debian Wiki</a>. You can create a set of customized links leading to a Debian Member's or package maintainer's information regarding Debian.'''))}</p>
<p><script type="text/javascript"> <p><script type="text/javascript">
var flattr_url = 'http://ddportfolio.debian.net/'; var flattr_url = 'http://portfolio.debian.net/';
var flattr_btn='compact'; var flattr_btn='compact';
</script> </script>
<script src="http://api.flattr.com/button/load.js" type="text/javascript"></script></p> <script src="http://api.flattr.com/button/load.js" type="text/javascript"></script></p>
@ -46,7 +46,7 @@ License along with this program. If not, see
${h.image(h.url('/images/agplv3-88x31.png'), _('AGPL - Free Software'), 88, 31, ${h.image(h.url('/images/agplv3-88x31.png'), _('AGPL - Free Software'), 88, 31,
id='agpllogo')} id='agpllogo')}
<p>${h.literal(_('''The service is available under the terms of the <a href="http://www.gnu.org/licenses/agpl.html">GNU Affero General Public License</a> as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. You can <a href="%(browseurl)s" title="Gitweb repository browser URL">browse the source code</a> or clone it from <a href="%(cloneurl)s" title="git clone URL">%(cloneurl)s</a> using <a href="http://git-scm.com/">git</a>.''') % dict((('browseurl', 'http://debianstuff.dittberner.info/gitweb.cgi?p=ddportfolioservice.git;a=summary'), ('cloneurl', 'http://debianstuff.dittberner.info/git/ddportfolioservice.git'))))}</p> <p>${h.literal(_('''The service is available under the terms of the <a href="http://www.gnu.org/licenses/agpl.html">GNU Affero General Public License</a> as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. You can <a href="%(browseurl)s" title="Gitweb repository browser URL">browse the source code</a> or clone it from <a href="%(cloneurl)s" title="git clone URL">%(cloneurl)s</a> using <a href="http://git-scm.com/">git</a>.''') % dict((('browseurl', 'http://debianstuff.dittberner.info/gitweb.cgi?p=ddportfolioservice.git;a=summary'), ('cloneurl', 'http://debianstuff.dittberner.info/git/ddportfolioservice.git'))))}</p>
<p>${_(u'''Copyright © 2009, 2010, 2011 Jan Dittberner''')}</p> <p>${_(u'''Copyright © 2009, 2010, 2011, 2012 Jan Dittberner''')}</p>
</div> </div>
</body> </body>
</html> </html>

View file

@ -27,7 +27,7 @@ License along with this program. If not, see
h.url(controller='showformscripts', action='index'))}</%def> h.url(controller='showformscripts', action='index'))}</%def>
${h.form(h.url(action='urllist', controller='ddportfolio'), method='get')} ${h.form(h.url(action='urllist', controller='ddportfolio'), method='get')}
<fieldset id="ddportfolio"> <fieldset id="ddportfolio">
<legend>${_('Debian Developer Portfolio')}</legend> <legend>${_('Debian Member Portfolio')}</legend>
<div id="emailfield" \ <div id="emailfield" \
% if 'email' in c.messages['errors']: % if 'email' in c.messages['errors']:
class="witherrors" \ class="witherrors" \
@ -91,7 +91,7 @@ ${h.form(h.url(action='urllist', controller='ddportfolio'), method='get')}
class="witherrors" \ class="witherrors" \
% endif % endif
> >
<label for="nonddemail">${_('Non DD email address:') | h} <label for="nonddemail">${_('Non Debian email address:') | h}
% if 'nonddemail' in c.messages['errors']: % if 'nonddemail' in c.messages['errors']:
<br /> <br />
<span class="errormsg">${c.messages['errors']['nonddemail'] | h}</span> <span class="errormsg">${c.messages['errors']['nonddemail'] | h}</span>

View file

@ -25,7 +25,7 @@ License along with this program. If not, see
</%def> </%def>
% if c.urldata: % if c.urldata:
<fieldset id="ddportfolio"> <fieldset id="ddportfolio">
<legend>${_('Debian Developer Portfolio')}</legend> <legend>${_('Debian Member Portfolio')}</legend>
<table id="urltable"> <table id="urltable">
<thead> <thead>
<tr><th>${_('Usage')}</th><th>${_('URL')}</th></tr> <tr><th>${_('Usage')}</th><th>${_('URL')}</th></tr>

View file

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# DDPortfolio service tests package # DDPortfolio service tests package
# Copyright © 2009, 2010 Jan Dittberner <jan@dittberner.info> # Copyright © 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of DDPortfolio service. # This file is part of DDPortfolio service.
# #
@ -49,6 +49,7 @@ SetupCommand('setup-app').run([pylons.test.pylonsapp.config['__file__']])
environ = {} environ = {}
class TestController(TestCase): class TestController(TestCase):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):

View file

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# DDPortfolio service DdportfolioController test # DDPortfolio service DdportfolioController test
# Copyright © 2009, 2010 Jan Dittberner <jan@dittberner.info> # Copyright © 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of DDPortfolio service. # This file is part of DDPortfolio service.
# #
@ -22,8 +22,10 @@
# #
from ddportfolioservice.tests import TestController, url from ddportfolioservice.tests import TestController, url
class TestShowformscriptsController(TestController): class TestShowformscriptsController(TestController):
def test_index(self): def test_index(self):
response = self.app.get(url(controller='showformscripts', action='index')) response = self.app.get(
url(controller='showformscripts', action='index'))
# Test response... # Test response...

View file

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# DDPortfolio service websetup # DDPortfolio service websetup
# Copyright (c) 2009 Jan Dittberner <jan@dittberner.info> # Copyright (c) 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of DDPortfolio service. # This file is part of DDPortfolio service.
# #
@ -31,6 +31,7 @@ from ddportfolioservice.config.environment import load_environment
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
def setup_config(command, filename, section, vars): def setup_config(command, filename, section, vars):
"""Place any commands to setup ddportfolioservice here""" """Place any commands to setup ddportfolioservice here"""
conf = appconfig('config:' + filename) conf = appconfig('config:' + filename)

View file

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# DDPortfolio service setup # DDPortfolio service setup
# Copyright © 2009, 2010, 2011 Jan Dittberner <jan@dittberner.info> # Copyright © 2009, 2010, 2011, 2012 Jan Dittberner <jan@dittberner.info>
# #
# This file is part of DDPortfolio service. # This file is part of DDPortfolio service.
# #
@ -29,7 +29,7 @@ except ImportError:
setup( setup(
name='ddportfolioservice', name='ddportfolioservice',
version='0.2.1', version='0.2.2',
description='service to create DDPortfolio URLs', description='service to create DDPortfolio URLs',
long_description="""This is a service implementation that long_description="""This is a service implementation that
returns a set of personalized URLs as outlined in returns a set of personalized URLs as outlined in
@ -48,7 +48,7 @@ array of URLs.""",
author_email='jan@dittberner.info', author_email='jan@dittberner.info',
url='http://debian-stuff.dittberner.info/ddportfolioservice', url='http://debian-stuff.dittberner.info/ddportfolioservice',
license='AGPL-3.0+', license='AGPL-3.0+',
install_requires=["Pylons>=0.10rc1"], install_requires=["Pylons>=0.10rc1", 'babel>=0.9.4'],
packages=find_packages(exclude=['ez_setup']), packages=find_packages(exclude=['ez_setup']),
include_package_data=True, include_package_data=True,
test_suite='nose.collector', test_suite='nose.collector',