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:
2025-07-24 16:48:18 +01:00
parent 6bb3a77a34
commit fad5336cc4
137 changed files with 10442 additions and 1116 deletions

View File

@@ -19,17 +19,29 @@ Base data model for views
# from routes import bp_home
from business_objects.base import Base
from business_objects.file_type import File_Type
from business_objects.dog.assessment import Assessment
from business_objects.dog.assessment_command_modality_link import Assessment_Command_Modality_Link
from business_objects.dog.assessment_response import Assessment_Response
from business_objects.dog.bribe import Bribe
from business_objects.dog.button_icon import Button_Icon
from business_objects.dog.button_shape import Button_Shape
from business_objects.dog.colour import Colour
from business_objects.dog.command import Command
from business_objects.dog.command_button_link import Command_Button_Link
from business_objects.dog.command_category import Command_Category
from business_objects.dog.command_modality import Command_Modality
from business_objects.dog.distraction import Distraction
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 business_objects.dog.dog_command_link import Dog_Command_Link
from business_objects.dog.image import Image
from business_objects.dog.lighting_level import Lighting_Level
from business_objects.dog.location import Location
from business_objects.dog.obedience_level import Obedience_Level
from business_objects.dog.response_quality_metric import Response_Quality_Metric
from business_objects.dog.user import User
from business_objects.dog.weather import Weather
from datastores.datastore_base import DataStore_Base
from datastores.datastore_dog import DataStore_Dog
from datastores.datastore_user import DataStore_User
@@ -44,17 +56,27 @@ from typing import ClassVar
class Model_View_Base(BaseModel, ABC):
ATTR_ID_ASSESSMENT: ClassVar[str] = Assessment.ATTR_ID_ASSESSMENT
ATTR_ID_ASSESSMENT_COMMAND_MODALITY_LINK: ClassVar[str] = Assessment_Command_Modality_Link.ATTR_ID_ASSESSMENT_COMMAND_MODALITY_LINK
ATTR_ID_ASSESSMENT_RESPONSE: ClassVar[str] = Assessment_Response.ATTR_ID_ASSESSMENT_RESPONSE
ATTR_ID_BRIBE: ClassVar[str] = Bribe.ATTR_ID_BRIBE
ATTR_ID_BUTTON_ICON: ClassVar[str] = Button_Icon.ATTR_ID_BUTTON_ICON
ATTR_ID_BUTTON_SHAPE: ClassVar[str] = Button_Shape.ATTR_ID_BUTTON_SHAPE
ATTR_ID_COLOUR: ClassVar[str] = Colour.ATTR_ID_COLOUR
ATTR_ID_COMMAND: ClassVar[str] = Command.ATTR_ID_COMMAND
ATTR_ID_COMMAND_BUTTON_LINK: ClassVar[str] = Command_Button_Link.ATTR_ID_COMMAND_BUTTON_LINK
ATTR_ID_COMMAND_CATEGORY: ClassVar[str] = Command_Category.ATTR_ID_COMMAND_CATEGORY
ATTR_ID_COMMAND_MODALITY: ClassVar[str] = Command_Modality.ATTR_ID_COMMAND_MODALITY
ATTR_ID_DISTRACTION: ClassVar[str] = Distraction.ATTR_ID_DISTRACTION
ATTR_ID_DISTRACTION_INTENSITY_LEVEL: ClassVar[str] = Distraction_Intensity_Level.ATTR_ID_DISTRACTION_INTENSITY_LEVEL
ATTR_ID_DISTRACTION_TYPE: ClassVar[str] = Distraction_Type.ATTR_ID_DISTRACTION_TYPE
ATTR_ID_DOG: ClassVar[str] = Dog.ATTR_ID_DOG
ATTR_ID_DOG_COMMAND_LINK: ClassVar[str] = Dog_Command_Link.ATTR_ID_DOG_COMMAND_LINK
ATTR_ID_FILE_TYPE: ClassVar[str] = File_Type.ATTR_ID_FILE_TYPE
ATTR_ID_IMAGE: ClassVar[str] = Image.ATTR_ID_IMAGE
ATTR_ID_LIGHTING_LEVEL: ClassVar[str] = Lighting_Level.ATTR_ID_LIGHTING_LEVEL
ATTR_ID_LOCATION: ClassVar[str] = Location.ATTR_ID_LOCATION
ATTR_ID_WEATHER: ClassVar[str] = Weather.ATTR_ID_WEATHER
ATTR_TEXT_COLLAPSED: ClassVar[str] = 'textCollapsed'
ATTR_TEXT_EXPANDED: ClassVar[str] = 'textExpanded'
ATTR_VALUE_CURRENT: ClassVar[str] = 'current-value'
@@ -87,8 +109,12 @@ class Model_View_Base(BaseModel, ABC):
FLAG_ACTIVE_ONLY: ClassVar[str] = Base.FLAG_ACTIVE_ONLY
FLAG_ADD: ClassVar[str] = 'add'
# FLAG_ADD_DELETE: ClassVar[str] = 'add-delete'
FLAG_ASSESSMENT: ClassVar[str] = Assessment.FLAG_ASSESSMENT
FLAG_ASSESSMENT_COMMAND_MODALITY_LINK: ClassVar[str] = Assessment_Command_Modality_Link.FLAG_ASSESSMENT_COMMAND_MODALITY_LINK
FLAG_ASSESSMENT_RESPONSE: ClassVar[str] = Assessment_Response.FLAG_ASSESSMENT_RESPONSE
FLAG_BOOL_FALSE: ClassVar[str] = 'false'
FLAG_BOOL_TRUE: ClassVar[str] = 'true'
FLAG_BRIBE: ClassVar[str] = Bribe.FLAG_BRIBE
FLAG_BUTTON: ClassVar[str] = 'button'
FLAG_BUTTON_ICON: ClassVar[str] = Button_Icon.FLAG_BUTTON_ICON
FLAG_BUTTON_LIGHT: ClassVar[str] = 'button-light'
@@ -106,6 +132,7 @@ class Model_View_Base(BaseModel, ABC):
FLAG_COMMAND: ClassVar[str] = Command.FLAG_COMMAND
FLAG_COMMAND_BUTTON_LINK: ClassVar[str] = Command_Button_Link.FLAG_COMMAND_BUTTON_LINK
FLAG_COMMAND_CATEGORY: ClassVar[str] = Command_Category.FLAG_COMMAND_CATEGORY
FLAG_COMMAND_MODALITY: ClassVar[str] = Command_Modality.FLAG_COMMAND_MODALITY
FLAG_COLUMN: ClassVar[str] = 'column'
FLAG_COMMENT: ClassVar[str] = 'comment'
FLAG_CONTAINER: ClassVar[str] = 'container'
@@ -118,6 +145,9 @@ class Model_View_Base(BaseModel, ABC):
FLAG_DDL_PREVIEW: ClassVar[str] = "ddl-preview"
FLAG_DELETE: ClassVar[str] = 'delete'
FLAG_DESCRIPTION: ClassVar[str] = Base.FLAG_DESCRIPTION
FLAG_DISTRACTION: ClassVar[str] = Distraction.FLAG_DISTRACTION
FLAG_DISTRACTION_INTENSITY_LEVEL: ClassVar[str] = Distraction_Intensity_Level.FLAG_DISTRACTION_INTENSITY_LEVEL
FLAG_DISTRACTION_TYPE: ClassVar[str] = Distraction_Type.FLAG_DISTRACTION_TYPE
FLAG_DETAIL: ClassVar[str] = 'detail'
FLAG_DIALOG: ClassVar[str] = 'dialog'
FLAG_DIRTY: ClassVar[str] = 'dirty'
@@ -139,6 +169,7 @@ class Model_View_Base(BaseModel, ABC):
FLAG_IS_CHECKED: ClassVar[str] = 'is_checked'
FLAG_IS_COLLAPSED: ClassVar[str] = 'is_collapsed'
FLAG_LEFT_HAND_STUB: ClassVar[str] = 'lhs'
FLAG_LIGHTING_LEVEL: ClassVar[str] = Lighting_Level.FLAG_LIGHTING_LEVEL
FLAG_LOCATION: ClassVar[str] = Location.FLAG_LOCATION
FLAG_LOCATION_PARENT: ClassVar[str] = Location.FLAG_LOCATION_PARENT
FLAG_LOGO: ClassVar[str] = 'logo'
@@ -151,6 +182,8 @@ class Model_View_Base(BaseModel, ABC):
# FLAG_NAME_SINGULAR: ClassVar[str] = Base.FLAG_NAME_SINGULAR
FLAG_NAV_ADMIN_HOME: ClassVar[str] = 'navAdminHome'
FLAG_NAV_CONTACT: ClassVar[str] = 'navContact'
FLAG_NAV_DOG_ASSESSMENT: ClassVar[str] = 'navDogAssessment'
FLAG_NAV_DOG_ASSESSMENTS: ClassVar[str] = 'navDogAssessments'
FLAG_NAV_DOG_BUTTON_ICONS: ClassVar[str] = 'navDogButtonIcons'
FLAG_NAV_DOG_COLOURS: ClassVar[str] = 'navDogColours'
FLAG_NAV_DOG_COMMAND_BUTTON_LINKS: ClassVar[str] = 'navDogCommandButtonLinks'
@@ -166,8 +199,11 @@ class Model_View_Base(BaseModel, ABC):
FLAG_NAV_USER_LOGIN: ClassVar[str] = 'navUserLogin'
FLAG_NAV_USER_LOGOUT: ClassVar[str] = 'navUserLogout'
FLAG_NOTES: ClassVar[str] = "notes"
FLAG_OBEDIENCE_LEVEL: ClassVar[str] = Obedience_Level.FLAG_OBEDIENCE_LEVEL
FLAG_OVERLAY: ClassVar[str] = 'overlay'
FLAG_PAGE_BODY: ClassVar[str] = 'page-body'
FLAG_QUANTITY: ClassVar[str] = 'quantity'
FLAG_RESPONSE_QUALITY_METRIC: ClassVar[str] = Response_Quality_Metric.FLAG_RESPONSE_QUALITY_METRIC
FLAG_RIGHT_HAND_SIDE: ClassVar[str] = 'rhs'
FLAG_ROW: ClassVar[str] = 'row'
FLAG_ROW_NEW: ClassVar[str] = 'row-new'
@@ -179,8 +215,10 @@ class Model_View_Base(BaseModel, ABC):
FLAG_STATUS: ClassVar[str] = 'status'
FLAG_SUBMIT: ClassVar[str] = 'submit'
FLAG_SUCCESS: ClassVar[str] = 'success'
FLAG_TABLE_MAIN: ClassVar[str] = 'table-main'
FLAG_TEMPORARY_ELEMENT: ClassVar[str] = 'temporary-element'
FLAG_USER: ClassVar[str] = User.FLAG_USER
FLAG_WEATHER: ClassVar[str] = Weather.FLAG_WEATHER
FLAG_WEBSITE: ClassVar[str] = Base.FLAG_WEBSITE
HASH_GET_ALTCHA_CHALLENGE: ClassVar[str] = '/altcha/create-challenge'
HASH_GET_DOG_SCRIPTS_SHARED: ClassVar[str] = '/dog/scripts-shared'
@@ -190,6 +228,8 @@ class Model_View_Base(BaseModel, ABC):
HASH_PAGE_CONTACT: ClassVar[str] = '/contact'
HASH_PAGE_CONTACT_SUCCESS: ClassVar[str] = '/contact-success'
HASH_PAGE_DATA_RETENTION_SCHEDULE: ClassVar[str] = '/retention-schedule'
HASH_PAGE_DOG_ASSESSMENT: ClassVar[str] = '/dog/assessment'
HASH_PAGE_DOG_ASSESSMENTS: ClassVar[str] = '/dog/assessments'
HASH_PAGE_DOG_BUTTON_ICONS: ClassVar[str] = '/dog/button-icons'
HASH_PAGE_DOG_COMMAND_BUTTON_LINKS: ClassVar[str] = '/dog/command-button-links'
HASH_PAGE_DOG_COMMAND_CATEGORIES: ClassVar[str] = '/dog/command-categories'
@@ -205,6 +245,7 @@ class Model_View_Base(BaseModel, ABC):
HASH_PAGE_USER_ACCOUNT: ClassVar[str] = '/user'
HASH_PAGE_USER_LOGIN: ClassVar[str] = '/login'
HASH_PAGE_USER_LOGOUT: ClassVar[str] = '/logout'
HASH_SAVE_DOG_ASSESSMENT: ClassVar[str] = '/dog/save-assessment'
HASH_SAVE_DOG_BUTTON_ICON: ClassVar[str] = '/dog/save-button-icon'
HASH_SAVE_DOG_COLOUR: ClassVar[str] = '/dog/save-colour'
HASH_SAVE_DOG_COMMAND: ClassVar[str] = '/dog/save-command'
@@ -234,6 +275,7 @@ class Model_View_Base(BaseModel, ABC):
URL_GITHUB: ClassVar[str] = 'https://github.com/Teddy-1024'
URL_LINKEDIN: ClassVar[str] = 'https://uk.linkedin.com/in/teddyms'
_title: str
hash_page_current: str
app: Flask = None
session: None = None
@@ -245,10 +287,12 @@ class Model_View_Base(BaseModel, ABC):
model_config = ConfigDict(arbitrary_types_allowed=True)
@property
@abstractmethod
# @abstractmethod
def title(self):
pass
if self._title is None:
raise NotImplementedError("Model Title required.")
return self._title
def __init__(self, hash_page_current, **kwargs):
BaseModel.__init__(self, hash_page_current=hash_page_current, **kwargs)
self.app = current_app