""" Project: PARTS Website Author: Edward Middleton-Smith Precision And Research Technology Systems Limited Technology: Business Objects Feature: Assessment_Command_Modality_Link Command Modality Link Business Object """ # internal from business_objects.base import Base from business_objects.dog.assessment import Assessment from business_objects.dog.assessment_command_link import Assessment_Command_Link # from business_objects.dog.bribe import Bribe from business_objects.dog.command import Command # from business_objects.dog.command_category import Command_Category from business_objects.db_base import SQLAlchemy_ABC, Get_Many_Parameters_Base from business_objects.dog.dog import Dog from business_objects.dog.command_modality import Command_Modality # from business_objects.dog.obedience_level import Obedience_Level from business_objects.dog.reinforcement_schedule import Reinforcement_Schedule from business_objects.dog.user import User from extensions import db from forms.dog.assessment import Filters_Assessment # from forms.dog.assessment_command_modality_link import Filters_Assessment_Command_Modality_Link from helpers.helper_app import Helper_App import lib.argument_validation as av # external from dataclasses import dataclass from typing import ClassVar, Optional class Assessment_Command_Modality_Link(SQLAlchemy_ABC, Base): ATTR_ID_ASSESSMENT_COMMAND_MODALITY_LINK: ClassVar[str] = 'id_link' FLAG_ASSESSMENT_COMMAND_MODALITY_LINK: ClassVar[str] = Assessment_Command_Link.FLAG_ASSESSMENT_COMMAND_MODALITY_LINK NAME_ATTR_OPTION_VALUE: ClassVar[str] = ATTR_ID_ASSESSMENT_COMMAND_MODALITY_LINK NAME_ATTR_OPTION_TEXT: ClassVar[str] = ATTR_ID_ASSESSMENT_COMMAND_MODALITY_LINK __tablename__ = 'DOG_Assessment_Command_Modality_Link' __table_args__ = { 'extend_existing': True } id_link = db.Column(db.Integer, primary_key=True) id_assessment_command_link = db.Column(db.Integer) id_command_modality = db.Column(db.Integer) active = db.Column(db.Boolean) created_on = db.Column(db.DateTime) def __init__(self): self.id_link = 0 self.is_new = False self.assessment_command_link = None self.command_modality = None super().__init__() @classmethod def from_db_assessment_command_modality_link(cls, query_row): _m = f'{cls.__qualname__}.from_db_assessment_command_modality_link' assessment_command_modality_link = cls() assessment_command_modality_link.id_link = query_row[0] assessment_command_modality_link.id_assessment_command_link = query_row[1] assessment_command_modality_link.id_command_modality = query_row[7] assessment_command_modality_link.active = av.input_bool(query_row[17], 'active', _m) assessment_command_modality_link.assessment_command_link = Assessment_Command_Link.from_db_assessment_command_modality_link(query_row) assessment_command_modality_link.command_modality = Command_Modality.from_db_assessment_command_modality_link(query_row) return assessment_command_modality_link @classmethod def from_db_assessment_response(cls, query_row): _m = f'{cls.__qualname__}.from_db_assessment_response' assessment_command_modality_link = cls() assessment_command_modality_link.id_link = query_row[1] return assessment_command_modality_link @classmethod def from_json(cls, json): _m = f'{cls.__qualname__}.from_json' assessment_command_modality_link = cls() if json is None: return assessment_command_modality_link assessment_command_modality_link.id_link = json.get(Assessment_Command_Modality_Link.ATTR_ID_ASSESSMENT_COMMAND_MODALITY_LINK, -1) assessment_command_modality_link.id_assessment_command_link = json[Assessment.ATTR_ID_ASSESSMENT_COMMAND_LINK] assessment_command_modality_link.id_command_modality = json[Command_Modality.ATTR_ID_COMMAND_MODALITY] assessment_command_modality_link.active = av.input_bool(json[cls.FLAG_ACTIVE], cls.FLAG_ACTIVE, _m) assessment_command_modality_link.created_on = json.get(cls.FLAG_CREATED_ON, None) return assessment_command_modality_link def to_json(self): as_json = { **self.get_shared_json_attributes(self) , self.ATTR_ID_ASSESSMENT_COMMAND_MODALITY_LINK: self.id_link , Assessment.ATTR_ID_ASSESSMENT_COMMAND_LINK: { Assessment.ATTR_ID_ASSESSMENT_COMMAND_LINK: None } if self.assessment_command_link is None else self.assessment_command_link.to_json() , Command_Modality.ATTR_ID_COMMAND_MODALITY: { Command_Modality.ATTR_ID_COMMAND_MODALITY: None } if self.command_modality is None else self.command_modality.to_json() , self.FLAG_ACTIVE: self.active , self.FLAG_CREATED_ON: self.created_on , self.FLAG_ASSESSMENT_RESPONSE: [] if self.assessment_responses is None else [response.to_json() for response in self.assessment_responses] } return as_json def __repr__(self): return f''' {self.__class__.__name__}( {self.FLAG_ASSESSMENT_COMMAND_MODALITY_LINK}: {self.id_link} {Assessment_Command_Link.FLAG_ASSESSMENT_COMMAND_LINK}: {self.assessment_command_link} {Command_Modality.FLAG_COMMAND_MODALITY}: {self.command_modality} {self.FLAG_ACTIVE}: {self.active} {self.FLAG_CREATED_ON}: {self.created_on} ) ''' # {Command_Category.FLAG_COMMAND_CATEGORY}: {self.id_command_category} class Assessment_Command_Modality_Link_Temp(db.Model, Base): __tablename__ = 'DOG_Assessment_Command_Modality_Link_Temp' __table_args__ = { 'extend_existing': True } id_temp = db.Column(db.Integer, primary_key=True) id_link = db.Column(db.Integer) id_assessment_command_link = db.Column(db.Integer) id_command_modality = db.Column(db.Integer) 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_assessment_command_modality_link(cls, assessment_command_modality_link): _m = f'{cls.__qualname__}.from_assessment_command_modality_link' temp = cls() temp.id_link = assessment_command_modality_link.id_link temp.id_assessment_command_link = assessment_command_modality_link.id_assessment_command_link temp.id_command_modality = assessment_command_modality_link.id_command_modality temp.active = assessment_command_modality_link.active # temp.created_on = assessment_command_modality_link.created_on return temp class Parameters_Assessment_Command_Modality_Link(Get_Many_Parameters_Base): get_all_link: bool get_inactive_link: bool ids_link: 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 get_all_command_modality: bool get_inactive_command_modality: bool ids_command_modality: str names_command_modality: 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_link = True , get_inactive_link = False , ids_link = '' , 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 = '' , get_all_command_modality = True , get_inactive_command_modality = False , ids_command_modality = '' , names_command_modality = '' , 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_link = json.get('a_get_all_link', False) , get_inactive_link = json.get('a_get_inactive_link', False) , ids_link = json.get('a_ids_link', '') , 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', '') , get_all_command_modality = json.get('a_get_all_command_modality', False) , get_inactive_command_modality = json.get('a_get_inactive_command_modality', False) , ids_command_modality = json.get('a_ids_command_modality', '') , names_command_modality = json.get('a_names_command_modality', '') , 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_assessment(cls, form): _m = f'{cls.__qualname__}.from_form_filters_assessment' av.val_instance(form, 'form', _m, Filters_Assessment) has_filter_search_text = not (form.search.data == '' or form.search.data is None) has_filter_assessment_type = not (form.id_assessment_type.data == '0' or form.id_assessment_type.data == '' or form.id_assessment_type.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) filters = cls.get_default() filters.get_all_assessment = True filters.get_inactive_assessment = not active_only filters.ids_assessment = '' filters.get_all_assessment_type = not has_filter_assessment_type filters.get_inactive_assessment_type = not active_only filters.ids_assessment_type = form.id_assessment_type if has_filter_assessment_type else '' filters.names_assessment_type = form.search.data if has_filter_search_text 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 def to_json(self): return { 'a_get_all_link': self.get_all_link , 'a_get_inactive_link': self.get_inactive_link , 'a_ids_link': self.ids_link , '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_get_all_command_modality': self.get_all_command_modality , 'a_get_inactive_command_modality': self.get_inactive_command_modality , 'a_ids_command_modality': self.ids_command_modality , 'a_names_command_modality': self.names_command_modality , '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 }