from functools import wraps from flask import g, request, render_template from wtforms import Field, ValidationError from widgets import Static # using http://flask.pocoo.org/docs/patterns/viewdecorators/ def templated(template=None): def decorator(f): @wraps(f) def decorated_function(*args, **kwargs): template_name = template if template_name is None: template_name = request.endpoint \ .replace('.', '/') + '.html' ctx = f(*args, **kwargs) if ctx is None: ctx = {} elif not isinstance(ctx, dict): return ctx return render_template(template_name, **ctx) return decorated_function return decorator def after_this_request(f): if not hasattr(g, 'after_request_callbacks'): g.after_request_callbacks = [] g.after_request_callbacks.append(f) return f class Unique(object): """ validator that checks field uniqueness """ def __init__(self, model, field, message=None): self.model = model self.field = field if not message: message = u'This element already exists.' self.message = message def __call__(self, form, field): try: self.model.get(self.field == field.data) raise ValidationError(self.message) except self.model.DoesNotExist: pass class ReadonlyField(Field): widget = Static() def process_formdata(self, _): pass