switch from ddportfolio to debianmemberportfolio
[debianmemberportfolio.git] / debianmemberportfolio / controllers / showformscripts.py
1 # -*- python -*-
2 # -*- coding: utf-8 -*-
3 #
4 # Debian Member Portfolio Service ShowformscriptsController.
5 #
6 # Copyright © 2009-2014 Jan Dittberner <jan@dittberner.info>
7 #
8 # This file is part of the Debian Member Portfolio Service.
9 #
10 # Debian Member Portfolio Service is free software: you can redistribute it
11 # and/or modify it under the terms of the GNU Affero General Public License as
12 # published by the Free Software Foundation, either version 3 of the License,
13 # or (at your option) any later version.
14 #
15 # Debian Member Portfolio Service is distributed in the hope that it will be
16 # useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero
18 # General Public License for more details.
19 #
20 # You should have received a copy of the GNU Affero General Public License
21 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
22 #
23 """
24 This file defines the ShowformscriptsController used to generate the JavaScript
25 code in forms.
26 """
27
28 import logging
29 import simplejson
30
31 from pylons import request, response
32 from pylons.controllers.util import abort
33
34 import formencode.api
35 import formencode.validators
36
37 from debianmemberportfolio.lib.base import BaseController, render
38 from debianmemberportfolio.model.form import DDDataRequest
39 from debianmemberportfolio.model import dddatabuilder
40
41 log = logging.getLogger(__name__)
42
43
44 class ShowformscriptsController(BaseController):
45     """This controller is used to support data entry in showform.
46
47     It provides code for generating JavaScript as well as JSON
48     responses for autocompletion of fields."""
49
50     def index(self):
51         """
52         This action generates the helper script for the showform page.
53         """
54         response.headers['Content-Type'] = 'text/javascript; charset=utf-8'
55         return render('/showformscript.mako')
56
57     def fetchdddata(self):
58         """
59         This action fetches the data for a given mail address and
60         returns them as JSON.
61         """
62         schema = DDDataRequest()
63         try:
64             formencode.api.set_stdtranslation(
65                 domain="FormEncode",
66                 languages=[lang[0:2] for lang in request.languages])
67             form_result = schema.to_python(request.params)
68         except formencode.validators.Invalid, error:
69             errors = error.unpack_errors()
70             abort(400, "\n".join(
71                   ["%s: %s" % (key, errors[key]) for key in errors]))
72         fields = dddatabuilder.build_data(form_result['email'])
73         log.debug(fields)
74         response.headers['Content-Type'] = 'text/plain'
75         return simplejson.dumps(fields)