Files
dog_training/forms/base.py

76 lines
2.0 KiB
Python

"""
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=[])