""" Project: PARTS Website Author: Edward Middleton-Smith Precision And Research Technology Systems Limited Technology: Business Objects Feature: Distraction Business Object """ # internal from business_objects.base import Base from business_objects.db_base import SQLAlchemy_ABC, Get_Many_Parameters_Base from business_objects.dog.assessment import Assessment from business_objects.dog.command import Command # from business_objects.dog.command_category import Command_Category from business_objects.dog.distraction_intensity_level import Distraction_Intensity_Level from business_objects.dog.distraction_type import Distraction_Type from business_objects.dog.dog import Dog from extensions import db from forms.dog.assessment import Filters_Assessment # from forms.dog.distraction import Filters_Distraction from helpers.helper_app import Helper_App import lib.argument_validation as av # external from dataclasses import dataclass from typing import ClassVar, Optional class Distraction(SQLAlchemy_ABC, Base): ATTR_ID_DISTRACTION: ClassVar[str] = 'id_distraction' FLAG_DISTRACTION: ClassVar[str] = Assessment.FLAG_DISTRACTION FLAG_DISTRACTION_INTENSITY_LEVEL_EMOTIONAL: ClassVar[str] = f'{Distraction_Intensity_Level.FLAG_DISTRACTION_INTENSITY_LEVEL}-emotional' FLAG_DISTRACTION_INTENSITY_LEVEL_SCENT: ClassVar[str] = f'{Distraction_Intensity_Level.FLAG_DISTRACTION_INTENSITY_LEVEL}-scent' FLAG_DISTRACTION_INTENSITY_LEVEL_SIGHT: ClassVar[str] = f'{Distraction_Intensity_Level.FLAG_DISTRACTION_INTENSITY_LEVEL}-sight' FLAG_DISTRACTION_INTENSITY_LEVEL_SOUND: ClassVar[str] = f'{Distraction_Intensity_Level.FLAG_DISTRACTION_INTENSITY_LEVEL}-sound' FLAG_DISTRACTION_INTENSITY_LEVEL_TOUCH: ClassVar[str] = f'{Distraction_Intensity_Level.FLAG_DISTRACTION_INTENSITY_LEVEL}-touch' FLAG_PROXIMITY_METRES: ClassVar[str] = 'proximity-metres' NAME_ATTR_OPTION_VALUE: ClassVar[str] = ATTR_ID_DISTRACTION NAME_ATTR_OPTION_TEXT: ClassVar[str] = ATTR_ID_DISTRACTION __tablename__ = 'DOG_Distraction' __table_args__ = { 'extend_existing': True } id_distraction = db.Column(db.Integer, primary_key=True) id_assessment = db.Column(db.Integer) id_distraction_type = db.Column(db.Integer) id_intensity_level_emotional = db.Column(db.Integer) id_intensity_level_scent = db.Column(db.Integer) id_intensity_level_sight = db.Column(db.Integer) id_intensity_level_sound = db.Column(db.Integer) id_intensity_level_touch = db.Column(db.Integer) quantity = db.Column(db.Integer) proximity_metres = db.Column(db.Float) notes = db.Column(db.Text) active = db.Column(db.Boolean) created_on = db.Column(db.DateTime) def __init__(self): self.id_distraction = 0 self.is_new = False self.assessment = None self.distraction_type = None self.intensity_level_emotional = None self.intensity_level_scent = None self.intensity_level_sight = None self.intensity_level_sound = None self.intensity_level_touch = None super().__init__() @classmethod def from_db_distraction(cls, query_row): _m = 'Distraction.from_db_distraction' distraction = cls() distraction.id_distraction = query_row[0] distraction.id_assessment = query_row[1] distraction.id_distraction_type = query_row[2] #distraction.id_command_category = query_row[3] distraction.id_intensity_level_emotional = query_row[4] distraction.id_intensity_level_scent = query_row[6] distraction.id_intensity_level_sight = query_row[8] distraction.id_intensity_level_sound = query_row[10] distraction.id_intensity_level_touch = query_row[12] distraction.quantity = query_row[14] distraction.proximity_metres = query_row[15] distraction.notes = query_row[16] distraction.active = av.input_bool(query_row[17], 'active', _m) # distraction.created_on = query_row[7] distraction.assessment = Assessment.from_db_distraction(query_row) distraction.distraction_type = Distraction_Type.from_db_distraction(query_row) distraction.intensity_level_emotional = Distraction_Intensity_Level.from_db_distraction_emotional(query_row) distraction.intensity_level_scent = Distraction_Intensity_Level.from_db_distraction_scent(query_row) distraction.intensity_level_sight = Distraction_Intensity_Level.from_db_distraction_sight(query_row) distraction.intensity_level_sound = Distraction_Intensity_Level.from_db_distraction_sound(query_row) distraction.intensity_level_touch = Distraction_Intensity_Level.from_db_distraction_touch(query_row) return distraction @classmethod def from_json(cls, json): _m = 'Distraction.from_json' distraction = cls() if json is None: return distraction # Helper_App.console_log(f'{_m}\njson: {json}') distraction.id_distraction = json.get(cls.ATTR_ID_DISTRACTION, -1) distraction.id_assessment = json[Assessment.ATTR_ID_ASSESSMENT] distraction.id_distraction_type = json[Distraction_Type.ATTR_ID_DISTRACTION_TYPE] distraction.id_intensity_level_emotional = json[cls.FLAG_DISTRACTION_INTENSITY_LEVEL_EMOTIONAL] distraction.id_intensity_level_scent = json[cls.FLAG_DISTRACTION_INTENSITY_LEVEL_SCENT] distraction.id_intensity_level_sight = json[cls.FLAG_DISTRACTION_INTENSITY_LEVEL_SIGHT] distraction.id_intensity_level_sound = json[cls.FLAG_DISTRACTION_INTENSITY_LEVEL_SOUND] distraction.id_intensity_level_touch = json[cls.FLAG_DISTRACTION_INTENSITY_LEVEL_TOUCH] distraction.quantity = json[cls.FLAG_QUANTITY] distraction.proximity_metres = json[cls.FLAG_PROXIMITY_METRES] distraction.notes = json[cls.FLAG_NOTES] distraction.active = av.input_bool(json[cls.FLAG_ACTIVE], cls.FLAG_ACTIVE, _m) distraction.created_on = json.get(cls.FLAG_CREATED_ON, None) # distraction.id_command_category = json[Command_Category.FLAG_COMMAND_CATEGORY] # Helper_App.console_log(f'Dog Command Link: {distraction}') return distraction def to_json(self): as_json = { **self.get_shared_json_attributes(self) , self.ATTR_ID_DISTRACTION: self.id_distraction , Assessment.ATTR_ID_ASSESSMENT: { Assessment.ATTR_ID_ASSESSMENT: None } if self.assessment is None else self.assessment.to_json() , Distraction_Type.ATTR_ID_DISTRACTION_TYPE: { Distraction_Type.ATTR_ID_DISTRACTION_TYPE: None } if self.distraction_type is None else self.distraction_type.to_json() , self.FLAG_DISTRACTION_INTENSITY_LEVEL_EMOTIONAL: { self.FLAG_DISTRACTION_INTENSITY_LEVEL_EMOTIONAL: None } if self.intensity_level_emotional is None else self.intensity_level_emotional.to_json() , self.FLAG_DISTRACTION_INTENSITY_LEVEL_SCENT: { self.FLAG_DISTRACTION_INTENSITY_LEVEL_SCENT: None } if self.intensity_level_scent is None else self.intensity_level_scent.to_json() , self.FLAG_DISTRACTION_INTENSITY_LEVEL_SIGHT: { self.FLAG_DISTRACTION_INTENSITY_LEVEL_SIGHT: None } if self.intensity_level_sight is None else self.intensity_level_sight.to_json() , self.FLAG_DISTRACTION_INTENSITY_LEVEL_SOUND: { self.FLAG_DISTRACTION_INTENSITY_LEVEL_SOUND: None } if self.intensity_level_sound is None else self.intensity_level_sound.to_json() , self.FLAG_DISTRACTION_INTENSITY_LEVEL_TOUCH: { self.FLAG_DISTRACTION_INTENSITY_LEVEL_TOUCH: None } if self.intensity_level_touch is None else self.intensity_level_touch.to_json() , self.FLAG_QUANTITY: self.quantity , self.FLAG_PROXIMITY_METRES: self.proximity_metres , self.FLAG_NOTES: self.notes , self.FLAG_ACTIVE: self.active , self.FLAG_CREATED_ON: self.created_on } # , Command_Category.FLAG_COMMAND_CATEGORY: self.id_command_category # Helper_App.console_log(f'as_json: {as_json}') return as_json def __repr__(self): return f''' {self.__class__.__name__}( {self.FLAG_DISTRACTION}: {self.id_distraction} {Assessment.ATTR_ID_ASSESSMENT}: {self.id_assessment} {Distraction_Type.ATTR_ID_DISTRACTION_TYPE}: {self.id_distraction_type} {self.FLAG_DISTRACTION_INTENSITY_LEVEL_EMOTIONAL}: {self.intensity_level_emotional} {self.FLAG_DISTRACTION_INTENSITY_LEVEL_SCENT}: {self.intensity_level_scent} {self.FLAG_DISTRACTION_INTENSITY_LEVEL_SIGHT}: {self.intensity_level_sight} {self.FLAG_DISTRACTION_INTENSITY_LEVEL_SOUND}: {self.intensity_level_sound} {self.FLAG_DISTRACTION_INTENSITY_LEVEL_TOUCH}: {self.intensity_level_touch} {self.FLAG_QUANTITY}: {self.quantity} {self.FLAG_PROXIMITY_METRES}: {self.proximity_metres} {self.FLAG_NOTES}: {self.notes} {self.FLAG_ACTIVE}: {self.active} {self.FLAG_CREATED_ON}: {self.created_on} ) ''' # {Command_Category.FLAG_COMMAND_CATEGORY}: {self.id_command_category} class Distraction_Temp(db.Model, Base): __tablename__ = 'DOG_Distraction_Temp' __table_args__ = { 'extend_existing': True } id_temp = db.Column(db.Integer, primary_key=True) id_distraction = db.Column(db.Integer) id_assessment = db.Column(db.Integer) id_distraction_type = db.Column(db.Integer) id_intensity_level_emotional = db.Column(db.Integer) id_intensity_level_scent = db.Column(db.Integer) id_intensity_level_sight = db.Column(db.Integer) id_intensity_level_sound = db.Column(db.Integer) id_intensity_level_touch = db.Column(db.Integer) quantity = db.Column(db.Integer) proximity_metres = db.Column(db.Float) notes = db.Column(db.Text) active = db.Column(db.Boolean) # created_on = db.Column(db.DateTime) guid: str = db.Column(db.String(36)) def __init__(self): super().__init__() @classmethod def from_distraction(cls, distraction): _m = 'Distraction_Temp.from_distraction' temp = cls() temp.id_distraction = distraction.id_distraction temp.id_assessment = distraction.id_assessment temp.id_distraction_type = distraction.id_distraction_type temp.id_intensity_level_emotional = distraction.id_intensity_level_emotional temp.id_intensity_level_scent = distraction.id_intensity_level_scent temp.id_intensity_level_sight = distraction.id_intensity_level_sight temp.id_intensity_level_sound = distraction.id_intensity_level_sound temp.id_intensity_level_touch = distraction.id_intensity_level_touch temp.quantity = distraction.quantity temp.proximity_metres = distraction.proximity_metres temp.notes = distraction.notes temp.active = distraction.active # temp.created_on = distraction.created_on return temp class Parameters_Distraction(Get_Many_Parameters_Base): get_all_distraction: bool get_inactive_distraction: bool ids_distraction: str notes_distraction: str min_quantity_distraction: Optional[int] max_quantity_distraction: Optional[int] min_proximity_metres_distraction: Optional[float] max_proximity_metres_distraction: Optional[float] get_all_distraction_type: bool get_inactive_distraction_type: bool ids_distraction_type: str names_distraction_type: str get_all_distraction_intensity_level_emotional: bool get_inactive_distraction_intensity_level_emotional: bool ids_distraction_intensity_level_emotional: str names_distraction_intensity_level_emotional: str get_all_distraction_intensity_level_scent: bool get_inactive_distraction_intensity_level_scent: bool ids_distraction_intensity_level_scent: str names_distraction_intensity_level_scent: str get_all_distraction_intensity_level_sight: bool get_inactive_distraction_intensity_level_sight: bool ids_distraction_intensity_level_sight: str names_distraction_intensity_level_sight: str get_all_distraction_intensity_level_sound: bool get_inactive_distraction_intensity_level_sound: bool ids_distraction_intensity_level_sound: str names_distraction_intensity_level_sound: str get_all_distraction_intensity_level_touch: bool get_inactive_distraction_intensity_level_touch: bool ids_distraction_intensity_level_touch: str names_distraction_intensity_level_touch: str get_all_AC_link: bool get_inactive_AC_link: bool ids_AC_link: str min_distance_from_handler_metres_AC_link: Optional[float] max_distance_from_handler_metres_AC_link: Optional[float] value_is_in_sight_of_handler_AC_link: Optional[bool] value_is_in_scent_range_of_handler_AC_link: Optional[bool] value_is_in_hearing_range_of_handler_AC_link: Optional[bool] value_is_on_lead_AC_link: Optional[bool] min_trial_count_AC_link: Optional[float] max_trial_count_AC_link: Optional[float] get_all_assessment: bool get_inactive_assessment: bool ids_assessment: str notes_assessment: str min_temperature_assessment: Optional[float] max_temperature_assessment: Optional[float] get_all_assessment_type: bool get_inactive_assessment_type: bool ids_assessment_type: str names_assessment_type: str get_all_weather: bool get_inactive_weather: bool ids_weather: str names_weather: str get_all_lighting_level: bool get_inactive_lighting_level: bool ids_lighting_level: str names_lighting_level: str get_all_location: bool get_inactive_location: bool ids_location: str names_location: str get_all_user_handler: bool get_inactive_user_handler: bool ids_user_handler: str #auth0_ids_user_handler: str names_user_handler: str emails_user_handler: str get_all_command_category: bool get_inactive_command_category: bool ids_command_category: str names_command_category: str get_all_command: bool get_inactive_command: bool ids_command: str names_command: str hand_signal_default_descriptions_command: str notes_command: str get_all_reinforcement_schedule: bool get_inactive_reinforcement_schedule: bool ids_reinforcement_schedule: str names_reinforcement_schedule: str require_all_id_search_filters_met: bool require_any_id_search_filters_met: bool require_all_non_id_search_filters_met: bool require_any_non_id_search_filters_met: bool @classmethod def get_default(cls): return cls( get_all_distraction = True , get_inactive_distraction = False , ids_distraction = '' , notes_distraction = '' , min_quantity_distraction = None , max_quantity_distraction = None , min_proximity_metres_distraction = None , max_proximity_metres_distraction = None , get_all_distraction_type = True , get_inactive_distraction_type = False , ids_distraction_type = '' , names_distraction_type = '' , get_all_distraction_intensity_level_emotional = True , get_inactive_distraction_intensity_level_emotional = False , ids_distraction_intensity_level_emotional = '' , names_distraction_intensity_level_emotional = '' , get_all_distraction_intensity_level_scent = True , get_inactive_distraction_intensity_level_scent = False , ids_distraction_intensity_level_scent = '' , names_distraction_intensity_level_scent = '' , get_all_distraction_intensity_level_sight = True , get_inactive_distraction_intensity_level_sight = False , ids_distraction_intensity_level_sight = '' , names_distraction_intensity_level_sight = '' , get_all_distraction_intensity_level_sound = True , get_inactive_distraction_intensity_level_sound = False , ids_distraction_intensity_level_sound = '' , names_distraction_intensity_level_sound = '' , get_all_distraction_intensity_level_touch = True , get_inactive_distraction_intensity_level_touch = False , ids_distraction_intensity_level_touch = '' , names_distraction_intensity_level_touch = '' , get_all_AC_link = True , get_inactive_AC_link = False , ids_AC_link = '' , min_distance_from_handler_metres_AC_link = None , max_distance_from_handler_metres_AC_link = None , value_is_in_sight_of_handler_AC_link = None , value_is_in_scent_range_of_handler_AC_link = None , value_is_in_hearing_range_of_handler_AC_link = None , value_is_on_lead_AC_link = None , min_trial_count_AC_link = None , max_trial_count_AC_link = None , get_all_assessment = True , get_inactive_assessment = False , ids_assessment = '' , notes_assessment = '' , min_temperature_assessment = None , max_temperature_assessment = None , get_all_assessment_type = True , get_inactive_assessment_type = False , ids_assessment_type = '' , names_assessment_type = '' , get_all_weather = True , get_inactive_weather = False , ids_weather = '' , names_weather = '' , get_all_lighting_level = True , get_inactive_lighting_level = False , ids_lighting_level = '' , names_lighting_level = '' , get_all_location = True , get_inactive_location = False , ids_location = '' , names_location = '' , get_all_user_handler = True , get_inactive_user_handler = False , ids_user_handler = '' # , auth0_ids_user_handler = '' , names_user_handler = '' , emails_user_handler = '' , get_all_command_category = True , get_inactive_command_category = False , ids_command_category = '' , names_command_category = '' , get_all_command = True , get_inactive_command = False , ids_command = '' , names_command = '' , hand_signal_default_descriptions_command = '' , notes_command = '' , get_all_reinforcement_schedule = True , get_inactive_reinforcement_schedule = False , ids_reinforcement_schedule = '' , names_reinforcement_schedule = '' , require_all_id_search_filters_met = True , require_any_id_search_filters_met = True , require_all_non_id_search_filters_met = False , require_any_non_id_search_filters_met = True ) @classmethod def from_json(cls, json): return cls( get_all_distraction = json.get('a_get_all_distraction', False) , get_inactive_distraction = json.get('a_get_inactive_distraction', False) , ids_distraction = json.get('a_ids_distraction', '') , notes_distraction = json.get('a_notes_distraction', '') , min_quantity_distraction = json.get('a_min_quantity_distraction', None) , max_quantity_distraction = json.get('a_max_quantity_distraction', None) , min_proximity_metres_distraction = json.get('a_min_proximity_metres_distraction', None) , max_proximity_metres_distraction = json.get('a_max_proximity_metres_distraction', None) , get_all_distraction_type = json.get('a_get_all_distraction_type', False) , get_inactive_distraction_type = json.get('a_get_inactive_distraction_type', False) , ids_distraction_type = json.get('a_ids_distraction_type', '') , names_distraction_type = json.get('a_names_distraction_type', '') , get_all_distraction_intensity_level_emotional = json.get('a_get_all_distraction_intensity_level_emotional', False) , get_inactive_distraction_intensity_level_emotional = json.get('a_get_inactive_distraction_intensity_level_emotional', False) , ids_distraction_intensity_level_emotional = json.get('a_ids_distraction_intensity_level_emotional', '') , names_distraction_intensity_level_emotional = json.get('a_names_distraction_intensity_level_emotional', '') , get_all_distraction_intensity_level_scent = json.get('a_get_all_distraction_intensity_level_scent', False) , get_inactive_distraction_intensity_level_scent = json.get('a_get_inactive_distraction_intensity_level_scent', False) , ids_distraction_intensity_level_scent = json.get('a_ids_distraction_intensity_level_scent', '') , names_distraction_intensity_level_scent = json.get('a_names_distraction_intensity_level_scent', '') , get_all_distraction_intensity_level_sight = json.get('a_get_all_distraction_intensity_level_sight', False) , get_inactive_distraction_intensity_level_sight = json.get('a_get_inactive_distraction_intensity_level_sight', False) , ids_distraction_intensity_level_sight = json.get('a_ids_distraction_intensity_level_sight', '') , names_distraction_intensity_level_sight = json.get('a_names_distraction_intensity_level_sight', '') , get_all_distraction_intensity_level_sound = json.get('a_get_all_distraction_intensity_level_sound', False) , get_inactive_distraction_intensity_level_sound = json.get('a_get_inactive_distraction_intensity_level_sound', False) , ids_distraction_intensity_level_sound = json.get('a_ids_distraction_intensity_level_sound', '') , names_distraction_intensity_level_sound = json.get('a_names_distraction_intensity_level_sound', '') , get_all_distraction_intensity_level_touch = json.get('a_get_all_distraction_intensity_level_touch', False) , get_inactive_distraction_intensity_level_touch = json.get('a_get_inactive_distraction_intensity_level_touch', False) , ids_distraction_intensity_level_touch = json.get('a_ids_distraction_intensity_level_touch', '') , names_distraction_intensity_level_touch = json.get('a_names_distraction_intensity_level_touch', '') , get_all_AC_link = json.get('a_get_all_AC_link', False) , get_inactive_AC_link = json.get('a_get_inactive_AC_link', False) , ids_AC_link = json.get('a_ids_AC_link', '') , notes_assessment_command_modality_AC_link = json.get('a_notes_assessment_command_modality_AC_link', '') , min_distance_from_handler_metres_AC_link = json.get('a_min_distance_from_handler_metres_AC_link', None) , max_distance_from_handler_metres_AC_link = json.get('a_max_distance_from_handler_metres_AC_link', None) , value_is_in_sight_of_handler_AC_link = json.get('a_value_is_in_sight_of_handler_AC_link', None) , value_is_in_scent_range_of_handler_AC_link = json.get('a_value_is_in_scent_range_of_handler_AC_link', None) , value_is_in_hearing_range_of_handler_AC_link = json.get('a_value_is_in_hearing_range_of_handler_AC_link', None) , value_is_on_lead_AC_link = json.get('a_value_is_on_lead_AC_link', None) , min_trial_count_AC_link = json.get('a_min_trial_count_AC_link', None) , max_trial_count_AC_link = json.get('a_max_trial_count_AC_link', None) , get_all_assessment = json.get('a_get_all_assessment', False) , get_inactive_assessment = json.get('a_get_inactive_assessment', False) , ids_assessment = json.get('a_ids_assessment', '') , notes_assessment = json.get('a_notes_assessment', '') , min_temperature_assessment = json.get('a_min_temperature_assessment', None) , max_temperature_assessment = json.get('a_max_temperature_assessment', None) , get_all_assessment_type = json.get('a_get_all_assessment_type', False) , get_inactive_assessment_type = json.get('a_get_inactive_assessment_type', False) , ids_assessment_type = json.get('a_ids_assessment_type', '') , names_assessment_type = json.get('a_names_assessment_type', '') , get_all_weather = json.get('a_get_all_weather', False) , get_inactive_weather = json.get('a_get_inactive_weather', False) , ids_weather = json.get('a_ids_weather', '') , names_weather = json.get('a_names_weather', '') , get_all_lighting_level = json.get('a_get_all_lighting_level', False) , get_inactive_lighting_level = json.get('a_get_inactive_lighting_level', False) , ids_lighting_level = json.get('a_ids_lighting_level', '') , names_lighting_level = json.get('a_names_lighting_level', '') , get_all_location = json.get('a_get_all_location', False) , get_inactive_location = json.get('a_get_inactive_location', False) , ids_location = json.get('a_ids_location', '') , names_location = json.get('a_names_location', '') , get_all_user_handler = json.get('a_get_all_user_handler', False) , get_inactive_user_handler = json.get('a_get_inactive_user_handler', False) , ids_user_handler = json.get('a_ids_user_handler', '') # , auth0_ids_user_handler = json.get('a_ids_user_handler', '') , names_user_handler = json.get('a_names_user_handler', '') , emails_user_handler = json.get('a_emails_user_handler', '') , get_all_command_category = json.get('a_get_all_command_category', False) , get_inactive_command_category = json.get('a_get_inactive_command_category', False) , ids_command_category = json.get('a_ids_command_category', '') , names_command_category = json.get('a_names_command_category', '') , get_all_command = json.get('a_get_all_command', False) , get_inactive_command = json.get('a_get_inactive_command', False) , ids_command = json.get('a_ids_command', '') , names_command = json.get('a_names_command', '') , hand_signal_default_descriptions_command = json.get('a_hand_signal_default_descriptions_command', '') , notes_command = json.get('a_notes_command', '') , get_all_reinforcement_schedule = json.get('a_get_all_reinforcement_schedule', False) , get_inactive_reinforcement_schedule = json.get('a_get_inactive_reinforcement_schedule', False) , ids_reinforcement_schedule = json.get('a_ids_reinforcement_schedule', '') , names_reinforcement_schedule = json.get('a_names_reinforcement_schedule', '') , require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True) , require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True) , require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False) , require_any_non_id_search_filters_met = json.get('a_require_any_non_id_search_filters_met', True) ) """ @classmethod def from_form_filters_distraction(cls, form): _m = f'{cls.__qualname__}.from_form_filters_distraction' Helper_App.console_log(_m) Helper_App.console_log(f'Filters: {form}') av.val_instance(form, 'form', _m, Filters_Distraction) has_filter_search_text = not (form.search.data == '' or form.search.data is None) has_filter_distraction_type = not (form.id_distraction_type.data == '0' or form.id_distraction_type.data == '' or form.id_distraction_type.data is None) has_filter_intensity_level_emotional = not (form.id_intensity_level_emotional.data == '0' or form.id_intensity_level_emotional.data == '' or form.id_intensity_level_emotional.data is None) has_filter_intensity_level_scent = not (form.id_intensity_level_scent.data == '0' or form.id_intensity_level_scent.data == '' or form.id_intensity_level_scent.data is None) has_filter_intensity_level_sight = not (form.id_intensity_level_sight.data == '0' or form.id_intensity_level_sight.data == '' or form.id_intensity_level_sight.data is None) has_filter_intensity_level_sound = not (form.id_intensity_level_sound.data == '0' or form.id_intensity_level_sound.data == '' or form.id_intensity_level_sound.data is None) has_filter_intensity_level_touch = not (form.id_intensity_level_touch.data == '0' or form.id_intensity_level_touch.data == '' or form.id_intensity_level_touch.data is None) has_filter_assessment = not (form.id_assessment.data == '0' or form.id_assessment.data == '' or form.id_assessment.data is None) has_filter_weather = not (form.id_weather.data == '0' or form.id_weather.data == '' or form.id_weather.data is None) has_filter_lighting_level = not (form.id_lighting_level.data == '0' or form.id_lighting_level.data == '' or form.id_lighting_level.data is None) has_filter_location = not (form.id_location.data == '0' or form.id_location.data == '' or form.id_location.data is None) has_filter_user_handler = not (form.id_user_handler.data == '0' or form.id_user_handler.data == '' or form.id_user_handler.data is None) active_only = av.input_bool(form.active_only.data, "active", _m) Helper_App.console_log(f''' has_filter_search_text: {has_filter_search_text} has_filter_distraction_type: {has_filter_distraction_type} has_filter_intensity_level_emotional: {has_filter_intensity_level_emotional} has_filter_intensity_level_scent: {has_filter_intensity_level_scent} has_filter_intensity_level_sight: {has_filter_intensity_level_sight} has_filter_intensity_level_sound: {has_filter_intensity_level_sound} has_filter_intensity_level_touch: {has_filter_intensity_level_touch} has_filter_assessment: {has_filter_assessment} has_filter_weather: {has_filter_weather} has_filter_lighting_level: {has_filter_lighting_level} has_filter_location: {has_filter_location} has_filter_user_handler: {has_filter_user_handler} active_only: {active_only} ''') filters = cls.get_default() filters.get_all_distraction = True filters.get_inactive_distraction = not active_only filters.ids_distraction = '' filters.notes_distraction = form.search.data if has_filter_search_text else '' filters.get_all_distraction_type = True filters.get_inactive_distraction_type = not active_only filters.ids_distraction_type = form.id_distraction_type.data if has_filter_distraction_type else '' filters.names_distraction_type = form.search.data if has_filter_search_text else '' filters.get_all_distraction_intensity_level_emotional = True filters.get_inactive_distraction_intensity_level_emotional = not active_only filters.ids_distraction_intensity_level_emotional = form.id_intensity_level_emotional.data if has_filter_intensity_level_emotional else '' filters.names_distraction_intensity_level_emotional = form.search.data if has_filter_search_text else '' filters.get_all_distraction_intensity_level_scent = True filters.get_inactive_distraction_intensity_level_scent = not active_only filters.ids_distraction_intensity_level_scent = form.id_intensity_level_scent.data if has_filter_intensity_level_scent else '' filters.names_distraction_intensity_level_scent = form.search.data if has_filter_search_text else '' filters.get_all_distraction_intensity_level_sight = True filters.get_inactive_distraction_intensity_level_sight = not active_only filters.ids_distraction_intensity_level_sight = form.id_intensity_level_sight.data if has_filter_intensity_level_sight else '' filters.names_distraction_intensity_level_sight = form.search.data if has_filter_search_text else '' filters.get_all_distraction_intensity_level_sound = True filters.get_inactive_distraction_intensity_level_sound = not active_only filters.ids_distraction_intensity_level_sound = form.id_intensity_level_sound.data if has_filter_intensity_level_sound else '' filters.names_distraction_intensity_level_sound = form.search.data if has_filter_search_text else '' filters.get_all_distraction_intensity_level_touch = True filters.get_inactive_distraction_intensity_level_touch = not active_only filters.ids_distraction_intensity_level_touch = form.id_intensity_level_touch.data if has_filter_intensity_level_touch else '' filters.names_distraction_intensity_level_touch = form.search.data if has_filter_search_text else '' filters.get_all_assessment = True filters.get_inactive_assessment = not active_only filters.ids_assessment = form.id_assessment.data if has_filter_assessment else '' filters.get_all_weather = not has_filter_weather filters.get_inactive_weather = not active_only filters.ids_weather = form.id_weather.data if has_filter_weather else '' filters.names_weather = form.search.data if has_filter_search_text else '' filters.get_all_lighting_level = not has_filter_lighting_level filters.get_inactive_lighting_level = not active_only filters.ids_lighting_level = form.id_lighting_level.data if has_filter_lighting_level else '' filters.names_lighting_level = form.search.data if has_filter_search_text else '' filters.get_all_location = not has_filter_location filters.get_inactive_location = not active_only filters.ids_location = form.id_location.data if has_filter_location else '' filters.names_location = form.search.data if has_filter_search_text else '' filters.get_all_user_handler = not has_filter_user_handler filters.get_inactive_user_handler = not active_only filters.ids_user_handler = form.id_user_handler.data if has_filter_user_handler else '' # filters.auth0_ids_user_handler = form.id_user_handler.data if has_filter_user_handler else '' filters.names_user_handler = form.search.data if has_filter_search_text else '' filters.emails_user_handler = form.search.data if has_filter_search_text else '' return filters """ @classmethod def from_form_filters_assessment(cls, form): _m = f'{cls.__qualname__}.from_form_filters_assessment' Helper_App.console_log(_m) Helper_App.console_log(f'Filters: {form}') av.val_instance(form, 'form', _m, Filters_Assessment) has_filter_search_text = not (form.search.data == '' or form.search.data is None) has_filter_distraction_type = False has_filter_intensity_level_emotional = False has_filter_intensity_level_scent = False has_filter_intensity_level_sight = False has_filter_intensity_level_sound = False has_filter_intensity_level_touch = False has_filter_assessment = not (form.id_assessment.data == '0' or form.id_assessment.data == '' or form.id_assessment.data is None) active_only = av.input_bool(form.active_only.data, "active", _m) Helper_App.console_log(f''' has_filter_search_text: {has_filter_search_text} has_filter_distraction_type: {has_filter_distraction_type} has_filter_intensity_level_emotional: {has_filter_intensity_level_emotional} has_filter_intensity_level_scent: {has_filter_intensity_level_scent} has_filter_intensity_level_sight: {has_filter_intensity_level_sight} has_filter_intensity_level_sound: {has_filter_intensity_level_sound} has_filter_intensity_level_touch: {has_filter_intensity_level_touch} has_filter_assessment: {has_filter_assessment} active_only: {active_only} ''') filters = cls.get_default() filters.get_all_distraction = True filters.get_inactive_distraction = not active_only filters.ids_distraction = '' filters.notes_distraction = form.search.data if has_filter_search_text else '' filters.get_all_distraction_type = True filters.get_inactive_distraction_type = not active_only filters.ids_distraction_type = '' filters.names_distraction_type = form.search.data if has_filter_search_text else '' filters.get_all_distraction_intensity_level_emotional = True filters.get_inactive_distraction_intensity_level_emotional = not active_only filters.ids_distraction_intensity_level_emotional = '' filters.names_distraction_intensity_level_emotional = form.search.data if has_filter_search_text else '' filters.get_all_distraction_intensity_level_scent = True filters.get_inactive_distraction_intensity_level_scent = not active_only filters.ids_distraction_intensity_level_scent = '' filters.names_distraction_intensity_level_scent = form.search.data if has_filter_search_text else '' filters.get_all_distraction_intensity_level_sight = True filters.get_inactive_distraction_intensity_level_sight = not active_only filters.ids_distraction_intensity_level_sight = '' filters.names_distraction_intensity_level_sight = form.search.data if has_filter_search_text else '' filters.get_all_distraction_intensity_level_sound = True filters.get_inactive_distraction_intensity_level_sound = not active_only filters.ids_distraction_intensity_level_sound = '' filters.names_distraction_intensity_level_sound = form.search.data if has_filter_search_text else '' filters.get_all_distraction_intensity_level_touch = True filters.get_inactive_distraction_intensity_level_touch = not active_only filters.ids_distraction_intensity_level_touch = '' filters.names_distraction_intensity_level_touch = form.search.data if has_filter_search_text else '' filters.get_all_assessment = True filters.get_inactive_assessment = not active_only filters.ids_assessment = form.id_assessment.data if has_filter_assessment else '' return filters def to_json(self): return { 'a_get_all_distraction': self.get_all_distraction , 'a_get_inactive_distraction': self.get_inactive_distraction , 'a_ids_distraction': self.ids_distraction , 'a_notes_distraction': self.notes_distraction , 'a_min_quantity_distraction': self.min_quantity_distraction , 'a_max_quantity_distraction': self.max_quantity_distraction , 'a_min_proximity_metres_distraction': self.min_proximity_metres_distraction , 'a_max_proximity_metres_distraction': self.max_proximity_metres_distraction , 'a_get_all_distraction_type': self.get_all_distraction_type , 'a_get_inactive_distraction_type': self.get_inactive_distraction_type , 'a_ids_distraction_type': self.ids_distraction_type , 'a_names_distraction_type': self.names_distraction_type , 'a_get_all_distraction_intensity_level_emotional': self.get_all_distraction_intensity_level_emotional , 'a_get_inactive_distraction_intensity_level_emotional': self.get_inactive_distraction_intensity_level_emotional , 'a_ids_distraction_intensity_level_emotional': self.ids_distraction_intensity_level_emotional , 'a_names_distraction_intensity_level_emotional': self.names_distraction_intensity_level_emotional , 'a_get_all_distraction_intensity_level_scent': self.get_all_distraction_intensity_level_scent , 'a_get_inactive_distraction_intensity_level_scent': self.get_inactive_distraction_intensity_level_scent , 'a_ids_distraction_intensity_level_scent': self.ids_distraction_intensity_level_scent , 'a_names_distraction_intensity_level_scent': self.names_distraction_intensity_level_scent , 'a_get_all_distraction_intensity_level_sight': self.get_all_distraction_intensity_level_sight , 'a_get_inactive_distraction_intensity_level_sight': self.get_inactive_distraction_intensity_level_sight , 'a_ids_distraction_intensity_level_sight': self.ids_distraction_intensity_level_sight , 'a_names_distraction_intensity_level_sight': self.names_distraction_intensity_level_sight , 'a_get_all_distraction_intensity_level_sound': self.get_all_distraction_intensity_level_sound , 'a_get_inactive_distraction_intensity_level_sound': self.get_inactive_distraction_intensity_level_sound , 'a_ids_distraction_intensity_level_sound': self.ids_distraction_intensity_level_sound , 'a_names_distraction_intensity_level_sound': self.names_distraction_intensity_level_sound , 'a_get_all_distraction_intensity_level_touch': self.get_all_distraction_intensity_level_touch , 'a_get_inactive_distraction_intensity_level_touch': self.get_inactive_distraction_intensity_level_touch , 'a_ids_distraction_intensity_level_touch': self.ids_distraction_intensity_level_touch , 'a_names_distraction_intensity_level_touch': self.names_distraction_intensity_level_touch , 'a_get_all_AC_link': self.get_all_AC_link , 'a_get_inactive_AC_link': self.get_inactive_AC_link , 'a_ids_AC_link': self.ids_AC_link , 'a_min_distance_from_handler_metres_AC_link': self.min_distance_from_handler_metres_AC_link , 'a_max_distance_from_handler_metres_AC_link': self.max_distance_from_handler_metres_AC_link , 'a_value_is_in_sight_of_handler_AC_link': self.value_is_in_sight_of_handler_AC_link , 'a_value_is_in_scent_range_of_handler_AC_link': self.value_is_in_scent_range_of_handler_AC_link , 'a_value_is_in_hearing_range_of_handler_AC_link': self.value_is_in_hearing_range_of_handler_AC_link , 'a_value_is_on_lead_AC_link': self.value_is_on_lead_AC_link , 'a_min_trial_count_AC_link': self.min_trial_count_AC_link , 'a_max_trial_count_AC_link': self.max_trial_count_AC_link , 'a_get_all_assessment': self.get_all_assessment , 'a_get_inactive_assessment': self.get_inactive_assessment , 'a_ids_assessment': self.ids_assessment , 'a_notes_assessment': self.notes_assessment , 'a_min_temperature_assessment': self.min_temperature_assessment , 'a_max_temperature_assessment': self.max_temperature_assessment , 'a_get_all_assessment_type': self.get_all_assessment_type , 'a_get_inactive_assessment_type': self.get_inactive_assessment_type , 'a_ids_assessment_type': self.ids_assessment_type , 'a_names_assessment_type': self.names_assessment_type , 'get_all_weather': self.get_all_weather , 'get_inactive_weather': self.get_inactive_weather , 'ids_weather': self.ids_weather , 'names_weather': self.names_weather , 'get_all_lighting_level': self.get_all_lighting_level , 'get_inactive_lighting_level': self.get_inactive_lighting_level , 'ids_lighting_level': self.ids_lighting_level , 'names_lighting_level': self.names_lighting_level , 'get_all_location': self.get_all_location , 'get_inactive_location': self.get_inactive_location , 'ids_location': self.ids_location , 'names_location': self.names_location , 'get_all_user_handler': self.get_all_user_handler , 'get_inactive_user_handler': self.get_inactive_user_handler , 'ids_user_handler': self.ids_user_handler #, 'auth0_ids_user_handler': self.ids_user_handler , 'names_user_handler': self.names_user_handler , 'emails_user_handler': self.emails_user_handler , 'a_get_all_command_category': self.get_all_command_category , 'a_get_inactive_command_category': self.get_inactive_command_category , 'a_ids_command_category': self.ids_command_category , 'a_names_command_category': self.names_command_category , 'a_get_all_command': self.get_all_command , 'a_get_inactive_command': self.get_inactive_command , 'a_ids_command': self.ids_command , 'a_names_command': self.names_command , 'a_hand_signal_default_descriptions_command': self.hand_signal_default_descriptions_command , 'a_notes_command': self.notes_command , 'a_get_all_reinforcement_schedule': self.get_all_reinforcement_schedule , 'a_get_inactive_reinforcement_schedule': self.get_inactive_reinforcement_schedule , 'a_ids_reinforcement_schedule': self.ids_reinforcement_schedule , 'a_names_reinforcement_schedule': self.names_reinforcement_schedule , 'a_require_all_id_search_filters_met': self.require_all_id_search_filters_met , 'a_require_any_id_search_filters_met': self.require_any_id_search_filters_met , 'a_require_all_non_id_search_filters_met': self.require_all_non_id_search_filters_met , 'a_require_any_non_id_search_filters_met': self.require_any_non_id_search_filters_met }