Feat: Architecture redesign for Assessments, Commands, Modalities, Training Techniques, Reinforcement Schedules, Distractions, and Assessment Responses.

This commit is contained in:
2025-09-06 12:13:16 +01:00
parent 12f5fc994f
commit 2da465935d
158 changed files with 14781 additions and 3477 deletions

View File

@@ -14,9 +14,12 @@ Datastore for Users
# from routes import bp_home
import lib.argument_validation as av
from business_objects.dog.assessment import Assessment, Assessment_Temp
from business_objects.dog.assessment_command_link import Assessment_Command_Link, Assessment_Command_Link_Temp
from business_objects.dog.assessment_command_modality_link import Assessment_Command_Modality_Link, Assessment_Command_Modality_Link_Temp
from business_objects.dog.assessment_command_technique_link import Assessment_Command_Technique_Link, Assessment_Command_Technique_Link_Temp
from business_objects.dog.assessment_response import Assessment_Response, Assessment_Response_Temp
from business_objects.dog.bribe import Bribe, Bribe_Temp
from business_objects.dog.assessment_type import Assessment_Type, Assessment_Type_Temp
# from business_objects.dog.bribe import Bribe, Bribe_Temp
from business_objects.dog.button_icon import Button_Icon, Button_Icon_Temp
from business_objects.dog.button_shape import Button_Shape, Button_Shape_Temp
from business_objects.dog.colour import Colour, Colour_Temp
@@ -32,7 +35,9 @@ from business_objects.dog.dog_command_link import Dog_Command_Link, Dog_Command_
from business_objects.dog.lighting_level import Lighting_Level, Lighting_Level_Temp
from business_objects.dog.location import Location, Location_Temp
from business_objects.dog.obedience_level import Obedience_Level, Obedience_Level_Temp
from business_objects.dog.reinforcement_schedule import Reinforcement_Schedule, Reinforcement_Schedule_Temp
from business_objects.dog.response_quality_metric import Response_Quality_Metric, Response_Quality_Metric_Temp
from business_objects.dog.training_technique import Training_Technique, Training_Technique_Temp
from business_objects.dog.weather import Weather, Weather_Temp
from business_objects.sql_error import SQL_Error
from datastores.datastore_base import DataStore_Base
@@ -673,6 +678,46 @@ class DataStore_Dog(DataStore_Base):
return errors
@classmethod
def get_many_assessment_type(cls, filters_assessment_type):
_m = f'{cls.__qualname__}.get_many_assessment_type'
user = cls.get_user_session()
argument_dict = {
'a_id_user': user.id_user
, **filters_assessment_type.to_json()
, 'a_debug': 0
}
Helper_App.console_log(f'argument_dict: {argument_dict}')
result = cls.db_procedure_execute('p_dog_get_many_assessment_type', argument_dict)
cursor = result.cursor
# Assessment_Types
result_set_1 = cursor.fetchall()
Helper_App.console_log(f'raw assessment_types: {result_set_1}')
assessment_types = []
assessment_type_indexes = {}
for row in result_set_1:
new_assessment_type = Assessment_Type.from_db_assessment_type(row)
assessment_type_indexes[new_assessment_type.id_type] = len(assessment_types)
assessment_types.append(new_assessment_type)
# Errors
cursor.nextset()
result_set_e = cursor.fetchall()
Helper_App.console_log(f'raw errors: {result_set_e}')
errors = []
if len(result_set_e) > 0:
errors = [SQL_Error.from_db_record(row) for row in result_set_e]
for error in errors:
Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
# cls.db_cursor_clear(cursor)
while cursor.nextset():
Helper_App.console_log(f'unexpected result set: {cursor.fetchall()}')
return assessment_types, errors
@classmethod
def get_many_assessment(cls, filters_assessment):
_m = f'{cls.__qualname__}.get_many_assessment'
@@ -1053,7 +1098,7 @@ class DataStore_Dog(DataStore_Base):
return command_modalities, errors
"""
@classmethod
def get_many_bribe(cls, filters_bribe):
_m = f'{cls.__qualname__}.get_many_bribe'
@@ -1092,6 +1137,176 @@ class DataStore_Dog(DataStore_Base):
Helper_App.console_log(f'unexpected result set: {cursor.fetchall()}')
return bribes, errors
"""
@classmethod
def get_many_assessment_command_link(cls, filters_assessment_command_link):
_m = f'{cls.__qualname__}.get_many_assessment_command_link'
user = cls.get_user_session()
argument_dict = {
'a_id_user': user.id_user
, **filters_assessment_command_link.to_json()
, 'a_debug': 0
}
Helper_App.console_log(f'argument_dict: {argument_dict}')
result = cls.db_procedure_execute('p_dog_get_many_assessment_command_link', argument_dict)
cursor = result.cursor
# Assessment_Command_Links
result_set_1 = cursor.fetchall()
Helper_App.console_log(f'raw assessment_command_links: {result_set_1}')
assessment_command_links = []
assessment_command_link_indexes = {}
for row in result_set_1:
new_assessment_command_link = Assessment_Command_Link.from_db_assessment_command_link(row)
assessment_command_link_indexes[new_assessment_command_link.id_link] = len(assessment_command_links)
assessment_command_links.append(new_assessment_command_link)
# Errors
cursor.nextset()
result_set_e = cursor.fetchall()
Helper_App.console_log(f'raw errors: {result_set_e}')
errors = []
if len(result_set_e) > 0:
errors = [SQL_Error.from_db_record(row) for row in result_set_e]
for error in errors:
Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
# cls.db_cursor_clear(cursor)
while cursor.nextset():
Helper_App.console_log(f'unexpected result set: {cursor.fetchall()}')
return assessment_command_links, errors
@classmethod
def save_assessment_command_links(cls, comment, assessment_command_links):
_m = f'{cls}.save_assessment_command_links'
av.val_str(comment, 'comment', _m)
guid = Helper_DB_MySQL.create_guid_str()
now = datetime.now()
user = cls.get_user_session()
Helper_App.console_log(f'saving assessment_command_links: {assessment_command_links}')
rows = []
for link in assessment_command_links:
row = Assessment_Command_Link_Temp.from_assessment_command_link(link)
row.guid = guid
rows.append(row)
Helper_App.console_log(f'rows: {rows}')
cls.upload_bulk(Assessment_Command_Link_Temp.__tablename__, rows, 1000)
Helper_App.console_log('assessment_command_links uploaded')
argument_dict_list = {
'a_comment': comment,
'a_guid': guid,
'a_id_user': user.id_user,
'a_debug': 0
}
result = cls.db_procedure_execute('p_dog_save_assessment_command_link', argument_dict_list)
Helper_App.console_log('Assessment_Command_Links saved')
# Errors
cursor = result.cursor
cursor.nextset()
result_set_e = cursor.fetchall()
Helper_App.console_log(f"Raw errors: {result_set_e}")
errors = []
if len(result_set_e) > 0:
errors = [SQL_Error.from_db_record(row) for row in result_set_e]
for error in errors:
Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
# cls.db_cursor_clear(cursor)
while cursor.nextset():
Helper_App.console_log(f'unexpected result set: {cursor.fetchall()}')
return errors
@classmethod
def get_many_reinforcement_schedule(cls, filters_reinforcement_schedule):
_m = f'{cls.__qualname__}.get_many_reinforcement_schedule'
user = cls.get_user_session()
argument_dict = {
'a_id_user': user.id_user
, **filters_reinforcement_schedule.to_json()
, 'a_debug': 0
}
Helper_App.console_log(f'argument_dict: {argument_dict}')
result = cls.db_procedure_execute('p_dog_get_many_reinforcement_schedule', argument_dict)
cursor = result.cursor
# Reinforcement_Schedules
result_set_1 = cursor.fetchall()
Helper_App.console_log(f'raw reinforcement_schedules: {result_set_1}')
reinforcement_schedules = []
reinforcement_schedule_indexes = {}
for row in result_set_1:
new_reinforcement_schedule = Reinforcement_Schedule.from_db_reinforcement_schedule(row)
reinforcement_schedule_indexes[new_reinforcement_schedule.id_reinforcement_schedule] = len(reinforcement_schedules)
reinforcement_schedules.append(new_reinforcement_schedule)
# Errors
cursor.nextset()
result_set_e = cursor.fetchall()
Helper_App.console_log(f'raw errors: {result_set_e}')
errors = []
if len(result_set_e) > 0:
errors = [SQL_Error.from_db_record(row) for row in result_set_e]
for error in errors:
Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
# cls.db_cursor_clear(cursor)
while cursor.nextset():
Helper_App.console_log(f'unexpected result set: {cursor.fetchall()}')
return reinforcement_schedules, errors
@classmethod
def get_many_training_technique(cls, filters_training_technique):
_m = f'{cls.__qualname__}.get_many_training_technique'
user = cls.get_user_session()
argument_dict = {
'a_id_user': user.id_user
, **filters_training_technique.to_json()
, 'a_debug': 0
}
Helper_App.console_log(f'argument_dict: {argument_dict}')
result = cls.db_procedure_execute('p_dog_get_many_training_technique', argument_dict)
cursor = result.cursor
# Training_Techniques
result_set_1 = cursor.fetchall()
Helper_App.console_log(f'raw training_techniques: {result_set_1}')
training_techniques = []
training_technique_indexes = {}
for row in result_set_1:
new_training_technique = Training_Technique.from_db_training_technique(row)
training_technique_indexes[new_training_technique.id_training_technique] = len(training_techniques)
training_techniques.append(new_training_technique)
# Errors
cursor.nextset()
result_set_e = cursor.fetchall()
Helper_App.console_log(f'raw errors: {result_set_e}')
errors = []
if len(result_set_e) > 0:
errors = [SQL_Error.from_db_record(row) for row in result_set_e]
for error in errors:
Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
# cls.db_cursor_clear(cursor)
while cursor.nextset():
Helper_App.console_log(f'unexpected result set: {cursor.fetchall()}')
return training_techniques, errors
@classmethod
@@ -1132,56 +1347,47 @@ class DataStore_Dog(DataStore_Base):
Helper_App.console_log(f'unexpected result set: {cursor.fetchall()}')
return assessment_command_modality_links, errors
@classmethod
def save_assessment_command_modality_links(cls, comment, assessment_command_modality_links):
_m = f'{cls}.save_assessment_command_modality_links'
av.val_str(comment, 'comment', _m)
guid = Helper_DB_MySQL.create_guid_str()
now = datetime.now()
def get_many_assessment_command_technique_link(cls, filters_assessment_command_technique_link):
_m = f'{cls.__qualname__}.get_many_assessment_command_technique_link'
user = cls.get_user_session()
Helper_App.console_log(f'saving assessment_command_modality_links: {assessment_command_modality_links}')
rows = []
for link in assessment_command_modality_links:
row = Assessment_Command_Modality_Link_Temp.from_assessment_command_modality_link(link)
row.guid = guid
rows.append(row)
Helper_App.console_log(f'rows: {rows}')
cls.upload_bulk(Assessment_Command_Modality_Link_Temp.__tablename__, rows, 1000)
Helper_App.console_log('assessment_command_modality_links uploaded')
argument_dict_list = {
'a_comment': comment,
'a_guid': guid,
'a_id_user': user.id_user,
'a_debug': 0
argument_dict = {
'a_id_user': user.id_user
, **filters_assessment_command_technique_link.to_json()
, 'a_debug': 0
}
result = cls.db_procedure_execute('p_dog_save_assessment_command_modality_link', argument_dict_list)
Helper_App.console_log('Assessment_Command_Modality_Links saved')
# Errors
Helper_App.console_log(f'argument_dict: {argument_dict}')
result = cls.db_procedure_execute('p_dog_get_many_assessment_command_technique_link', argument_dict)
cursor = result.cursor
# Assessment_Command_Technique_Links
result_set_1 = cursor.fetchall()
Helper_App.console_log(f'raw assessment_command_technique_links: {result_set_1}')
assessment_command_technique_links = []
assessment_command_technique_link_indexes = {}
for row in result_set_1:
new_assessment_command_technique_link = Assessment_Command_Technique_Link.from_db_assessment_command_technique_link(row)
assessment_command_technique_link_indexes[new_assessment_command_technique_link.id_link] = len(assessment_command_technique_links)
assessment_command_technique_links.append(new_assessment_command_technique_link)
# Errors
cursor.nextset()
result_set_e = cursor.fetchall()
Helper_App.console_log(f"Raw errors: {result_set_e}")
Helper_App.console_log(f'raw errors: {result_set_e}')
errors = []
if len(result_set_e) > 0:
errors = [SQL_Error.from_db_record(row) for row in result_set_e]
for error in errors:
Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
# cls.db_cursor_clear(cursor)
while cursor.nextset():
Helper_App.console_log(f'unexpected result set: {cursor.fetchall()}')
return errors
return assessment_command_technique_links, errors
@classmethod
@@ -1355,7 +1561,7 @@ class DataStore_Dog(DataStore_Base):
@classmethod
def save_assessments_distactions_and_responses(cls, comment, assessments, distractions, assessment_command_modality_links, assessment_responses):
def save_assessments_distactions_and_responses(cls, comment, assessments, distractions, assessment_command_links, assessment_responses):
_m = f'{cls}.save_assessments_distactions_and_responses'
av.val_str(comment, 'comment', _m)
@@ -1363,7 +1569,7 @@ class DataStore_Dog(DataStore_Base):
now = datetime.now()
user = cls.get_user_session()
Helper_App.console_log(f'saving assessments, distractions, and responses:\nAssessments: {assessments}\nDistractions: {distractions}\nAssessment Command Modality Links: {assessment_command_modality_links}\nResponses: {assessment_responses}')
Helper_App.console_log(f'saving assessments, distractions, and responses:\nAssessments: {assessments}\nDistractions: {distractions}\nAssessment Command Links: {assessment_command_links}\nResponses: {assessment_responses}')
rows_assessment = []
for assessment in assessments:
@@ -1384,12 +1590,12 @@ class DataStore_Dog(DataStore_Base):
Helper_App.console_log('distractions uploaded')
rows_link = []
for link in assessment_command_modality_links:
row = Assessment_Command_Modality_Link_Temp.from_assessment_command_modality_link(link)
for link in assessment_command_links:
row = Assessment_Command_Link_Temp.from_assessment_command_link(link)
row.guid = guid
rows_link.append(row)
Helper_App.console_log(f'rows_link: {rows_link}')
cls.upload_bulk(Assessment_Command_Modality_Link_Temp.__tablename__, rows_link, 1000)
cls.upload_bulk(Assessment_Command_Link_Temp.__tablename__, rows_link, 1000)
Helper_App.console_log('links uploaded')
rows_response = []