""" Project: PARTS Website Author: Edward Middleton-Smith Precision And Research Technology Systems Limited Technology: Backend Feature: Contact Us Form Description: Defines Flask-WTF form for handling user input on Contact Us page. """ # IMPORTS # internal from dog_training.business_objects.base import Base from dog_training.business_objects.dog.command import Command from dog_training.business_objects.dog.dog import Dog from dog_training.business_objects.dog.obedience_level import Obedience_Level from dog_training.helpers.helper_app import Helper_App # from dog_training.models.model_view_store import Model_View_Store # circular # from dog_training.models.model_view_base import Model_View_Base from dog_training.forms.base import Form_Base import dog_training.lib.argument_validation as av # external from flask import Flask, render_template, request, flash, redirect, url_for, current_app from flask_wtf import FlaskForm from wtforms import SelectField, BooleanField, StringField, SubmitField from wtforms.validators import DataRequired, Email, ValidationError import markupsafe from flask_wtf.recaptcha import RecaptchaField from abc import ABCMeta, abstractmethod import json class Filters_Dog_Command_Link(Form_Base): search = StringField( 'Search' ) id_dog = SelectField( 'Dog' , choices = [Form_Base.get_select_option_all()] , default = Form_Base.get_select_option_default_value() ) id_command = SelectField( 'Command' , choices = [Form_Base.get_select_option_all()] , default = Form_Base.get_select_option_default_value() ) active_only = BooleanField( 'Active' , default = True ) @classmethod def from_json(cls, json): _m = f'{cls.__qualname__}.from_json' Helper_App.console_log(f'{_m}\njson: {json}') filters = cls() filters.search.data = json[Base.FLAG_SEARCH_TEXT] # filters.id_dog.choices = [(json[Dog.ATTR_ID_DOG], json[Dog.ATTR_ID_DOG])] filters.id_dog.data = json[Dog.ATTR_ID_DOG] # filters.id_command.choices = [(json[Command.ATTR_ID_COMMAND], json[Command.ATTR_ID_COMMAND])] filters.id_command.data = json[Command.ATTR_ID_COMMAND] filters.active_only.data = av.input_bool(json[Base.FLAG_ACTIVE_ONLY], Base.FLAG_ACTIVE_ONLY, f'{cls.__name__}.from_json') # Helper_App.console_log(f'Command: {command}') return filters def to_json(self): return { Base.FLAG_SEARCH_TEXT: self.search.data , Dog.FLAG_DOG: self.id_dog.data , Command.FLAG_COMMAND: self.id_command.data , Base.FLAG_ACTIVE_ONLY: self.active_only.data }