forked from FrederikBaerentsen/BrickTracker
feat(core): integrate individual items features with app configuration and versioning
This commit is contained in:
@@ -31,10 +31,13 @@ from bricktracker.views.admin.theme import admin_theme_page
|
|||||||
from bricktracker.views.data import data_page
|
from bricktracker.views.data import data_page
|
||||||
from bricktracker.views.error import error_404
|
from bricktracker.views.error import error_404
|
||||||
from bricktracker.views.index import index_page
|
from bricktracker.views.index import index_page
|
||||||
|
from bricktracker.views.individual_minifigure import individual_minifigure_page
|
||||||
|
from bricktracker.views.individual_part import individual_part_page
|
||||||
from bricktracker.views.instructions import instructions_page
|
from bricktracker.views.instructions import instructions_page
|
||||||
from bricktracker.views.login import login_page
|
from bricktracker.views.login import login_page
|
||||||
from bricktracker.views.minifigure import minifigure_page
|
from bricktracker.views.minifigure import minifigure_page
|
||||||
from bricktracker.views.part import part_page
|
from bricktracker.views.part import part_page
|
||||||
|
from bricktracker.views.purchase_location import purchase_location_page
|
||||||
from bricktracker.views.set import set_page
|
from bricktracker.views.set import set_page
|
||||||
from bricktracker.views.statistics import statistics_page
|
from bricktracker.views.statistics import statistics_page
|
||||||
from bricktracker.views.storage import storage_page
|
from bricktracker.views.storage import storage_page
|
||||||
@@ -138,10 +141,13 @@ def setup_app(app: Flask) -> None:
|
|||||||
app.register_blueprint(add_page)
|
app.register_blueprint(add_page)
|
||||||
app.register_blueprint(data_page)
|
app.register_blueprint(data_page)
|
||||||
app.register_blueprint(index_page)
|
app.register_blueprint(index_page)
|
||||||
|
app.register_blueprint(individual_minifigure_page)
|
||||||
|
app.register_blueprint(individual_part_page)
|
||||||
app.register_blueprint(instructions_page)
|
app.register_blueprint(instructions_page)
|
||||||
app.register_blueprint(login_page)
|
app.register_blueprint(login_page)
|
||||||
app.register_blueprint(minifigure_page)
|
app.register_blueprint(minifigure_page)
|
||||||
app.register_blueprint(part_page)
|
app.register_blueprint(part_page)
|
||||||
|
app.register_blueprint(purchase_location_page)
|
||||||
app.register_blueprint(set_page)
|
app.register_blueprint(set_page)
|
||||||
app.register_blueprint(statistics_page)
|
app.register_blueprint(statistics_page)
|
||||||
app.register_blueprint(storage_page)
|
app.register_blueprint(storage_page)
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ from typing import Any, Final
|
|||||||
CONFIG: Final[list[dict[str, Any]]] = [
|
CONFIG: Final[list[dict[str, Any]]] = [
|
||||||
{'n': 'AUTHENTICATION_PASSWORD', 'd': ''},
|
{'n': 'AUTHENTICATION_PASSWORD', 'd': ''},
|
||||||
{'n': 'AUTHENTICATION_KEY', 'd': ''},
|
{'n': 'AUTHENTICATION_KEY', 'd': ''},
|
||||||
|
# BrickLink minifigure links disabled - Rebrickable doesn't provide BrickLink minifigure IDs
|
||||||
|
# {'n': 'BRICKLINK_LINK_MINIFIGURE_PATTERN', 'd': 'https://www.bricklink.com/v2/catalog/catalogitem.page?M={figure}'}, # noqa: E501
|
||||||
{'n': 'BRICKLINK_LINK_PART_PATTERN', 'd': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P={part}&C={color}'}, # noqa: E501
|
{'n': 'BRICKLINK_LINK_PART_PATTERN', 'd': 'https://www.bricklink.com/v2/catalog/catalogitem.page?P={part}&C={color}'}, # noqa: E501
|
||||||
{'n': 'BRICKLINK_LINK_SET_PATTERN', 'd': 'https://www.bricklink.com/v2/catalog/catalogitem.page?S={set_num}'}, # noqa: E501
|
{'n': 'BRICKLINK_LINK_SET_PATTERN', 'd': 'https://www.bricklink.com/v2/catalog/catalogitem.page?S={set_num}'}, # noqa: E501
|
||||||
{'n': 'BRICKLINK_LINKS', 'c': bool},
|
{'n': 'BRICKLINK_LINKS', 'c': bool},
|
||||||
@@ -17,6 +19,9 @@ CONFIG: Final[list[dict[str, Any]]] = [
|
|||||||
{'n': 'DATABASE_TIMESTAMP_FORMAT', 'd': '%Y-%m-%d-%H-%M-%S'},
|
{'n': 'DATABASE_TIMESTAMP_FORMAT', 'd': '%Y-%m-%d-%H-%M-%S'},
|
||||||
{'n': 'DEBUG', 'c': bool},
|
{'n': 'DEBUG', 'c': bool},
|
||||||
{'n': 'DEFAULT_TABLE_PER_PAGE', 'd': 25, 'c': int},
|
{'n': 'DEFAULT_TABLE_PER_PAGE', 'd': 25, 'c': int},
|
||||||
|
{'n': 'DISABLE_INDIVIDUAL_MINIFIGURES', 'c': bool},
|
||||||
|
{'n': 'DISABLE_INDIVIDUAL_PARTS', 'c': bool},
|
||||||
|
{'n': 'DISABLE_QUICK_ADD_INDIVIDUAL_PARTS', 'c': bool},
|
||||||
{'n': 'DOMAIN_NAME', 'e': 'DOMAIN_NAME', 'd': ''},
|
{'n': 'DOMAIN_NAME', 'e': 'DOMAIN_NAME', 'd': ''},
|
||||||
{'n': 'FILE_DATETIME_FORMAT', 'd': '%d/%m/%Y, %H:%M:%S'},
|
{'n': 'FILE_DATETIME_FORMAT', 'd': '%d/%m/%Y, %H:%M:%S'},
|
||||||
{'n': 'HOST', 'd': '0.0.0.0'},
|
{'n': 'HOST', 'd': '0.0.0.0'},
|
||||||
@@ -29,7 +34,9 @@ CONFIG: Final[list[dict[str, Any]]] = [
|
|||||||
{'n': 'ADMIN_DEFAULT_EXPANDED_SECTIONS', 'd': ['database'], 'c': list},
|
{'n': 'ADMIN_DEFAULT_EXPANDED_SECTIONS', 'd': ['database'], 'c': list},
|
||||||
{'n': 'HIDE_ALL_INSTRUCTIONS', 'c': bool},
|
{'n': 'HIDE_ALL_INSTRUCTIONS', 'c': bool},
|
||||||
{'n': 'HIDE_ALL_MINIFIGURES', 'c': bool},
|
{'n': 'HIDE_ALL_MINIFIGURES', 'c': bool},
|
||||||
|
{'n': 'HIDE_INDIVIDUAL_MINIFIGURES', 'c': bool},
|
||||||
{'n': 'HIDE_ALL_PARTS', 'c': bool},
|
{'n': 'HIDE_ALL_PARTS', 'c': bool},
|
||||||
|
{'n': 'HIDE_INDIVIDUAL_PARTS', 'c': bool},
|
||||||
{'n': 'HIDE_ALL_PROBLEMS_PARTS', 'e': 'BK_HIDE_MISSING_PARTS', 'c': bool},
|
{'n': 'HIDE_ALL_PROBLEMS_PARTS', 'e': 'BK_HIDE_MISSING_PARTS', 'c': bool},
|
||||||
{'n': 'HIDE_ALL_SETS', 'c': bool},
|
{'n': 'HIDE_ALL_SETS', 'c': bool},
|
||||||
{'n': 'HIDE_ALL_STORAGES', 'c': bool},
|
{'n': 'HIDE_ALL_STORAGES', 'c': bool},
|
||||||
@@ -47,7 +54,7 @@ CONFIG: Final[list[dict[str, Any]]] = [
|
|||||||
{'n': 'NO_THREADED_SOCKET', 'c': bool},
|
{'n': 'NO_THREADED_SOCKET', 'c': bool},
|
||||||
{'n': 'PARTS_SERVER_SIDE_PAGINATION', 'c': bool},
|
{'n': 'PARTS_SERVER_SIDE_PAGINATION', 'c': bool},
|
||||||
{'n': 'SETS_SERVER_SIDE_PAGINATION', 'c': bool},
|
{'n': 'SETS_SERVER_SIDE_PAGINATION', 'c': bool},
|
||||||
{'n': 'PARTS_DEFAULT_ORDER', 'd': '"rebrickable_parts"."name" ASC, "rebrickable_parts"."color_name" ASC, "bricktracker_parts"."spare" ASC'}, # noqa: E501
|
{'n': 'PARTS_DEFAULT_ORDER', 'd': '"rebrickable_parts"."name" ASC, "rebrickable_parts"."color_name" ASC, "combined"."spare" ASC'}, # noqa: E501
|
||||||
{'n': 'PARTS_FOLDER', 'd': 'data/parts'},
|
{'n': 'PARTS_FOLDER', 'd': 'data/parts'},
|
||||||
{'n': 'PARTS_PAGINATION_SIZE_DESKTOP', 'd': 10, 'c': int},
|
{'n': 'PARTS_PAGINATION_SIZE_DESKTOP', 'd': 10, 'c': int},
|
||||||
{'n': 'PARTS_PAGINATION_SIZE_MOBILE', 'd': 5, 'c': int},
|
{'n': 'PARTS_PAGINATION_SIZE_MOBILE', 'd': 5, 'c': int},
|
||||||
|
|||||||
@@ -17,7 +17,9 @@ LIVE_CHANGEABLE_VARS: Final[List[str]] = [
|
|||||||
'BK_ADMIN_DEFAULT_EXPANDED_SECTIONS',
|
'BK_ADMIN_DEFAULT_EXPANDED_SECTIONS',
|
||||||
'BK_HIDE_ALL_INSTRUCTIONS',
|
'BK_HIDE_ALL_INSTRUCTIONS',
|
||||||
'BK_HIDE_ALL_MINIFIGURES',
|
'BK_HIDE_ALL_MINIFIGURES',
|
||||||
|
'BK_HIDE_INDIVIDUAL_MINIFIGURES',
|
||||||
'BK_HIDE_ALL_PARTS',
|
'BK_HIDE_ALL_PARTS',
|
||||||
|
'BK_HIDE_INDIVIDUAL_PARTS',
|
||||||
'BK_HIDE_ALL_PROBLEMS_PARTS',
|
'BK_HIDE_ALL_PROBLEMS_PARTS',
|
||||||
'BK_HIDE_ALL_SETS',
|
'BK_HIDE_ALL_SETS',
|
||||||
'BK_HIDE_ALL_STORAGES',
|
'BK_HIDE_ALL_STORAGES',
|
||||||
@@ -26,6 +28,7 @@ LIVE_CHANGEABLE_VARS: Final[List[str]] = [
|
|||||||
'BK_HIDE_TABLE_DAMAGED_PARTS',
|
'BK_HIDE_TABLE_DAMAGED_PARTS',
|
||||||
'BK_HIDE_TABLE_MISSING_PARTS',
|
'BK_HIDE_TABLE_MISSING_PARTS',
|
||||||
'BK_HIDE_TABLE_CHECKED_PARTS',
|
'BK_HIDE_TABLE_CHECKED_PARTS',
|
||||||
|
'BK_DISABLE_QUICK_ADD_INDIVIDUAL_PARTS',
|
||||||
'BK_HIDE_WISHES',
|
'BK_HIDE_WISHES',
|
||||||
'BK_MINIFIGURES_PAGINATION_SIZE_DESKTOP',
|
'BK_MINIFIGURES_PAGINATION_SIZE_DESKTOP',
|
||||||
'BK_MINIFIGURES_PAGINATION_SIZE_MOBILE',
|
'BK_MINIFIGURES_PAGINATION_SIZE_MOBILE',
|
||||||
@@ -68,6 +71,8 @@ LIVE_CHANGEABLE_VARS: Final[List[str]] = [
|
|||||||
'BK_STORAGE_DEFAULT_ORDER',
|
'BK_STORAGE_DEFAULT_ORDER',
|
||||||
'BK_WISHES_DEFAULT_ORDER',
|
'BK_WISHES_DEFAULT_ORDER',
|
||||||
# URL and Pattern Variables
|
# URL and Pattern Variables
|
||||||
|
# BrickLink minifigure links disabled - no ID mapping available
|
||||||
|
# 'BK_BRICKLINK_LINK_MINIFIGURE_PATTERN',
|
||||||
'BK_BRICKLINK_LINK_PART_PATTERN',
|
'BK_BRICKLINK_LINK_PART_PATTERN',
|
||||||
'BK_BRICKLINK_LINK_SET_PATTERN',
|
'BK_BRICKLINK_LINK_SET_PATTERN',
|
||||||
'BK_REBRICKABLE_IMAGE_NIL',
|
'BK_REBRICKABLE_IMAGE_NIL',
|
||||||
@@ -90,6 +95,8 @@ RESTART_REQUIRED_VARS: Final[List[str]] = [
|
|||||||
'BK_AUTHENTICATION_KEY',
|
'BK_AUTHENTICATION_KEY',
|
||||||
'BK_DATABASE_PATH',
|
'BK_DATABASE_PATH',
|
||||||
'BK_DEBUG',
|
'BK_DEBUG',
|
||||||
|
'BK_DISABLE_INDIVIDUAL_PARTS',
|
||||||
|
'BK_DISABLE_INDIVIDUAL_MINIFIGURES',
|
||||||
'BK_DOMAIN_NAME',
|
'BK_DOMAIN_NAME',
|
||||||
'BK_HOST',
|
'BK_HOST',
|
||||||
'BK_PORT',
|
'BK_PORT',
|
||||||
@@ -199,7 +206,7 @@ class ConfigManager:
|
|||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
return 0
|
return 0
|
||||||
# Boolean variables - More specific patterns to avoid conflicts
|
# Boolean variables - More specific patterns to avoid conflicts
|
||||||
if any(keyword in var_name.lower() for keyword in ['hide_', 'server_side_pagination', '_links', 'random', 'skip_', 'show_', 'use_', '_consolidation', '_charts', '_expanded']):
|
if any(keyword in var_name.lower() for keyword in ['hide_', 'disable_', 'server_side_pagination', '_links', 'random', 'skip_', 'show_', 'use_', '_consolidation', '_charts', '_expanded']):
|
||||||
if isinstance(value, str):
|
if isinstance(value, str):
|
||||||
return value.lower() in ('true', '1', 'yes', 'on')
|
return value.lower() in ('true', '1', 'yes', 'on')
|
||||||
return bool(value)
|
return bool(value)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from typing import Final
|
from typing import Final
|
||||||
|
|
||||||
__version__: Final[str] = '1.4.0'
|
__version__: Final[str] = '1.4.0'
|
||||||
__database_version__: Final[int] = 20
|
__database_version__: Final[int] = 27
|
||||||
|
|||||||
Reference in New Issue
Block a user