''' Schemas (sub) package, for form rendering and validation ''' import colander import deform from deform.renderer import configure_zpt_renderer from .helpers import ( deferred_csrf_default, deferred_csrf_validator ) # Base Schema class CSRFSchema(colander.Schema): ''' base class for schemas with csrf validation ''' csrf_token = colander.SchemaNode( colander.String(), default=deferred_csrf_default, validator=deferred_csrf_validator, widget=deform.widget.HiddenWidget(), ) @classmethod def as_form(cls, request, action=None, **kwargs): ''' returns the schema as a form :param pyramid.request.Request request: the current request :param str url: form action url, url is not set, the current context and view name will be used to constuct a url for the form :param kwargs: additional parameters for the form rendering. ''' schema = cls().bind(request=request) if action is None: action = request.resource_url(request.context, request.view_name) settings = {'col_label': 3, 'col_input': 9, 'action': action} settings.update(kwargs) return deform.Form(schema, **settings) def includeme(config): ''' Initialize the form schemas Activate this setup using ``config.include('ordr.schemas')``. ''' # Make Deform widgets aware of our widget template paths configure_zpt_renderer(['ordr:templates/deform'])