Feat(SQL, UI): Button Icons page, Command Button Links page created with get and set functionality.

This commit is contained in:
2025-07-17 18:58:06 +01:00
parent e0805ec2ed
commit 4e214c3bde
151 changed files with 12224 additions and 463 deletions

View File

@@ -18,12 +18,18 @@ Base data model for views
# internal
# from routes import bp_home
from business_objects.base import Base
from business_objects.dog.user import User
from business_objects.file_type import File_Type
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.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.location import Location
from business_objects.dog.user import User
from datastores.datastore_base import DataStore_Base
from datastores.datastore_dog import DataStore_Dog
from datastores.datastore_user import DataStore_User
@@ -38,10 +44,16 @@ from typing import ClassVar
class Model_View_Base(BaseModel, ABC):
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_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_LOCATION: ClassVar[str] = Location.ATTR_ID_LOCATION
ATTR_TEXT_COLLAPSED: ClassVar[str] = 'textCollapsed'
ATTR_TEXT_EXPANDED: ClassVar[str] = 'textExpanded'
@@ -78,8 +90,10 @@ class Model_View_Base(BaseModel, ABC):
FLAG_BOOL_FALSE: ClassVar[str] = 'false'
FLAG_BOOL_TRUE: ClassVar[str] = 'true'
FLAG_BUTTON: ClassVar[str] = 'button'
FLAG_BUTTON_ICON: ClassVar[str] = Button_Icon.FLAG_BUTTON_ICON
FLAG_BUTTON_LIGHT: ClassVar[str] = 'button-light'
FLAG_BUTTON_PRIMARY: ClassVar[str] = 'button-primary'
FLAG_BUTTON_SHAPE: ClassVar[str] = Button_Shape.FLAG_BUTTON_SHAPE
FLAG_CANCEL: ClassVar[str] = 'button-cancel'
FLAG_CALLBACK: ClassVar[str] = 'callback'
FLAG_CAPTCHA: ClassVar[str] = 'captcha'
@@ -88,7 +102,9 @@ class Model_View_Base(BaseModel, ABC):
FLAG_CLOSE_TEMPORARY_ELEMENT: ClassVar[str] = 'button-temporary-element-close'
FLAG_CODE: ClassVar[str] = Base.FLAG_CODE
FLAG_COLLAPSIBLE: ClassVar[str] = 'collapsible'
FLAG_COLOUR: ClassVar[str] = Colour.FLAG_COLOUR
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_COLUMN: ClassVar[str] = 'column'
FLAG_COMMENT: ClassVar[str] = 'comment'
@@ -135,11 +151,15 @@ 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_BUTTON_ICONS: ClassVar[str] = 'navDogButtonIcons'
FLAG_NAV_DOG_COLOURS: ClassVar[str] = 'navDogColours'
FLAG_NAV_DOG_COMMAND_BUTTON_LINKS: ClassVar[str] = 'navDogCommandButtonLinks'
FLAG_NAV_DOG_COMMAND_CATEGORIES: ClassVar[str] = 'navDogCommandCategories'
FLAG_NAV_DOG_COMMANDS: ClassVar[str] = 'navDogCommands'
FLAG_NAV_DOG_DOGS: ClassVar[str] = 'navDogDogs'
FLAG_NAV_DOG_DOG_COMMAND_LINKS: ClassVar[str] = 'navDogDogCommandLinks'
FLAG_NAV_DOG_HOME: ClassVar[str] = 'navDogHome'
FLAG_NAV_DOG_LOCATIONS: ClassVar[str] = 'navDogLocations'
FLAG_NAV_HOME: ClassVar[str] = 'navHome'
FLAG_NAV_USER_ACCOUNT: ClassVar[str] = 'navUserAccount'
FLAG_NAV_USER_ADMIN: ClassVar[str] = 'navUserAdmin'
@@ -170,6 +190,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_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'
HASH_PAGE_DOG_COMMANDS: ClassVar[str] = '/dog/commands'
HASH_PAGE_DOG_DOG_COMMAND_LINKS: ClassVar[str] = '/dog/dog-command-links'
@@ -183,7 +205,10 @@ 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_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'
HASH_SAVE_DOG_COMMAND_BUTTON_LINK: ClassVar[str] = '/dog/save-command-button-link'
HASH_SAVE_DOG_COMMAND_CATEGORY: ClassVar[str] = '/dog/save-command-category'
HASH_SAVE_DOG_DOG_COMMAND_LINK: ClassVar[str] = '/dog/save-dog-command-link'
HASH_SAVE_DOG_LOCATION: ClassVar[str] = '/dog/save-location'

View File

@@ -0,0 +1,53 @@
"""
Project: PARTS Website
Author: Edward Middleton-Smith
Precision And Research Technology Systems Limited
Technology: View Models
Feature: Dog Button_Icons View Model
Description:
Data model for dog button_icons view
"""
# internal
from business_objects.dog.button_icon import Button_Icon, Parameters_Button_Icon
from datastores.datastore_dog import DataStore_Dog
from models.model_view_dog_base import Model_View_Dog_Base
from forms.dog.button_icon import Filters_Button_Icon
# 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
class Model_View_Dog_Button_Icon(Model_View_Dog_Base):
button_icons: list = None
form_filters: Filters_Button_Icon = None
form_filters_old: Filters_Button_Icon
@property
def title(self):
return 'Button Icon'
def __init__(self, form_filters_old, hash_page_current=Model_View_Dog_Base.HASH_PAGE_DOG_BUTTON_ICONS):
_m = 'Model_View_Dog_Button_Icon.__init__'
Helper_App.console_log(f'{_m}\nstarting...')
super().__init__(hash_page_current=hash_page_current, form_filters_old=form_filters_old)
self.form_filters = form_filters_old
datastore = DataStore_Dog()
Helper_App.console_log(f'Form filters: {self.form_filters}')
parameters_filter_button_icon = Parameters_Button_Icon.from_form_filters_button_icon(self.form_filters)
Helper_App.console_log(f'Query args: {parameters_filter_button_icon}')
self.button_icons, errors = datastore.get_many_button_icon(parameters_filter_button_icon)
"""
@classmethod
def save_categories(cls, comment, list_categories):
_m = f'{cls.__name__}.save_categories'
return DataStore_Store_Product_Category().save_categories(comment, list_categories)
"""

View File

@@ -0,0 +1,90 @@
"""
Project: PARTS Website
Author: Edward Middleton-Smith
Precision And Research Technology Systems Limited
Technology: View Models
Feature: Dog Dog Command Link View Model
Description:
Data model for dog dog command links view
"""
# internal
from business_objects.dog.button_icon import Button_Icon, Parameters_Button_Icon
from business_objects.dog.button_shape import Button_Shape, Parameters_Button_Shape
from business_objects.dog.colour import Colour, Parameters_Colour
from business_objects.dog.command import Command, Parameters_Command
from business_objects.dog.dog import Dog, Parameters_Dog
from business_objects.dog.command_button_link import Command_Button_Link, Parameters_Command_Button_Link
from business_objects.dog.location import Location, Parameters_Location
from business_objects.dog.obedience_level import Obedience_Level
from datastores.datastore_dog import DataStore_Dog
from models.model_view_dog_base import Model_View_Dog_Base
from forms.dog.command_button_link import Filters_Command_Button_Link
# 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
from operator import attrgetter
class Model_View_Dog_Command_Button_Link(Model_View_Dog_Base):
filter_command_categories: list = None
filter_commands: list = None
filter_button_shapes: list = None
filter_colours: list = None
filter_button_icons: list = None
filter_locations: list = None
command_button_links: list = None
form_filters: Filters_Command_Button_Link = None
form_filters_old: Filters_Command_Button_Link
@property
def title(self):
return 'Command Button Link'
def __init__(self, form_filters_old, hash_page_current=Model_View_Dog_Base.HASH_PAGE_DOG_COMMAND_BUTTON_LINKS):
_m = 'Model_View_Dog_Command_Button_Link.__init__'
Helper_App.console_log(f'{_m}\nstarting...')
super().__init__(hash_page_current=hash_page_current, form_filters_old=form_filters_old)
self.form_filters = form_filters_old
datastore = DataStore_Dog()
parameters_filter_command = Parameters_Command.get_default()
self.filter_command_categories, self.filter_commands, errors = datastore.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_button_shape = Parameters_Button_Shape.get_default()
self.filter_button_shapes, errors = datastore.get_many_button_shape(parameters_filter_button_shape)
if len(self.filter_button_shapes) > 0:
self.form_filters.id_button_shape.choices += [(str(button_shape.id_button_shape), button_shape.name) for button_shape in self.filter_button_shapes]
parameters_filter_colour = Parameters_Colour.get_default()
self.filter_colours, errors = datastore.get_many_colour(parameters_filter_colour)
if len(self.filter_colours) > 0:
self.form_filters.id_colour.choices += [(str(colour.id_colour), colour.name) for colour in self.filter_colours]
parameters_filter_button_icon = Parameters_Button_Icon.get_default()
self.filter_button_icons, errors = datastore.get_many_button_icon(parameters_filter_button_icon)
if len(self.filter_button_icons) > 0:
self.form_filters.id_button_icon.choices += [(str(button_icon.id_button_icon), button_icon.name) for button_icon in self.filter_button_icons]
parameters_filter_location = Parameters_Location.get_default()
self.filter_locations, errors = datastore.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]
Helper_App.console_log(f'Form filters: {self.form_filters}')
parameters_command_button_link = Parameters_Command_Button_Link.from_form_filters_command_button_link(self.form_filters)
Helper_App.console_log(f'Query args: {parameters_command_button_link}')
self.command_button_links, errors = datastore.get_many_command_button_link(parameters_command_button_link)

View File

@@ -24,9 +24,6 @@ from pydantic import BaseModel
from typing import ClassVar
class Model_View_Dog_Location(Model_View_Dog_Base):
FLAG_CAN_HAVE_BUTTON: ClassVar[str] = Location.FLAG_CAN_HAVE_BUTTON
FLAG_HAND_SIGNAL_DEFAULT_DESCRIPTION: ClassVar[str] = Location.FLAG_HAND_SIGNAL_DEFAULT_DESCRIPTION
filter_location_categories: list = None
locations: list = None
form_filters: Filters_Location = None
form_filters_old: Filters_Location
@@ -42,14 +39,10 @@ class Model_View_Dog_Location(Model_View_Dog_Base):
self.form_filters = form_filters_old
datastore = DataStore_Dog()
parameters_filter_location = Parameters_Location.get_default()
self.filter_location_categories, filter_locations, errors = datastore.get_many_location(parameters_filter_location)
self.form_filters.id_location_category.choices += [(str(location_category.id_location_category), location_category.name) for location_category in self.filter_location_categories]
Helper_App.console_log(f'Form filters: {self.form_filters}')
parameters_filter_location = Parameters_Location.from_form_filters_location(self.form_filters)
Helper_App.console_log(f'Query args: {parameters_filter_location}')
location_categories, self.locations, errors = datastore.get_many_location(parameters_filter_location)
self.locations, errors = datastore.get_many_location(parameters_filter_location)
"""