1.started removal of CDNs.\n 2. Improved modular structure for all parts of project including database.
This commit is contained in:
@@ -19,12 +19,12 @@ Base data model for views
|
||||
# from routes import bp_home
|
||||
import lib.argument_validation as av
|
||||
from forms import Form_Is_Included_VAT, Form_Delivery_Region, Form_Currency
|
||||
from datastores.datastore_store import DataStore_Store
|
||||
from datastores.datastore_user import DataStore_User
|
||||
from business_objects.user import User, User_Filters
|
||||
# external
|
||||
from abc import ABC, abstractmethod
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
from flask import Flask, session
|
||||
from flask import Flask, session, current_app
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
from typing import ClassVar
|
||||
|
||||
@@ -39,9 +39,9 @@ class Model_View_Base(BaseModel, ABC):
|
||||
ATTR_VALUE_PREVIOUS: ClassVar[str] = 'previous-value'
|
||||
FLAG_ACTIVE: ClassVar[str] = 'active'
|
||||
FLAG_ADD: ClassVar[str] = 'add'
|
||||
FLAG_BUTTON_CANCEL: ClassVar[str] = 'button-cancel'
|
||||
FLAG_BUTTON_MODAL_CLOSE: ClassVar[str] = 'button-overlay-close'
|
||||
FLAG_BUTTON_SUBMIT: ClassVar[str] = 'button-submit'
|
||||
FLAG_CANCEL: ClassVar[str] = 'button-cancel'
|
||||
# FLAG_CONTACT_US: ClassVar[str] = 'button-contact'
|
||||
FLAG_CLOSE_TEMPORARY_ELEMENT: ClassVar[str] = 'button-temporary-element-close'
|
||||
FLAG_CARD: ClassVar[str] = 'card'
|
||||
FLAG_COLLAPSED: ClassVar[str] = 'collapsed'
|
||||
FLAG_COLLAPSIBLE: ClassVar[str] = 'collapsible'
|
||||
@@ -50,31 +50,62 @@ class Model_View_Base(BaseModel, ABC):
|
||||
FLAG_CONTAINER_INPUT: ClassVar[str] = FLAG_CONTAINER + '-input'
|
||||
FLAG_DELETE: ClassVar[str] = 'delete'
|
||||
FLAG_DETAIL: ClassVar[str] = 'detail'
|
||||
FLAG_DIALOG: ClassVar[str] = 'dialog' # try <dialog> element
|
||||
FLAG_DIRTY: ClassVar[str] = 'dirty'
|
||||
FLAG_ERROR: ClassVar[str] = 'error'
|
||||
FLAG_EXPANDED: ClassVar[str] = 'expanded'
|
||||
FLAG_HAMBURGER: ClassVar[str] = 'hamburger'
|
||||
FLAG_IMAGE_LOGO: ClassVar[str] = 'image-logo'
|
||||
FLAG_INITIALISED: ClassVar[str] = 'initialised'
|
||||
FLAG_MODAL: ClassVar[str] = 'modal'
|
||||
FLAG_NAV_ADMIN_HOME: ClassVar[str] = 'navAdminHome'
|
||||
FLAG_NAV_ADMIN_STORE_STRIPE_PRICES: ClassVar[str] = 'navAdminStoreStripePrices'
|
||||
FLAG_NAV_ADMIN_STORE_STRIPE_PRODUCTS: ClassVar[str] = 'navAdminStoreStripeProducts'
|
||||
FLAG_NAV_CONTACT: ClassVar[str] = 'navContact'
|
||||
FLAG_NAV_HOME: ClassVar[str] = 'navHome'
|
||||
FLAG_NAV_SERVICES: ClassVar[str] = 'navServices'
|
||||
FLAG_NAV_STORE_HOME: ClassVar[str] = 'navStoreHome'
|
||||
FLAG_NAV_STORE_PRODUCTS: ClassVar[str] = 'navStoreProducts'
|
||||
FLAG_NAV_STORE_PRODUCT_CATEGORIES: ClassVar[str] = 'navStoreProductCategories'
|
||||
FLAG_NAV_STORE_PRODUCT_PERMUTATIONS: ClassVar[str] = 'navStoreProductPermutations'
|
||||
FLAG_NAV_STORE_PRODUCT_PRICES: ClassVar[str] = 'navStoreProductPrices'
|
||||
FLAG_NAV_STORE_PRODUCT_VARIATIONS: ClassVar[str] = 'navStoreProductVariations'
|
||||
FLAG_NAV_STORE_STOCK_ITEMS: ClassVar[str] = 'navStoreStockItems'
|
||||
FLAG_NAV_USER_ACCOUNT: ClassVar[str] = 'navUserAccount'
|
||||
FLAG_NAV_USER_ADMIN: ClassVar[str] = 'navUserAdmin'
|
||||
FLAG_NAV_USER_LOGIN: ClassVar[str] = 'navUserLogin'
|
||||
FLAG_NAV_USER_LOGOUT: ClassVar[str] = 'navUserLogout'
|
||||
FLAG_OVERLAY: ClassVar[str] = 'overlay'
|
||||
FLAG_TEMPORARY_ELEMENT: ClassVar[str] = 'temporary-element'
|
||||
FLAG_PAGE_BODY: ClassVar[str] = 'page-body'
|
||||
FLAG_ROW: ClassVar[str] = 'row'
|
||||
FLAG_ROW_NEW: ClassVar[str] = 'row-new'
|
||||
FLAG_SCROLLABLE: ClassVar[str] = 'scrollable'
|
||||
FLAG_SUBMIT: ClassVar[str] = 'submit'
|
||||
FLAG_SUBMITTED: ClassVar[str] = 'submitted'
|
||||
# flagIsDatePicker: ClassVar[str] = 'is-date-picker'
|
||||
HASH_APPLY_FILTERS_STORE_PRODUCT_PERMUTATION: ClassVar[str] = '/store/permutation_filter'
|
||||
HASH_CALLBACK_LOGIN: ClassVar[str] = '/callback-login'
|
||||
HASH_PAGE_ACCESSIBILITY_REPORT: ClassVar[str] = '/accessibility-report'
|
||||
HASH_PAGE_ACCESSIBILITY_STATEMENT: ClassVar[str] = '/accessibility-statement'
|
||||
HASH_PAGE_ADMIN: ClassVar[str] = '/admin'
|
||||
HASH_PAGE_ADMIN_HOME: ClassVar[str] = '/admin'
|
||||
HASH_PAGE_CONTACT: ClassVar[str] = '/contact'
|
||||
HASH_PAGE_ERROR_NO_PERMISSION: ClassVar[str] = '/error'
|
||||
HASH_PAGE_HOME: ClassVar[str] = '/'
|
||||
HASH_PAGE_LICENSE: ClassVar[str] = '/license'
|
||||
HASH_PAGE_PRIVACY_POLICY: ClassVar[str] = '/privacy-policy'
|
||||
HASH_PAGE_DATA_RETENTION_SCHEDULE: ClassVar[str] = '/retention-schedule'
|
||||
HASH_PAGE_SERVICES: ClassVar[str] = '/services'
|
||||
# HASH_PAGE_STORE_ADMIN: ClassVar[str] = '/store/admin'
|
||||
HASH_PAGE_STORE_BASKET: ClassVar[str] = '/store/basket'
|
||||
HASH_PAGE_STORE_HOME: ClassVar[str] = '/store'
|
||||
HASH_PAGE_STORE_PRODUCTS: ClassVar[str] = '/store/product'
|
||||
HASH_PAGE_STORE_PRODUCT_PERMUTATIONS: ClassVar[str] = '/store/permutation'
|
||||
HASH_PAGE_STORE_PRODUCT_CATEGORIES: ClassVar[str] = '/store/categories'
|
||||
HASH_PAGE_STORE_PRODUCTS: ClassVar[str] = '/store/products'
|
||||
HASH_PAGE_STORE_PRODUCT_PERMUTATIONS: ClassVar[str] = '/store/permutations'
|
||||
HASH_PAGE_STORE_PRODUCT_PRICES: ClassVar[str] = '/store/prices'
|
||||
HASH_PAGE_STORE_PRODUCT_VARIATIONS: ClassVar[str] = '/store/variations'
|
||||
HASH_PAGE_STORE_STOCK_ITEMS: ClassVar[str] = '/store/stock_items'
|
||||
HASH_PAGE_STORE_SUPPLIER: ClassVar[str] = '/store/supplier'
|
||||
HASH_PAGE_USER_ACCOUNT: ClassVar[str] = '/user'
|
||||
HASH_PAGE_USER_ADMIN: ClassVar[str] = '/user/admin'
|
||||
HASH_PAGE_USER_LOGIN: ClassVar[str] = '/login'
|
||||
@@ -92,19 +123,25 @@ class Model_View_Base(BaseModel, ABC):
|
||||
ID_LABEL_ERROR: ClassVar[str] = 'labelError'
|
||||
ID_MODAL_SERVICES: ClassVar[str] = 'modalServices'
|
||||
ID_MODAL_TECHNOLOGIES: ClassVar[str] = 'modalTechnologies'
|
||||
ID_NAV_ADMIN_HOME: ClassVar[str] = 'navAdminHome'
|
||||
ID_NAV_CONTACT: ClassVar[str] = 'navContact'
|
||||
ID_NAV_HOME: ClassVar[str] = 'navHome'
|
||||
ID_NAV_SERVICES: ClassVar[str] = 'navServices'
|
||||
ID_NAV_STORE_ADMIN: ClassVar[str] = 'navStoreAdmin'
|
||||
ID_NAV_STORE_HOME: ClassVar[str] = 'navStoreHome'
|
||||
ID_NAV_STORE_PERMUTATIONS: ClassVar[str] = 'navStorePermutations'
|
||||
ID_NAV_STORE_PRODUCT: ClassVar[str] = 'navStoreProduct'
|
||||
ID_NAV_STORE_STOCK_ITEMS: ClassVar[str] = 'navStoreStockItems'
|
||||
ID_NAV_USER_ACCOUNT: ClassVar[str] = 'navUserAccount'
|
||||
ID_NAV_USER_ADMIN: ClassVar[str] = 'navUserAdmin'
|
||||
ID_NAV_USER_LOGIN: ClassVar[str] = 'navUserLogin'
|
||||
ID_NAV_USER_LOGOUT: ClassVar[str] = 'navUserLogout'
|
||||
"""
|
||||
ID_BUTTON_NAV_ADMIN_HOME: ClassVar[str] = 'navAdminHome'
|
||||
ID_BUTTON_NAV_ADMIN_STORE_STRIPE_PRICE: ClassVar[str] = 'navAdminStoreStripePrice'
|
||||
ID_BUTTON_NAV_ADMIN_STORE_STRIPE_PRODUCT: ClassVar[str] = 'navAdminStoreStripeProduct'
|
||||
# ID_BUTTON_NAV_CONTACT: ClassVar[str] = 'navContact'
|
||||
ID_BUTTON_NAV_HOME: ClassVar[str] = 'navHome'
|
||||
ID_BUTTON_NAV_SERVICES: ClassVar[str] = 'navServices'
|
||||
ID_BUTTON_NAV_STORE_HOME: ClassVar[str] = 'navStoreHome'
|
||||
ID_BUTTON_NAV_STORE_PRODUCT: ClassVar[str] = 'navStoreProduct'
|
||||
ID_BUTTON_NAV_STORE_PRODUCT_CATEGORIES: ClassVar[str] = 'navStoreProductCategories'
|
||||
ID_BUTTON_NAV_STORE_PRODUCT_PERMUTATIONS: ClassVar[str] = 'navStoreProductPermutations'
|
||||
ID_BUTTON_NAV_STORE_PRODUCT_PRICES: ClassVar[str] = 'navStoreProductPrices'
|
||||
ID_BUTTON_NAV_STORE_PRODUCT_VARIATIONS: ClassVar[str] = 'navStoreProductVariations'
|
||||
ID_BUTTON_NAV_STORE_STOCK_ITEMS: ClassVar[str] = 'navStoreStockItems'
|
||||
ID_BUTTON_NAV_USER_ACCOUNT: ClassVar[str] = 'navUserAccount'
|
||||
ID_BUTTON_NAV_USER_ADMIN: ClassVar[str] = 'navUserAdmin'
|
||||
ID_BUTTON_NAV_USER_LOGIN: ClassVar[str] = 'navUserLogin'
|
||||
ID_BUTTON_NAV_USER_LOGOUT: ClassVar[str] = 'navUserLogout'
|
||||
"""
|
||||
ID_OVERLAY_CONFIRM: ClassVar[str] = 'overlayConfirm'
|
||||
ID_OVERLAY_HAMBURGER: ClassVar[str] = 'overlayHamburger'
|
||||
ID_PAGE_BODY: ClassVar[str] = 'pageBody'
|
||||
@@ -129,11 +166,12 @@ class Model_View_Base(BaseModel, ABC):
|
||||
form_delivery_region: Form_Delivery_Region
|
||||
form_currency: Form_Currency
|
||||
# app: Flask
|
||||
db: SQLAlchemy
|
||||
"""
|
||||
# """
|
||||
app: Flask
|
||||
db: SQLAlchemy
|
||||
hash_page_current: str
|
||||
# """
|
||||
app: Flask = None
|
||||
session: None = None
|
||||
is_page_store: bool = None
|
||||
is_user_logged_in: bool = None
|
||||
@@ -155,7 +193,7 @@ class Model_View_Base(BaseModel, ABC):
|
||||
av.val_instance(db, 'db', _m, SQLAlchemy, v_arg_type=v_arg_type)
|
||||
return super(Model_View_Base, cls).__new__(cls)
|
||||
"""
|
||||
def __init__(self, app, db, **kwargs):
|
||||
def __init__(self, hash_page_current, **kwargs):
|
||||
# Constructor
|
||||
"""
|
||||
_m = 'Model_View_Base.__init__'
|
||||
@@ -163,7 +201,7 @@ class Model_View_Base(BaseModel, ABC):
|
||||
print(f'{_m}\nstarting')
|
||||
av.val_instance(db, 'db', _m, SQLAlchemy, v_arg_type=v_arg_type)
|
||||
"""
|
||||
BaseModel.__init__(self, app=app, db=db, **kwargs)
|
||||
BaseModel.__init__(self, hash_page_current=hash_page_current, **kwargs)
|
||||
"""
|
||||
self.db = db
|
||||
self.session = session
|
||||
@@ -174,7 +212,8 @@ class Model_View_Base(BaseModel, ABC):
|
||||
self.id_user = info_user['sub'] if self.is_user_logged_in else ''
|
||||
self.app = app
|
||||
"""
|
||||
with app.app_context():
|
||||
self.app = current_app
|
||||
with self.app.app_context():
|
||||
self.session = session
|
||||
# self.form_is_included_VAT = Form_Is_Included_VAT()
|
||||
# self.form_delivery_region = Form_Delivery_Region()
|
||||
@@ -182,23 +221,23 @@ class Model_View_Base(BaseModel, ABC):
|
||||
self.is_page_store = False
|
||||
print(f'session: {self.session}')
|
||||
|
||||
datastore_store = DataStore_Store(self.app, self.db)
|
||||
user = datastore_store.get_user_session()
|
||||
datastore_user = DataStore_User()
|
||||
user = datastore_user.get_user_session()
|
||||
self.is_user_logged_in = user.is_logged_in
|
||||
|
||||
def output_bool(self, boolean):
|
||||
return str(boolean).lower()
|
||||
|
||||
def get_url_host(self):
|
||||
return self.app.config.URL_HOST
|
||||
return self.app.config['URL_HOST']
|
||||
|
||||
def get_user_session(self):
|
||||
datastore_store = DataStore_Store(self.app, self.db)
|
||||
return datastore_store.get_user_session()
|
||||
datastore_user = DataStore_User()
|
||||
return datastore_user.get_user_session()
|
||||
|
||||
"""
|
||||
def get_is_admin_store_user(self):
|
||||
datastore_store = DataStore_Store(self.app, self.db)
|
||||
datastore_store = DataStore_Store()
|
||||
user = datastore_store.get_user_session()
|
||||
if not user.is_logged_in: return False
|
||||
filters_user = User_Filters.from_user(user) # get_default(datastore_store)
|
||||
@@ -212,7 +251,7 @@ class Model_View_Base(BaseModel, ABC):
|
||||
return user.can_admin_store
|
||||
|
||||
def get_is_admin_user_user(self):
|
||||
datastore_store = DataStore_Store(self.app, self.db)
|
||||
datastore_store = DataStore_Store()
|
||||
user = datastore_store.get_user_session()
|
||||
if not user.is_logged_in: return False
|
||||
filters_user = User_Filters.from_user(user) # .get_default(datastore_store)
|
||||
|
||||
Reference in New Issue
Block a user