Feat: Assessment page completed with save method combining Assessment, Distraction, Assessment Command Modality Link, and Assessment Response save for creating new complete Assessnent.

This commit is contained in:
2025-07-28 22:41:38 +01:00
parent 1bbe6f0040
commit 574d60442a
122 changed files with 3261 additions and 1057 deletions

View File

@@ -33,7 +33,7 @@ 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.FLAG_ASSESSMENT_COMMAND_MODALITY_LINK
FLAG_ASSESSMENT_RESPONSE: ClassVar[str] = 'assessment_response'
FLAG_DISTANCE_FROM_HANDLER: ClassVar[str] = 'distance-from-handler'
FLAG_DISTANCE_FROM_HANDLER_METRES: ClassVar[str] = 'distance-from-handler-metres'
FLAG_IS_IN_HEARING_RANGE_OF_HANDLER: ClassVar[str] = 'is-in-hearing-range-of-handler'
FLAG_IS_IN_SCENT_RANGE_OF_HANDLER: ClassVar[str] = 'is-in-scent-range-of-handler'
FLAG_IS_IN_SIGHT_OF_HANDLER: ClassVar[str] = 'is-in-sight-of-handler'
@@ -50,7 +50,7 @@ class Assessment_Command_Modality_Link(SQLAlchemy_ABC, Base):
id_command = db.Column(db.Integer)
id_command_modality = db.Column(db.Integer)
id_bribe = db.Column(db.Integer)
distance_from_handler = db.Column(db.Float)
distance_from_handler_metres = db.Column(db.Float)
is_in_hearing_range_of_handler = db.Column(db.Boolean)
is_in_scent_range_of_handler = db.Column(db.Boolean)
is_in_sight_of_handler = db.Column(db.Boolean)
@@ -78,7 +78,7 @@ class Assessment_Command_Modality_Link(SQLAlchemy_ABC, Base):
assessment_command_modality_link.id_command = query_row[5]
assessment_command_modality_link.id_command_modality = query_row[7]
assessment_command_modality_link.id_bribe = query_row[9]
assessment_command_modality_link.distance_from_handler = query_row[11]
assessment_command_modality_link.distance_from_handler_metres = query_row[11]
assessment_command_modality_link.is_in_hearing_range_of_handler = av.input_bool(query_row[12], 'is_in_hearing_range_of_handler', _m)
assessment_command_modality_link.is_in_scent_range_of_handler = av.input_bool(query_row[13], 'is_in_scent_range_of_handler', _m)
assessment_command_modality_link.is_in_sight_of_handler = av.input_bool(query_row[14], 'is_in_sight_of_handler', _m)
@@ -104,22 +104,19 @@ class Assessment_Command_Modality_Link(SQLAlchemy_ABC, Base):
_m = f'{cls.__qualname__}.from_json'
assessment_command_modality_link = cls()
if json is None: return assessment_command_modality_link
# Helper_App.console_log(f'{_m}\njson: {json}')
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 = json[Assessment.ATTR_ID_ASSESSMENT]
assessment_command_modality_link.id_command = json[Command.ATTR_ID_COMMAND]
assessment_command_modality_link.id_command_modality = json[Command_Modality.ATTR_ID_COMMAND_MODALITY]
assessment_command_modality_link.id_bribe = json[Bribe.ATTR_ID_BRIBE]
assessment_command_modality_link.distance_from_handler = json[cls.FLAG_DISTANCE_FROM_HANDLER]
assessment_command_modality_link.is_in_hearing_range_of_handler = json[cls.FLAG_IS_IN_HEARING_RANGE_OF_HANDLER]
assessment_command_modality_link.is_in_scent_range_of_handler = json[cls.FLAG_IS_IN_SCENT_RANGE_OF_HANDLER]
assessment_command_modality_link.is_in_sight_of_handler = json[cls.FLAG_IS_IN_SIGHT_OF_HANDLER]
assessment_command_modality_link.is_on_lead = json[cls.FLAG_IS_ON_LEAD]
assessment_command_modality_link.trial_count = json[cls.FLAG_TRIAL_COUNT]
assessment_command_modality_link.active = json[cls.FLAG_ACTIVE]
assessment_command_modality_link.distance_from_handler_metres = json[cls.FLAG_DISTANCE_FROM_HANDLER_METRES]
assessment_command_modality_link.is_in_hearing_range_of_handler = av.input_bool(json[cls.FLAG_IS_IN_HEARING_RANGE_OF_HANDLER], cls.FLAG_IS_IN_HEARING_RANGE_OF_HANDLER, _m)
assessment_command_modality_link.is_in_scent_range_of_handler = av.input_bool(json[cls.FLAG_IS_IN_SCENT_RANGE_OF_HANDLER], cls.FLAG_IS_IN_SCENT_RANGE_OF_HANDLER, _m)
assessment_command_modality_link.is_in_sight_of_handler = av.input_bool(json[cls.FLAG_IS_IN_SIGHT_OF_HANDLER], cls.FLAG_IS_IN_SIGHT_OF_HANDLER, _m)
assessment_command_modality_link.is_on_lead = av.input_bool(json[cls.FLAG_IS_ON_LEAD], cls.FLAG_IS_ON_LEAD, _m)
assessment_command_modality_link.trial_count = json.get(cls.FLAG_TRIAL_COUNT)
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)
# assessment_command_modality_link.id_command_category = json[Command_Category.FLAG_COMMAND_CATEGORY]
# Helper_App.console_log(f'Dog Command Link: {assessment_command_modality_link}')
return assessment_command_modality_link
def to_json(self):
@@ -130,7 +127,7 @@ class Assessment_Command_Modality_Link(SQLAlchemy_ABC, Base):
, Command.ATTR_ID_COMMAND: { Command.ATTR_ID_COMMAND: None } if self.command is None else self.command.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()
, Bribe.FLAG_BRIBE: { Bribe.FLAG_BRIBE: None } if self.bribe is None else self.bribe.to_json()
, self.FLAG_DISTANCE_FROM_HANDLER: self.distance_from_handler
, self.FLAG_DISTANCE_FROM_HANDLER_METRES: self.distance_from_handler_metres
, self.FLAG_IS_IN_HEARING_RANGE_OF_HANDLER: self.is_in_hearing_range_of_handler
, self.FLAG_IS_IN_SCENT_RANGE_OF_HANDLER: self.is_in_scent_range_of_handler
, self.FLAG_IS_IN_SIGHT_OF_HANDLER: self.is_in_sight_of_handler
@@ -140,8 +137,6 @@ class Assessment_Command_Modality_Link(SQLAlchemy_ABC, Base):
, 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]
}
# , Command_Category.FLAG_COMMAND_CATEGORY: self.id_command_category
# Helper_App.console_log(f'as_json: {as_json}')
return as_json
def __repr__(self):
@@ -152,7 +147,7 @@ class Assessment_Command_Modality_Link(SQLAlchemy_ABC, Base):
{Command.FLAG_COMMAND}: {self.command}
{Command_Modality.FLAG_COMMAND_MODALITY}: {self.command_modality}
{Bribe.FLAG_BRIBE}: {self.bribe}
{self.FLAG_DISTANCE_FROM_HANDLER}: {self.distance_from_handler}
{self.FLAG_DISTANCE_FROM_HANDLER_METRES}: {self.distance_from_handler_metres}
{self.FLAG_IS_IN_HEARING_RANGE_OF_HANDLER}: {self.is_in_hearing_range_of_handler}
{self.FLAG_IS_IN_SCENT_RANGE_OF_HANDLER}: {self.is_in_scent_range_of_handler}
{self.FLAG_IS_IN_SIGHT_OF_HANDLER}: {self.is_in_sight_of_handler}
@@ -173,7 +168,7 @@ class Assessment_Command_Modality_Link_Temp(db.Model, Base):
id_command = db.Column(db.Integer)
id_command_modality = db.Column(db.Integer)
id_bribe = db.Column(db.Integer)
distance_from_handler = db.Column(db.Float)
distance_from_handler_metres = db.Column(db.Float)
is_in_hearing_range_of_handler = db.Column(db.Boolean)
is_in_scent_range_of_handler = db.Column(db.Boolean)
is_in_sight_of_handler = db.Column(db.Boolean)
@@ -195,7 +190,7 @@ class Assessment_Command_Modality_Link_Temp(db.Model, Base):
temp.id_command = assessment_command_modality_link.id_command
temp.id_command_modality = assessment_command_modality_link.id_command_modality
temp.id_bribe = assessment_command_modality_link.id_bribe
temp.distance_from_handler = assessment_command_modality_link.distance_from_handler
temp.distance_from_handler_metres = assessment_command_modality_link.distance_from_handler_metres
temp.is_in_hearing_range_of_handler = assessment_command_modality_link.is_in_hearing_range_of_handler
temp.is_in_scent_range_of_handler = assessment_command_modality_link.is_in_scent_range_of_handler
temp.is_in_sight_of_handler = assessment_command_modality_link.is_in_sight_of_handler
@@ -210,8 +205,8 @@ class Parameters_Assessment_Command_Modality_Link(Get_Many_Parameters_Base):
get_all_link: bool
get_inactive_link: bool
ids_link: str
min_distance_from_handler_link: Optional[float]
max_distance_from_handler_link: Optional[float]
min_distance_from_handler_metres_link: Optional[float]
max_distance_from_handler_metres_link: Optional[float]
value_is_in_sight_of_handler_link: Optional[bool]
value_is_in_scent_range_of_handler_link: Optional[bool]
value_is_in_hearing_range_of_handler_link: Optional[bool]
@@ -276,8 +271,8 @@ class Parameters_Assessment_Command_Modality_Link(Get_Many_Parameters_Base):
get_all_link = True
, get_inactive_link = False
, ids_link = ''
, min_distance_from_handler_link = None
, max_distance_from_handler_link = None
, min_distance_from_handler_metres_link = None
, max_distance_from_handler_metres_link = None
, value_is_in_sight_of_handler_link = None
, value_is_in_scent_range_of_handler_link = None
, value_is_in_hearing_range_of_handler_link = None
@@ -344,8 +339,8 @@ class Parameters_Assessment_Command_Modality_Link(Get_Many_Parameters_Base):
, get_inactive_link = json.get('a_get_inactive_link', False)
, ids_link = json.get('a_ids_link', '')
, notes_assessment_command_modality_link = json.get('a_notes_assessment_command_modality_link', '')
, min_distance_from_handler_link = json.get('a_min_distance_from_handler_link', None)
, max_distance_from_handler_link = json.get('a_max_distance_from_handler_link', None)
, min_distance_from_handler_metres_link = json.get('a_min_distance_from_handler_metres_link', None)
, max_distance_from_handler_metres_link = json.get('a_max_distance_from_handler_metres_link', None)
, value_is_in_sight_of_handler_link = json.get('a_value_is_in_sight_of_handler_link', None)
, value_is_in_scent_range_of_handler_link = json.get('a_value_is_in_scent_range_of_handler_link', None)
, value_is_in_hearing_range_of_handler_link = json.get('a_value_is_in_hearing_range_of_handler_link', None)
@@ -408,8 +403,6 @@ class Parameters_Assessment_Command_Modality_Link(Get_Many_Parameters_Base):
@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_assessment = not (form.id_assessment.data == '0' or form.id_assessment.data == '' or form.id_assessment.data is None)
@@ -417,14 +410,7 @@ class Parameters_Assessment_Command_Modality_Link(Get_Many_Parameters_Base):
has_filter_command_modality = False
has_filter_bribe = False
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_assessment: {has_filter_assessment}
has_filter_command: {has_filter_command}
has_filter_command_modality: {has_filter_command_modality}
has_filter_bribe: {has_filter_bribe}
active_only: {active_only}
''')
filters = cls.get_default()
filters.get_all_link = True
filters.get_inactive_link = not active_only
@@ -451,8 +437,8 @@ active_only: {active_only}
'a_get_all_link': self.get_all_link
, 'a_get_inactive_link': self.get_inactive_link
, 'a_ids_link': self.ids_link
, 'a_min_distance_from_handler_link': self.min_distance_from_handler_link
, 'a_max_distance_from_handler_link': self.max_distance_from_handler_link
, 'a_min_distance_from_handler_metres_link': self.min_distance_from_handler_metres_link
, 'a_max_distance_from_handler_metres_link': self.max_distance_from_handler_metres_link
, 'a_value_is_in_sight_of_handler_link': self.value_is_in_sight_of_handler_link
, 'a_value_is_in_scent_range_of_handler_link': self.value_is_in_scent_range_of_handler_link
, 'a_value_is_in_hearing_range_of_handler_link': self.value_is_in_hearing_range_of_handler_link