""" Project: PARTS Website Author: Edward Middleton-Smith Precision And Research Technology Systems Limited Technology: Backend Feature: Form Base and Meta Classes - data input Description: Defines Flask-WTF base forms for handling user input. """ # internal from helpers.helper_app import Helper_App # external from flask_wtf import FlaskForm from abc import ABCMeta, abstractmethod from wtforms import SelectField, BooleanField, SubmitField from wtforms.validators import InputRequired, NumberRange, Regexp, DataRequired, Optional class Form_Base_Meta(type(FlaskForm), ABCMeta): pass class Form_Base(FlaskForm, metaclass=Form_Base_Meta): @classmethod @abstractmethod def from_json(cls, json): Helper_App.console_log(f'Error: Parent classes of {cls.__qualname__} must define cls.from_json') @classmethod def get_default(cls): return cls() @classmethod def get_select_option_blank(cls, is_valid = True): value = cls.get_select_valid_option_default_value() if is_valid else cls.get_select_invalid_option_default_value() return (value, 'Select') @classmethod def get_select_option_all(cls): return (cls.get_select_valid_option_default_value(), 'All') @staticmethod def get_select_valid_option_default_value(): return '0' @staticmethod def get_select_invalid_option_default_value(): return '' def __repr__(self): fields = ', '.join( f"{name}={field.data}" for name, field in self._fields.items() ) return f"{self.__class__.__name__}({fields})" ''' class Filters_Stored_Procedure_Base(Form_Base): """ @abstractmethod def __repr__(self): pass @classmethod @abstractmethod def from_json(cls, json): pass """ @abstractmethod def to_json(self): pass ''' class Form_Filters_User(FlaskForm): active = BooleanField('Active only?', default = True) id_user = SelectField('User ID', validators=[Optional()], choices=[])