form.py 895 B

123456789101112131415161718192021222324252627282930313233
  1. from wtforms import Form
  2. from .utils import formdata_demangle
  3. from .translator import SchemaToForm
  4. class PydanticForm(Form):
  5. _errors = {}
  6. _schema = None
  7. def __init__(self, *args, **kwargs):
  8. self._errors = {}
  9. self.translator = SchemaToForm(self._schema, self)
  10. super().__init__(*args, **kwargs)
  11. @property
  12. def _baked_instance(self):
  13. return self.translator._schema
  14. def process(self, formdata=None, obj=None, data=None, **kwargs):
  15. super().process()
  16. formdata = self.meta.wrap_formdata(self, formdata)
  17. input = formdata_demangle(formdata) or data or kwargs
  18. self.translator(input)
  19. self.translator.set_data()
  20. def validate(self):
  21. if self.translator.errors is not None:
  22. self.translator.set_errors()
  23. return False
  24. self.translator.set_baked()
  25. return True