pre-fill fields if enough necessary information is given

- the email address is enough information for DDs
- default to JSON mode
- use text/javascript content type for JSON response in ddportfolio
  controller
This commit is contained in:
Jan Dittberner 2009-02-17 23:30:03 +01:00
parent 2b0b098d1d
commit 6d9b5b85c8
5 changed files with 70 additions and 19 deletions

View file

@ -26,6 +26,7 @@ import simplejson
from ddportfolioservice.lib.base import *
from ddportfolioservice.model.form import *
from ddportfolioservice.model.urlbuilder import *
from ddportfolioservice.model import dddatabuilder
log = logging.getLogger(__name__)
@ -115,7 +116,7 @@ developer name on all bug logs)'),
def urllist(self):
"""Handle the actual data."""
schema = DeveloperData()
schema = DDDataRequest()
try:
formencode.api.set_stdtranslation(
domain="FormEncode",
@ -124,9 +125,31 @@ developer name on all bug logs)'),
except formencode.validators.Invalid, error:
c.messages = { 'errors' : error.unpack_errors() }
return render('/showform.mako')
data = build_urls(form_result)
if 'mode' in request.params and request.params['mode'] == 'json':
response.headers['Content-Type'] = 'text/json'
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]]
if not 'mode' in rp or not rp['mode']:
rp['mode'] = 'json'
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')
data = build_urls(rp)
if 'mode' in rp and rp['mode'] == 'json':
response.headers['Content-Type'] = 'text/javascript'
return simplejson.dumps(
dict([("%s.%s" % \
(entry[1], entry[2]), entry[3]) \

View file

@ -25,8 +25,7 @@ import simplejson
from ddportfolioservice.lib.base import *
from ddportfolioservice.model.form import *
from ddportfolioservice.model import keyfinder
from webob.exc import HTTPBadRequest
from ddportfolioservice.model import dddatabuilder
log = logging.getLogger(__name__)
@ -53,17 +52,7 @@ class ShowformscriptsController(BaseController):
errors = error.unpack_errors()
abort(400, "\n".join(
["%s: %s" % (key, errors[key]) for key in errors]))
fields = dict([(field, func(str(form_result['email']))) \
for (field, func) in \
[('gpgfp', keyfinder.getFingerprintByEmail),
('name', keyfinder.getRealnameByEmail),
('username', keyfinder.getLoginByEmail)]])
fields['email'] = form_result['email']
if fields['username'] and fields['gpgfp'] and fields['name']:
fields['isdd'] = 1
else:
fields['isdd'] = 0
fields = dddatabuilder.build_data(form_result['email'])
log.debug(fields)
response.headers['Content-Type'] = 'text/plain'
return simplejson.dumps(fields)