~unifield-team/unifield-web/uf-2235

« back to all changes in this revision

Viewing changes to addons/openerp/controllers/utils.py

  • Committer: ame (Tiny)
  • Date: 2010-01-07 07:47:47 UTC
  • Revision ID: ame@tinyerp.com-20100107074747-sqc1cmm24gofqmuh
[REF] separating base API to openobject
[REF] removed all openerp related stuffs from base api

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
from openobject.tools import expose
40
40
from openobject.tools import redirect
41
41
 
42
 
from base.validators import Invalid
43
42
 
44
 
__all__ = ["secured", "unsecured", "login", "validate", "error_handler", "exception_handler"]
 
43
__all__ = ["secured", "unsecured", "login"]
45
44
 
46
45
 
47
46
@expose(template="templates/login.mako")
175
174
    return tools.decorated(wrapper, fn, secured=False)
176
175
 
177
176
 
178
 
from itertools import izip, islice
179
 
from inspect import getargspec
180
 
 
181
 
def to_kw(func, args, kw):
182
 
 
183
 
    argnames, defaults = getargspec(func)[::3]
184
 
    defaults = defaults or []
185
 
 
186
 
    kv = zip(islice(argnames, 0, len(argnames) - len(defaults)), args)
187
 
    kw.update(kv)
188
 
 
189
 
    return args[len(argnames)-len(defaults):], kw
190
 
 
191
 
def from_kw(func, args, kw):
192
 
 
193
 
    argnames, defaults = getargspec(func)[::3]
194
 
    defaults = defaults or []
195
 
 
196
 
    newargs = [kw.pop(name) for name in islice(argnames, 0, len(argnames) - len(defaults)) if name in kw]
197
 
    newargs.extend(args)
198
 
 
199
 
    return newargs, kw
200
 
 
201
 
 
202
 
def validate(form=None, validators=None):
203
 
 
204
 
    def validate_wrapper(func):
205
 
 
206
 
        if callable(form) and not hasattr(form, "validate"):
207
 
            init_form = lambda self: form(self)
208
 
        else:
209
 
            init_form = lambda self: form
210
 
 
211
 
        def func_wrapper(*args, **kw):
212
 
 
213
 
            # do not validate a second time if already validated
214
 
            if hasattr(cherrypy.request, 'validation_state'):
215
 
                return func(*args, **kw)
216
 
 
217
 
            form = init_form(args and args[0] or kw["self"])
218
 
            args, kw = to_kw(func, args, kw)
219
 
 
220
 
            errors = {}
221
 
 
222
 
            if form:
223
 
                value = kw.copy()
224
 
                value.pop('self', None)
225
 
                try:
226
 
                    kw.update(form.validate(value, None))
227
 
                except Invalid, e:
228
 
                    errors = e.unpack_errors()
229
 
                    cherrypy.request.validation_exception = e
230
 
                    cherrypy.request.validation_value = value
231
 
                cherrypy.request.validated_form = form
232
 
 
233
 
            if validators:
234
 
 
235
 
                if isinstance(validators, dict):
236
 
                    for field, validator in validators.iteritems():
237
 
                        try:
238
 
                            kw[field] = validator.to_python(
239
 
                                kw.get(field, None), None)
240
 
                        except Invalid, error:
241
 
                            errors[field] = error
242
 
                else:
243
 
                    try:
244
 
                        value = kw.copy()
245
 
                        kw.update(validators.to_python(value, None))
246
 
                    except Invalid, e:
247
 
                        errors = e.unpack_errors()
248
 
                        cherrypy.request.validation_exception = e
249
 
                        cherrypy.request.validation_value = value
250
 
 
251
 
            cherrypy.request.validation_errors = errors
252
 
            cherrypy.request.input_values = kw.copy()
253
 
            cherrypy.request.validation_state = True
254
 
 
255
 
            args, kw = from_kw(func, args, kw)
256
 
            return func(*args, **kw)
257
 
 
258
 
        return tools.decorated(func_wrapper, func)
259
 
 
260
 
    return validate_wrapper
261
 
 
262
 
def error_handler(handler):
263
 
 
264
 
    def wrapper(func):
265
 
 
266
 
        def func_wrapper(*args, **kw):
267
 
 
268
 
            tg_errors = getattr(cherrypy.request, 'validation_errors', None)
269
 
            if tg_errors:
270
 
                kw['tg_errors'] = tg_errors
271
 
                return handler(*args, **kw)
272
 
 
273
 
            return func(*args, **kw)
274
 
 
275
 
        return tools.decorated(func_wrapper, func)
276
 
 
277
 
    return wrapper
278
 
 
279
 
def exception_handler(*args, **kw):
280
 
    return lambda f: f
281
 
 
282
 
 
283
177
# vim: ts=4 sts=4 sw=4 si et
284
178