diff --git a/ddportfolioservice/controllers/ddportfolio.py b/ddportfolioservice/controllers/ddportfolio.py
index 8434b5f..7c7702d 100644
--- a/ddportfolioservice/controllers/ddportfolio.py
+++ b/ddportfolioservice/controllers/ddportfolio.py
@@ -1,7 +1,9 @@
import logging
+import simplejson
from ddportfolioservice.lib.base import *
from ddportfolioservice.model.form import *
+from ddportfolioservice.model.urlbuilder import *
log = logging.getLogger(__name__)
@@ -20,4 +22,9 @@ class DdportfolioController(BaseController):
except formencode.validators.Invalid, error:
c.messages = { 'errors' : error.unpack_errors() }
return render('/showform.mako')
- return ["done"]
+ 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'])
+ c.urldata = data
+ return render('/showurls.mako')
diff --git a/ddportfolioservice/ddportfolio.py b/ddportfolioservice/ddportfolio.py
deleted file mode 100644
index 361cdc0..0000000
--- a/ddportfolioservice/ddportfolio.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# -*- python -*-
-# -*- coding: utf8 -*-
-
-from paste.request import parse_formvars
-import pkg_resources
-import simplejson
-from ConfigParser import ConfigParser
-from urllib import quote_plus
-import logging
-import sys
-import formencode
-from gettext import gettext as _
-from formencode import validators
-
-logging.basicConfig(level=logging.DEBUG, stream=sys.stderr)
-
-my_config = ConfigParser()
-my_config.readfp(pkg_resources.resource_stream(__name__, 'ddportfolio.ini'))
-
-
-def build_urls(fields):
- """Build personalized URLs using the developer information in
- fields."""
- result = {}
- qfields = dict([(key, quote_plus(fields[key])) for key in fields])
- for section in my_config.sections():
- 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:
- result[section + '.' + url] = \
- my_config.get(section, url + '.pattern',
- False, qfields)
- except Exception, e:
- logging.error(_("unable to parse %s: %s") %
- (my_config.get(section, url +
- '.pattern', True), e))
- return result
-
-class DeveloperData(formencode.Schema):
- name = validators.String(not_empty=True)
- email = validators.Email(not_empty=True)
- username = validators.PlainText(not_empty=True)
-
-def validate_input(fields):
- logging.debug(fields)
- return DeveloperData().to_python(fields)
-
-def gather_additional_info(fields):
- logging.debug(fields)
- return fields
-
-def application(environ, start_response):
- """WSGI application entry point."""
- if environ['REQUEST_METHOD'] == 'POST':
- try:
- fields = gather_additional_info(
- validate_input(parse_formvars(environ)))
- except formencode.Invalid, e:
- start_response('400 Bad Request', [('content-type', 'text/plain')])
- return ["input validation failed\n", e.unpack_errors()]
- data = build_urls(fields)
- if ('mode' in fields and fields['mode'] == 'json'):
- start_response('200 OK', [('content-type', 'text/json')])
- return [simplejson.dumps(data)]
- else:
- start_response('200 OK', [('content-type', 'text/html')])
- return ['''
-
''', _("Debian Developer Portfolio"),'''
-
-
-- ''',
- '
- '.join([
- '%(key)s: %(url)s' %
- {'key': key, 'url': data[key]} for key in data]),
- '
']
- else:
- start_response('200 OK', [('content-type', 'text/html')])
- return ['''
-
- ''', _('Debian Developer Portfolio'), '''
-
-
-
-
-''']
-
-if __name__ == '__main__':
- from paste import httpserver
- httpserver.serve(application, host='127.0.0.1', port='8080')
diff --git a/ddportfolioservice/lib/base.py b/ddportfolioservice/lib/base.py
index 0bad547..be55c0a 100644
--- a/ddportfolioservice/lib/base.py
+++ b/ddportfolioservice/lib/base.py
@@ -26,6 +26,7 @@ class BaseController(WSGIController):
add_fallback(lang)
except:
pass
+ c.messages = { 'errors': [], 'messages': [] }
return WSGIController.__call__(self, environ, start_response)
# Include the '_' function in the public names
diff --git a/ddportfolioservice/ddportfolio.ini b/ddportfolioservice/model/ddportfolio.ini
similarity index 70%
rename from ddportfolioservice/ddportfolio.ini
rename to ddportfolioservice/model/ddportfolio.ini
index 888340a..37c6d89 100644
--- a/ddportfolioservice/ddportfolio.ini
+++ b/ddportfolioservice/model/ddportfolio.ini
@@ -9,13 +9,13 @@ received.pattern=http://bugs.debian.org/%(email)s
reported.pattern=http://bugs.debian.org/from:%(email)s
bugstats.pattern=http://asdfasdf.debian.net/~tar/bugstats/?%(email)s
usertags.pattern=http://bugs.debian.org/cgi-bin/pkgreport.cgi?users=%(email)s
-searchall.pattern=http://merkel.debian.org/~don/cgi/search.cgi?phrase=%(name)s&search=search
+searchall.pattern=http://merkel.debian.org/~don/cgi/search.cgi?phrase=%(name)s&search=search
wnpp.pattern=http://qa.debian.org/developer.php?wnpp=%(email)s
[build]
urls=buildd,igloo,svnbuildstat
buildd.pattern=http://buildd.debian.org/pkg.cgi?maint=%(email)s
-igloo.pattern=http://oldpeople.debian.org/~igloo/status.php?email=%(email)s&thin=on
+igloo.pattern=http://oldpeople.debian.org/~igloo/status.php?email=%(email)s&thin=on
svnbuildstat.pattern=http://svnbuildstat.debian.net/packages/list/%(email)s
[qa]
@@ -30,9 +30,9 @@ keylog.pattern=http://merkel.debian.org/~enrico/keylog/%(gpgfp)s.html
[lists]
urls=dolists,adolists,gmane
-dolists.pattern=http://lists.debian.org/cgi-bin/search?author=%(name)s&sort=date
+dolists.pattern=http://lists.debian.org/cgi-bin/search?author=%(name)s&sort=date
adolists.pattern=http://www.google.com/search?q=site%%3Alists.alioth.debian.org+%%22%(name)s%%22
-gmane.pattern=http://search.gmane.org/?email=%(name)s&group=gmane.linux.debian.*
+gmane.pattern=http://search.gmane.org/?email=%(name)s&group=gmane.linux.debian.*
[files]
urls=people,alioth
@@ -42,10 +42,10 @@ alioth.pattern=http://alioth.debian.org/~%(username)s/
[membership]
urls=nm,db,alioth
nm.pattern=https://nm.debian.org/nmstatus.php?email=%(email)s
-db.pattern=http://db.debian.org/search.cgi?uid=%(username)s&dosearch=Search
+db.pattern=http://db.debian.org/search.cgi?uid=%(username)s&dosearch=Search
alioth.pattern=http://alioth.debian.org/users/%(username)s/
[miscellaneous]
urls=debtags,links
debtags.pattern=http://debtags.alioth.debian.org/todo.html?maint=%(email)s
-links.pattern=http://www.google.com/search?hl=en&lr=&q=site%%3Adebian.org+%%22%(name)s%%22+-site%%3Anm.debian.org+-site%%3Alintian.debian.org+-site%%3Abugs.debian.org+-site%%3Alists.debian.org+-site%%3Apackages.debian.org+-site%%3Alists.alioth.debian.org+-site%%3Aftp.debian.org++-site%%3Apackages.qa.debian.org++-site%%3Aftp*.*.debian.org+-inurl%%3Adebian.org%%2Fdevel%%2Fpeople.+-inurl%%3Aindices%%2FMaintainers+-inurl%%3Adebian.org%%2Fdebian%%2Fproject++-inurl%%3A%%2Fdists%%2F&btnG=Search
+links.pattern=http://www.google.com/search?hl=en&lr=&q=site%%3Adebian.org+%%22%(name)s%%22+-site%%3Anm.debian.org+-site%%3Alintian.debian.org+-site%%3Abugs.debian.org+-site%%3Alists.debian.org+-site%%3Apackages.debian.org+-site%%3Alists.alioth.debian.org+-site%%3Aftp.debian.org++-site%%3Apackages.qa.debian.org++-site%%3Aftp*.*.debian.org+-inurl%%3Adebian.org%%2Fdevel%%2Fpeople.+-inurl%%3Aindices%%2FMaintainers+-inurl%%3Adebian.org%%2Fdebian%%2Fproject++-inurl%%3A%%2Fdists%%2F&btnG=Search
diff --git a/ddportfolioservice/model/urlbuilder.py b/ddportfolioservice/model/urlbuilder.py
new file mode 100644
index 0000000..11cad6e
--- /dev/null
+++ b/ddportfolioservice/model/urlbuilder.py
@@ -0,0 +1,30 @@
+# -*- python -*-
+# -*- coding: utf8 -*-
+
+import ConfigParser
+import pkg_resources
+from urllib import quote_plus
+
+my_config = ConfigParser.ConfigParser()
+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 = {}
+ qfields = dict([(key, quote_plus(fields[key])) for key in fields])
+ for section in my_config.sections():
+ 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)
+ except Exception, e:
+ errors['%s.%s.pattern' % (section, url)] = \
+ [my_config.get(section, '%s.pattern' % url,
+ True), str(e)]
+ return {'data' : data, 'errors' : errors}
diff --git a/ddportfolioservice/templates/showform.mako b/ddportfolioservice/templates/showform.mako
index 55c83a4..9d46f08 100644
--- a/ddportfolioservice/templates/showform.mako
+++ b/ddportfolioservice/templates/showform.mako
@@ -27,6 +27,8 @@
% endif
${h.text_field('username', value=request.params.get('username', None))}
+
+ ${_('HTML')} ${h.radio_button('mode', 'html', checked=(request.params.get('mode', 'html') == 'html'))} ${_('JSON')} ${h.radio_button('mode', 'json', checked=(request.params.get('mode', 'html') == 'json'))}
${h.submit(value=_('Build DD Portfolio URLs'))}
${h.end_form()}
diff --git a/ddportfolioservice/templates/showurls.mako b/ddportfolioservice/templates/showurls.mako
new file mode 100644
index 0000000..2df852c
--- /dev/null
+++ b/ddportfolioservice/templates/showurls.mako
@@ -0,0 +1,34 @@
+
+
+
+ ${_('Debian Developer Portfolio')}
+ ${h.stylesheet_link_tag('style')}
+
+
+ % if c.urldata['data']:
+
+ % endif
+ % if c.urldata['errors']:
+
+ % endif
+ ${h.link_to(_('Restart'), h.url_for(action='index'))}
+
+