Feat(SQL, UI): 1. Calc and Get Many Stored Procedures created for Weather, Lighting Level, Assessment, Distraction Type, Distraction Intensity Level, Distraction, Bribe, Assessment Command Modality Link, Response Quality Metric, Obedience Level, and Assessment Response. \n 2. Assessments and Assessment pages created with data loading and hooked up, but not saving.
This commit is contained in:
205
models/model_view_dog_assessment.py
Normal file
205
models/model_view_dog_assessment.py
Normal file
@@ -0,0 +1,205 @@
|
||||
"""
|
||||
Project: PARTS Website
|
||||
Author: Edward Middleton-Smith
|
||||
Precision And Research Technology Systems Limited
|
||||
|
||||
Technology: View Models
|
||||
Feature: Dog Assessments View Model
|
||||
|
||||
Description:
|
||||
Data model for dog assessments view
|
||||
"""
|
||||
|
||||
# internal
|
||||
from business_objects.dog.assessment import Assessment, Parameters_Assessment
|
||||
from business_objects.dog.assessment_command_modality_link import Assessment_Command_Modality_Link, Parameters_Assessment_Command_Modality_Link
|
||||
from business_objects.dog.assessment_response import Assessment_Response, Parameters_Assessment_Response
|
||||
from business_objects.dog.bribe import Bribe, Parameters_Bribe
|
||||
from business_objects.dog.command import Command, Parameters_Command
|
||||
from business_objects.dog.command_category import Command_Category
|
||||
from business_objects.dog.command_modality import Command_Modality, Parameters_Command_Modality
|
||||
from business_objects.dog.distraction import Distraction, Parameters_Distraction
|
||||
from business_objects.dog.distraction_intensity_level import Distraction_Intensity_Level, Parameters_Distraction_Intensity_Level
|
||||
from business_objects.dog.distraction_type import Distraction_Type, Parameters_Distraction_Type
|
||||
from business_objects.dog.lighting_level import Lighting_Level, Parameters_Lighting_Level
|
||||
from business_objects.dog.location import Location, Parameters_Location
|
||||
from business_objects.dog.obedience_level import Obedience_Level, Parameters_Obedience_Level
|
||||
from business_objects.dog.response_quality_metric import Response_Quality_Metric, Parameters_Response_Quality_Metric
|
||||
from business_objects.dog.user import User, Parameters_User
|
||||
from business_objects.dog.weather import Weather, Parameters_Weather
|
||||
from datastores.datastore_dog import DataStore_Dog
|
||||
from datastores.datastore_user import DataStore_User
|
||||
from models.model_view_dog_base import Model_View_Dog_Base
|
||||
from forms.dog.assessment import Filters_Assessment
|
||||
# from routes import bp_home
|
||||
from helpers.helper_app import Helper_App
|
||||
import lib.argument_validation as av
|
||||
|
||||
# external
|
||||
from pydantic import BaseModel
|
||||
from typing import ClassVar, Optional
|
||||
from operator import attrgetter
|
||||
|
||||
class Model_View_Dog_Assessment(Model_View_Dog_Base):
|
||||
FLAG_DISTANCE_FROM_HANDLER: ClassVar[str] = Assessment_Command_Modality_Link.FLAG_DISTANCE_FROM_HANDLER
|
||||
FLAG_DISTRACTION_INTENSITY_LEVEL_EMOTIONAL: ClassVar[str] = Distraction.FLAG_DISTRACTION_INTENSITY_LEVEL_EMOTIONAL
|
||||
FLAG_DISTRACTION_INTENSITY_LEVEL_SCENT: ClassVar[str] = Distraction.FLAG_DISTRACTION_INTENSITY_LEVEL_SCENT
|
||||
FLAG_DISTRACTION_INTENSITY_LEVEL_SIGHT: ClassVar[str] = Distraction.FLAG_DISTRACTION_INTENSITY_LEVEL_SIGHT
|
||||
FLAG_DISTRACTION_INTENSITY_LEVEL_SOUND: ClassVar[str] = Distraction.FLAG_DISTRACTION_INTENSITY_LEVEL_SOUND
|
||||
FLAG_DISTRACTION_INTENSITY_LEVEL_TOUCH: ClassVar[str] = Distraction.FLAG_DISTRACTION_INTENSITY_LEVEL_TOUCH
|
||||
FLAG_IS_IN_HEARING_RANGE_OF_HANDLER: ClassVar[str] = Assessment_Command_Modality_Link.FLAG_IS_IN_HEARING_RANGE_OF_HANDLER
|
||||
FLAG_IS_IN_SCENT_RANGE_OF_HANDLER: ClassVar[str] = Assessment_Command_Modality_Link.FLAG_IS_IN_SCENT_RANGE_OF_HANDLER
|
||||
FLAG_IS_IN_SIGHT_OF_HANDLER: ClassVar[str] = Assessment_Command_Modality_Link.FLAG_IS_IN_SIGHT_OF_HANDLER
|
||||
FLAG_IS_ON_LEAD: ClassVar[str] = Assessment_Command_Modality_Link.FLAG_IS_ON_LEAD
|
||||
FLAG_PROXIMITY_METRES: ClassVar[str] = Distraction.FLAG_PROXIMITY_METRES
|
||||
FLAG_TEMPERATURE_CELCIUS: ClassVar[str] = Assessment.FLAG_TEMPERATURE_CELCIUS
|
||||
FLAG_TRIAL_COUNT: ClassVar[str] = Assessment_Command_Modality_Link.FLAG_TRIAL_COUNT
|
||||
FLAG_USER_HANDLER: ClassVar[str] = Assessment.FLAG_USER_HANDLER
|
||||
FLAG_VALUE_MEASURED: ClassVar[str] = Assessment_Response.FLAG_VALUE_MEASURED
|
||||
ID_FORM_ASSESSMENT: ClassVar[str] = 'form_assessment'
|
||||
ID_FORM_ASSESSMENT_COMMAND_MODALITY_LINKS: ClassVar[str] = 'form_assessment_command_modality_links'
|
||||
ID_FORM_DISTRACTIONS: ClassVar[str] = 'form_distractions'
|
||||
ID_TABLE_ASSESSMENT: ClassVar[str] = 'table_assessment'
|
||||
ID_TABLE_ASSESSMENT_COMMAND_MODALITY_LINKS: ClassVar[str] = 'table_assessment_command_modality_links'
|
||||
ID_TABLE_ASSESSMENT_RESPONSES: ClassVar[str] = 'table_assessment_responses'
|
||||
ID_TABLE_DISTRACTIONS: ClassVar[str] = 'table_distractions'
|
||||
filter_bribes: list = None
|
||||
filter_command_categories: list = None
|
||||
filter_command_modalities: list = None
|
||||
filter_commands: list = None
|
||||
filter_distraction_intensity_levels: list = None
|
||||
filter_distraction_types: list = None
|
||||
filter_lighting_levels: list = None
|
||||
filter_locations: list = None
|
||||
filter_obedience_levels: list = None
|
||||
filter_response_quality_metrics: list = None
|
||||
filter_user_handlers: list = None
|
||||
filter_weathers: list = None
|
||||
assessments: list = None
|
||||
form_filters: Filters_Assessment = None
|
||||
form_filters_old: Filters_Assessment
|
||||
id_assessment: Optional[int]
|
||||
|
||||
def __init__(self, form_filters_old, id_assessment = None, hash_page_current=Model_View_Dog_Base.HASH_PAGE_DOG_ASSESSMENTS):
|
||||
_m = 'Model_View_Dog_Assessment.__init__'
|
||||
Helper_App.console_log(f'{_m}\nstarting...')
|
||||
super().__init__(hash_page_current=hash_page_current, form_filters_old=form_filters_old, id_assessment=id_assessment)
|
||||
self._title = 'Assessments'
|
||||
self.form_filters = form_filters_old
|
||||
datastore_dog = DataStore_Dog()
|
||||
datastore_user = DataStore_User()
|
||||
|
||||
# Assessments + filters
|
||||
parameters_filter_lighting_level = Parameters_Lighting_Level.get_default()
|
||||
self.filter_lighting_levels, errors = datastore_dog.get_many_lighting_level(parameters_filter_lighting_level)
|
||||
if len(self.filter_lighting_levels) > 0:
|
||||
self.form_filters.id_lighting_level.choices += [(str(lighting_level.id_lighting_level), lighting_level.name) for lighting_level in self.filter_lighting_levels]
|
||||
|
||||
parameters_filter_location = Parameters_Location.get_default()
|
||||
self.filter_locations, errors = datastore_dog.get_many_location(parameters_filter_location)
|
||||
if len(self.filter_locations) > 0:
|
||||
self.form_filters.id_location.choices += [(str(location.id_location), location.name) for location in self.filter_locations]
|
||||
|
||||
parameters_filter_user = Parameters_User.get_default()
|
||||
parameters_filter_user.id_user = self.user.id_user
|
||||
parameters_filter_user.get_all_user = True
|
||||
self.filter_user_handlers, errors = datastore_user.get_many_user(parameters_filter_user)
|
||||
if len(self.filter_user_handlers) > 0:
|
||||
self.form_filters.id_user_handler.choices += [(str(user.id_user), user.get_name()) for user in self.filter_user_handlers]
|
||||
|
||||
parameters_filter_weather = Parameters_Weather.get_default()
|
||||
self.filter_weathers, errors = datastore_dog.get_many_weather(parameters_filter_weather)
|
||||
if len(self.filter_weathers) > 0:
|
||||
self.form_filters.id_weather.choices += [(str(weather.id_weather), weather.name) for weather in self.filter_weathers]
|
||||
|
||||
Helper_App.console_log(f'Form filters: {self.form_filters}')
|
||||
parameters_filter_assessment = Parameters_Assessment.from_form_filters_assessment(self.form_filters)
|
||||
if self.id_assessment is not None:
|
||||
parameters_filter_assessment.ids_assessment = str(self.id_assessment)
|
||||
Helper_App.console_log(f'Query args: {parameters_filter_assessment}')
|
||||
self.assessments, errors = datastore_dog.get_many_assessment(parameters_filter_assessment)
|
||||
|
||||
# Distractions + filters
|
||||
parameters_filter_distraction_type = Parameters_Distraction_Type.get_default()
|
||||
self.filter_distraction_types, errors = datastore_dog.get_many_distraction_type(parameters_filter_distraction_type)
|
||||
"""
|
||||
if len(self.filter_distraction_types) > 0:
|
||||
self.form_filters.id_distraction_type.choices += [(str(distraction_type.id_type), distraction_type.name) for distraction_type in self.filter_distraction_types]
|
||||
"""
|
||||
|
||||
parameters_filter_distraction_intensity_level = Parameters_Distraction_Intensity_Level.get_default()
|
||||
self.filter_distraction_intensity_levels, errors = datastore_dog.get_many_distraction_intensity_level(parameters_filter_distraction_intensity_level)
|
||||
"""
|
||||
if len(self.filter_distraction_intensity_levels) > 0:
|
||||
self.form_filters.id_intensity_level.choices += [(str(distraction_intensity_level.id_intensity_level), distraction_intensity_level.name) for distraction_intensity_level in self.filter_distraction_intensity_levels]
|
||||
"""
|
||||
|
||||
parameters_filter_distraction = Parameters_Distraction.from_form_filters_assessment(self.form_filters)
|
||||
distractions, errors = datastore_dog.get_many_distraction(parameters_filter_distraction)
|
||||
|
||||
# Assessment Command Modality Links + filters
|
||||
parameters_filter_command = Parameters_Command.get_default()
|
||||
self.filter_command_categories, self.filter_commands, errors = datastore_dog.get_many_command(parameters_filter_command)
|
||||
"""
|
||||
if len(self.filter_command_categories) > 0:
|
||||
self.form_filters.id_command_category.choices += [(str(command_category.id_command_category), command_category.name) for command_category in self.filter_command_categories]
|
||||
if len(self.filter_commands) > 0:
|
||||
Helper_App.console_log(f'filter commands: {self.filter_commands}')
|
||||
sorted_filter_commands = self.filter_commands
|
||||
sorted_filter_commands.sort(key = attrgetter('name'))
|
||||
Helper_App.console_log(f'sorted filter commands: {sorted_filter_commands}')
|
||||
self.form_filters.id_command.choices += [(str(command.id_command), command.name) for command in sorted_filter_commands] # .sort(key = lambda command: command[1])
|
||||
"""
|
||||
|
||||
parameters_filter_command_modality = Parameters_Command_Modality.get_default()
|
||||
self.filter_command_modalities, errors = datastore_dog.get_many_command_modality(parameters_filter_command_modality)
|
||||
"""
|
||||
if len(self.filter_command_modalities) > 0:
|
||||
self.form_filters.id_command_modality.choices += [(str(command_modality.id_command_modality), command_modality.name) for command_modality in self.filter_command_modalities]
|
||||
"""
|
||||
|
||||
parameters_filter_bribe = Parameters_Bribe.get_default()
|
||||
self.filter_bribes, errors = datastore_dog.get_many_bribe(parameters_filter_bribe)
|
||||
"""
|
||||
if len(self.filter_bribes) > 0:
|
||||
self.form_filters.id_bribe.choices += [(str(bribe.id_bribe), bribe.name) for bribe in self.filter_bribes]
|
||||
"""
|
||||
|
||||
parameters_filter_assessment_command_modality_link = Parameters_Assessment_Command_Modality_Link.from_form_filters_assessment(self.form_filters)
|
||||
assessment_command_modality_links, errors = datastore_dog.get_many_assessment_command_modality_link(parameters_filter_assessment_command_modality_link)
|
||||
|
||||
# Assessment Responses and filters
|
||||
parameters_filter_response_quality_metric = Parameters_Response_Quality_Metric.get_default()
|
||||
self.filter_response_quality_metrics, errors = datastore_dog.get_many_response_quality_metric(parameters_filter_response_quality_metric)
|
||||
"""
|
||||
if len(self.filter_response_quality_metrics) > 0:
|
||||
self.form_filters.id_response_quality_metric.choices += [(str(response_quality_metric.id_response_quality_metric), response_quality_metric.name) for response_quality_metric in self.filter_response_quality_metrics]
|
||||
"""
|
||||
|
||||
parameters_filter_obedience_level = Parameters_Obedience_Level.get_default()
|
||||
self.filter_obedience_levels, errors = datastore_dog.get_many_obedience_level(parameters_filter_obedience_level)
|
||||
"""
|
||||
if len(self.filter_obedience_levels) > 0:
|
||||
self.form_filters.id_obedience_level.choices += [(str(obedience_level.id_obedience_level), obedience_level.name) for obedience_level in self.filter_obedience_levels]
|
||||
"""
|
||||
|
||||
parameters_filter_assessment_response = Parameters_Assessment_Response.from_form_filters_assessment(self.form_filters)
|
||||
assessment_responses, errors = datastore_dog.get_many_assessment_response(parameters_filter_assessment_response)
|
||||
|
||||
for index_link in range(len(assessment_command_modality_links)):
|
||||
link = assessment_command_modality_links[index_link]
|
||||
link.assessment_responses = [response for response in assessment_responses if response.id_assessment_command_modality_link == link.id_link]
|
||||
assessment_command_modality_links[index_link] = link
|
||||
|
||||
for index_assessment in range(len(self.assessments)):
|
||||
assessment = self.assessments[index_assessment]
|
||||
|
||||
assessment.distractions = [distraction for distraction in distractions if distraction.id_assessment == assessment.id_assessment]
|
||||
assessment.assessment_command_modality_links = [link for link in assessment_command_modality_links if link.id_assessment == assessment.id_assessment]
|
||||
|
||||
self.assessments[index_assessment] = assessment
|
||||
|
||||
Helper_App.console_log(f'Final assessments: {self.assessments}')
|
||||
test_assessments = Model_View_Dog_Assessment.convert_list_objects_to_dict_json_by_attribute_key_default(self.assessments)
|
||||
Helper_App.console_log(f'JSON assessments: {test_assessments}')
|
||||
|
||||
Reference in New Issue
Block a user