rename package directory
This commit is contained in:
parent
8299b9aca0
commit
dd64ba59b4
47 changed files with 0 additions and 0 deletions
22
debianmemberportfolio/controllers/__init__.py
Normal file
22
debianmemberportfolio/controllers/__init__.py
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
# -*- python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# DDPortfolio service controllers package
|
||||
# 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/>.
|
||||
#
|
||||
197
debianmemberportfolio/controllers/ddportfolio.py
Normal file
197
debianmemberportfolio/controllers/ddportfolio.py
Normal file
|
|
@ -0,0 +1,197 @@
|
|||
# -*- python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Debian Member Portfolio Service DdportfolioController
|
||||
# Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
|
||||
#
|
||||
# This file is part of Debian Member Portfolio Service.
|
||||
#
|
||||
# Debian Member Portfolio 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.
|
||||
#
|
||||
# Debian Member Portfolio 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, response, 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):
|
||||
"""
|
||||
Main controller for the Debian Member portfolio service.
|
||||
"""
|
||||
_LABELS = {
|
||||
'overview': {
|
||||
'label': N_('Overview'),
|
||||
'ddpo': N_("Debian Member's Package Overview"),
|
||||
'alladdresses': N_("""Debian Member'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'),
|
||||
'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'),
|
||||
'graph': N_('one year open bug history graph'),
|
||||
},
|
||||
'build': {
|
||||
'label': N_('Build'),
|
||||
'buildd': N_('buildd.d.o'),
|
||||
'igloo': N_('igloo'),
|
||||
},
|
||||
'qa': {
|
||||
'label': N_('Quality Assurance'),
|
||||
'dmd': N_('maintainer dashboard'),
|
||||
'lintian': N_('lintian reports'),
|
||||
'lintianfull': N_('full lintian reports (i.e. including \
|
||||
"info"-level messages)'),
|
||||
'piuparts': N_('piuparts'),
|
||||
'patchtracker': N_('Debian patch tracking system'),
|
||||
'duck': N_('Debian Url ChecKer'),
|
||||
},
|
||||
'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'),
|
||||
'dbfinger': N_('DB information via finger'),
|
||||
'db': N_('DB information via HTTP'),
|
||||
'webid': N_('FOAF profile'),
|
||||
'alioth': N_('Alioth'),
|
||||
'wiki': N_('Wiki'),
|
||||
'forum': N_('Forum'),
|
||||
},
|
||||
'miscellaneous': {
|
||||
'label': N_('Miscellaneous'),
|
||||
'debtags': N_('debtags'),
|
||||
'planetname': N_('Planet Debian (name)'),
|
||||
'planetuser': N_('Planet Debian (username)'),
|
||||
'links': N_('links'),
|
||||
'website': N_('Debian website'),
|
||||
'search': N_('Debian search'),
|
||||
'gpgfinger': N_('GPG public key via finger'),
|
||||
'gpgweb': N_('GPG public key via HTTP'),
|
||||
'nm': N_('NM, AM participation'),
|
||||
'contrib': N_('Contribution information'),
|
||||
},
|
||||
'ssh': {
|
||||
'label': N_('Information reachable via ssh (for Debian Members)'),
|
||||
'owndndoms': N_('owned debian.net domains'),
|
||||
'miainfo': N_('<a href="http://wiki.debian.org/qa.debian.org/'
|
||||
'MIATeam">MIA</a> database information'),
|
||||
'groupinfo': N_('Group membership information'),
|
||||
},
|
||||
'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):
|
||||
"""
|
||||
Render the input form.
|
||||
"""
|
||||
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()
|
||||
|
||||
DM_TUPLES = (('name', 'name'),
|
||||
('gpgfp', 'gpgfp'),
|
||||
('nonddemail', 'email'))
|
||||
DD_TUPLES = (('username', 'username'),
|
||||
('aliothusername', 'username'))
|
||||
|
||||
if fields['type'] in (dddatabuilder.TYPE_DD, dddatabuilder.TYPE_DM):
|
||||
for tuple in DM_TUPLES:
|
||||
if not tuple[0] in rp or not rp[tuple[0]]:
|
||||
rp[tuple[0]] = fields[tuple[1]]
|
||||
if fields['type'] == dddatabuilder.TYPE_DD:
|
||||
for tuple in DD_TUPLES:
|
||||
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].name), 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].name)))
|
||||
elif entry[0] == 'section':
|
||||
entry.append(_(self._get_label(entry[1])))
|
||||
c.urldata = data
|
||||
return render('/showurls.mako')
|
||||
70
debianmemberportfolio/controllers/error.py
Normal file
70
debianmemberportfolio/controllers/error.py
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
# -*- python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# DDPortfolio service ErrorController
|
||||
# Copyright © 2009, 2010, 2011, 2012 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 cgi
|
||||
|
||||
from paste.urlparser import PkgResourcesParser
|
||||
from pylons import request
|
||||
from pylons.controllers.util import forward
|
||||
from pylons.middleware import error_document_template
|
||||
from webhelpers.html.builder import literal
|
||||
|
||||
from ddportfolioservice.lib.base import BaseController
|
||||
|
||||
|
||||
class ErrorController(BaseController):
|
||||
"""Generates error documents as and when they are required.
|
||||
|
||||
The ErrorDocuments middleware forwards to ErrorController when error
|
||||
related status codes are returned from the application.
|
||||
|
||||
This behaviour can be altered by changing the parameters to the
|
||||
ErrorDocuments middleware in your config/middleware.py file.
|
||||
"""
|
||||
|
||||
def document(self):
|
||||
"""Render the error document"""
|
||||
resp = request.environ.get('pylons.original_response')
|
||||
content = literal(resp.body) or cgi.escape(
|
||||
request.GET.get('message', ''))
|
||||
page = error_document_template % \
|
||||
dict(prefix=request.environ.get('SCRIPT_NAME', ''),
|
||||
code=cgi.escape(
|
||||
request.GET.get('code', str(resp.status_int))),
|
||||
message=content)
|
||||
return page
|
||||
|
||||
def img(self, id):
|
||||
"""Serve Pylons' stock images"""
|
||||
return self._serve_file('/'.join(['media/img', id]))
|
||||
|
||||
def style(self, id):
|
||||
"""Serve Pylons' stock stylesheets"""
|
||||
return self._serve_file('/'.join(['media/style', id]))
|
||||
|
||||
def _serve_file(self, path):
|
||||
"""
|
||||
Call Paste's FileApp (a WSGI application) to serve the file at
|
||||
the specified path
|
||||
"""
|
||||
request.environ['PATH_INFO'] = '/%s' % path
|
||||
return forward(PkgResourcesParser('pylons', 'pylons'))
|
||||
69
debianmemberportfolio/controllers/showformscripts.py
Normal file
69
debianmemberportfolio/controllers/showformscripts.py
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
# -*- python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# DDPortfolio service ShowformscriptController.
|
||||
# Copyright © 2009, 2010, 2011, 2012 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, response
|
||||
from pylons.controllers.util import abort
|
||||
import formencode.api
|
||||
import formencode.validators
|
||||
|
||||
from ddportfolioservice.lib.base import BaseController, render
|
||||
from ddportfolioservice.model.form import DDDataRequest
|
||||
from ddportfolioservice.model import dddatabuilder
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ShowformscriptsController(BaseController):
|
||||
"""This controller is used to support data entry in showform.
|
||||
|
||||
It provides code for generating JavaScript as well as JSON
|
||||
responses for autocompletion of fields."""
|
||||
|
||||
def index(self):
|
||||
"""
|
||||
This action generates the helper script for the showform page.
|
||||
"""
|
||||
response.headers['Content-Type'] = 'text/javascript; charset=utf-8'
|
||||
return render('/showformscript.mako')
|
||||
|
||||
def fetchdddata(self):
|
||||
"""
|
||||
This action fetches the data for a given mail address and
|
||||
returns them as JSON.
|
||||
"""
|
||||
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:
|
||||
errors = error.unpack_errors()
|
||||
abort(400, "\n".join(
|
||||
["%s: %s" % (key, errors[key]) for key in errors]))
|
||||
fields = dddatabuilder.build_data(form_result['email'])
|
||||
log.debug(fields)
|
||||
response.headers['Content-Type'] = 'text/plain'
|
||||
return simplejson.dumps(fields)
|
||||
50
debianmemberportfolio/controllers/template.py
Normal file
50
debianmemberportfolio/controllers/template.py
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
# -*- python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# DDPortfolio service TemplateController
|
||||
# Copyright © 2009, 2010, 2011, 2012 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/>.
|
||||
#
|
||||
from ddportfolioservice.lib.base import BaseController
|
||||
|
||||
|
||||
class TemplateController(BaseController):
|
||||
|
||||
def view(self, url):
|
||||
"""By default, the final controller tried to fulfill the request
|
||||
when no other routes match. It may be used to display a template
|
||||
when all else fails, e.g.::
|
||||
|
||||
def view(self, url):
|
||||
return render('/%s' % url)
|
||||
|
||||
Or if you're using Mako and want to explicitly send a 404 (Not
|
||||
Found) response code when the requested template doesn't exist::
|
||||
|
||||
import mako.exceptions
|
||||
|
||||
def view(self, url):
|
||||
try:
|
||||
return render('/%s' % url)
|
||||
except mako.exceptions.TopLevelLookupException:
|
||||
abort(404)
|
||||
|
||||
By default this controller aborts the request with a 404 (Not
|
||||
Found)
|
||||
"""
|
||||
abort(404)
|
||||
Loading…
Add table
Add a link
Reference in a new issue