123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- from wtforms.utils import WebobInputWrapper
- from wtforms import i18n
- class DefaultMeta(object):
- """
- This is the default Meta class which defines all the default values and
- therefore also the 'API' of the class Meta interface.
- """
- # -- Basic form primitives
- def bind_field(self, form, unbound_field, options):
- """
- bind_field allows potential customization of how fields are bound.
- The default implementation simply passes the options to
- :meth:`UnboundField.bind`.
- :param form: The form.
- :param unbound_field: The unbound field.
- :param options:
- A dictionary of options which are typically passed to the field.
- :return: A bound field
- """
- return unbound_field.bind(form=form, **options)
- def wrap_formdata(self, form, formdata):
- """
- wrap_formdata allows doing custom wrappers of WTForms formdata.
- The default implementation detects webob-style multidicts and wraps
- them, otherwise passes formdata back un-changed.
- :param form: The form.
- :param formdata: Form data.
- :return: A form-input wrapper compatible with WTForms.
- """
- if formdata is not None and not hasattr(formdata, 'getlist'):
- if hasattr(formdata, 'getall'):
- return WebobInputWrapper(formdata)
- else:
- raise TypeError("formdata should be a multidict-type wrapper that supports the 'getlist' method")
- return formdata
- def render_field(self, field, render_kw):
- """
- render_field allows customization of how widget rendering is done.
- The default implementation calls ``field.widget(field, **render_kw)``
- """
- other_kw = getattr(field, 'render_kw', None)
- if other_kw is not None:
- render_kw = dict(other_kw, **render_kw)
- return field.widget(field, **render_kw)
- # -- CSRF
- csrf = False
- csrf_field_name = 'csrf_token'
- csrf_secret = None
- csrf_context = None
- csrf_class = None
- def build_csrf(self, form):
- """
- Build a CSRF implementation. This is called once per form instance.
- The default implementation builds the class referenced to by
- :attr:`csrf_class` with zero arguments. If `csrf_class` is ``None``,
- will instead use the default implementation
- :class:`wtforms.csrf.session.SessionCSRF`.
- :param form: The form.
- :return: A CSRF implementation.
- """
- if self.csrf_class is not None:
- return self.csrf_class()
- from wtforms.csrf.session import SessionCSRF
- return SessionCSRF()
- # -- i18n
- locales = False
- cache_translations = True
- translations_cache = {}
- def get_translations(self, form):
- """
- Override in subclasses to provide alternate translations factory.
- See the i18n documentation for more.
- :param form: The form.
- :return: An object that provides gettext() and ngettext() methods.
- """
- locales = self.locales
- if locales is False:
- return None
- if self.cache_translations:
- # Make locales be a hashable value
- locales = tuple(locales) if locales else None
- translations = self.translations_cache.get(locales)
- if translations is None:
- translations = self.translations_cache[locales] = i18n.get_translations(locales)
- return translations
- return i18n.get_translations(locales)
- # -- General
- def update_values(self, values):
- """
- Given a dictionary of values, update values on this `Meta` instance.
- """
- for key, value in values.items():
- setattr(self, key, value)
|