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