diff --git a/bricktracker/set_list.py b/bricktracker/set_list.py index 6c3b928..deaf269 100644 --- a/bricktracker/set_list.py +++ b/bricktracker/set_list.py @@ -1,11 +1,14 @@ -from typing import Any, Self +from typing import Any, Self, Union from flask import current_app from .record_list import BrickRecordList +from .set_owner import BrickSetOwner from .set_owner_list import BrickSetOwnerList from .set_status_list import BrickSetStatusList from .set_storage import BrickSetStorage +from .set_storage_list import BrickSetStorageList +from .set_tag import BrickSetTag from .set_tag_list import BrickSetTagList from .set import BrickSet @@ -163,3 +166,22 @@ class BrickSetList(BrickRecordList[BrickSet]): self.list(override_query=self.using_storage_query) return self + + +# Helper to build the metadata lists +def set_metadata_lists( + as_class: bool = False +) -> dict[ + str, + Union[ + list[BrickSetOwner], + list[BrickSetStorage], + BrickSetStorageList, + list[BrickSetTag] + ] +]: + return { + 'brickset_owners': BrickSetOwnerList.list(), + 'brickset_storages': BrickSetStorageList.list(as_class=as_class), + 'brickset_tags': BrickSetTagList.list(), + } diff --git a/bricktracker/views/add.py b/bricktracker/views/add.py index fb11efe..db4671e 100644 --- a/bricktracker/views/add.py +++ b/bricktracker/views/add.py @@ -3,9 +3,7 @@ from flask_login import login_required from ..configuration_list import BrickConfigurationList from .exceptions import exception_handler -from ..set_owner_list import BrickSetOwnerList -from ..set_storage_list import BrickSetStorageList -from ..set_tag_list import BrickSetTagList +from ..set_list import set_metadata_lists from ..socket import MESSAGES add_page = Blueprint('add', __name__, url_prefix='/add') @@ -20,12 +18,10 @@ def add() -> str: return render_template( 'add.html', - brickset_owners=BrickSetOwnerList.list(), - brickset_storages=BrickSetStorageList.list(), - brickset_tags=BrickSetTagList.list(), path=current_app.config['SOCKET_PATH'], namespace=current_app.config['SOCKET_NAMESPACE'], - messages=MESSAGES + messages=MESSAGES, + **set_metadata_lists() ) @@ -38,11 +34,9 @@ def bulk() -> str: return render_template( 'add.html', - brickset_owners=BrickSetOwnerList.list(), - brickset_storages=BrickSetStorageList.list(), - brickset_tags=BrickSetTagList.list(), path=current_app.config['SOCKET_PATH'], namespace=current_app.config['SOCKET_NAMESPACE'], messages=MESSAGES, - bulk=True + bulk=True, + **set_metadata_lists() ) diff --git a/bricktracker/views/index.py b/bricktracker/views/index.py index b64775b..1bf7c22 100644 --- a/bricktracker/views/index.py +++ b/bricktracker/views/index.py @@ -2,11 +2,8 @@ from flask import Blueprint, render_template from .exceptions import exception_handler from ..minifigure_list import BrickMinifigureList -from ..set_owner_list import BrickSetOwnerList from ..set_status_list import BrickSetStatusList -from ..set_storage_list import BrickSetStorageList -from ..set_tag_list import BrickSetTagList -from ..set_list import BrickSetList +from ..set_list import BrickSetList, set_metadata_lists index_page = Blueprint('index', __name__) @@ -18,9 +15,7 @@ def index() -> str: return render_template( 'index.html', brickset_collection=BrickSetList().last(), - brickset_owners=BrickSetOwnerList.list(), brickset_statuses=BrickSetStatusList.list(), - brickset_storages=BrickSetStorageList.list(as_class=True), - brickset_tags=BrickSetTagList.list(), minifigure_collection=BrickMinifigureList().last(), + **set_metadata_lists(as_class=True) ) diff --git a/bricktracker/views/minifigure.py b/bricktracker/views/minifigure.py index 9958728..7123e4a 100644 --- a/bricktracker/views/minifigure.py +++ b/bricktracker/views/minifigure.py @@ -3,10 +3,7 @@ from flask import Blueprint, render_template from .exceptions import exception_handler from ..minifigure import BrickMinifigure from ..minifigure_list import BrickMinifigureList -from ..set_owner_list import BrickSetOwnerList -from ..set_list import BrickSetList -from ..set_storage_list import BrickSetStorageList -from ..set_tag_list import BrickSetTagList +from ..set_list import BrickSetList, set_metadata_lists minifigure_page = Blueprint('minifigure', __name__, url_prefix='/minifigures') @@ -31,7 +28,5 @@ def details(*, figure: str) -> str: using=BrickSetList().using_minifigure(figure), missing=BrickSetList().missing_minifigure(figure), damaged=BrickSetList().damaged_minifigure(figure), - brickset_owners=BrickSetOwnerList.list(), - brickset_storages=BrickSetStorageList.list(as_class=True), - brickset_tags=BrickSetTagList.list(), + **set_metadata_lists(as_class=True) ) diff --git a/bricktracker/views/part.py b/bricktracker/views/part.py index b2a9eed..fc800c4 100644 --- a/bricktracker/views/part.py +++ b/bricktracker/views/part.py @@ -4,10 +4,7 @@ from .exceptions import exception_handler from ..minifigure_list import BrickMinifigureList from ..part import BrickPart from ..part_list import BrickPartList -from ..set_owner_list import BrickSetOwnerList -from ..set_list import BrickSetList -from ..set_storage_list import BrickSetStorageList -from ..set_tag_list import BrickSetTagList +from ..set_list import BrickSetList, set_metadata_lists part_page = Blueprint('part', __name__, url_prefix='/parts') @@ -67,7 +64,5 @@ def details(*, part: str, color: int) -> str: ), different_color=BrickPartList().with_different_color(brickpart), similar_prints=BrickPartList().from_print(brickpart), - brickset_owners=BrickSetOwnerList.list(), - brickset_storages=BrickSetStorageList.list(as_class=True), - brickset_tags=BrickSetTagList.list(), + **set_metadata_lists(as_class=True) ) diff --git a/bricktracker/views/set.py b/bricktracker/views/set.py index 8983cf9..de57cd3 100644 --- a/bricktracker/views/set.py +++ b/bricktracker/views/set.py @@ -16,7 +16,7 @@ from .exceptions import exception_handler from ..minifigure import BrickMinifigure from ..part import BrickPart from ..set import BrickSet -from ..set_list import BrickSetList +from ..set_list import BrickSetList, set_metadata_lists from ..set_owner_list import BrickSetOwnerList from ..set_status_list import BrickSetStatusList from ..set_storage_list import BrickSetStorageList @@ -35,10 +35,8 @@ def list() -> str: return render_template( 'sets.html', collection=BrickSetList().all(), - brickset_owners=BrickSetOwnerList.list(), brickset_statuses=BrickSetStatusList.list(), - brickset_storages=BrickSetStorageList.list(as_class=True), - brickset_tags=BrickSetTagList.list(), + **set_metadata_lists(as_class=True) ) @@ -145,10 +143,8 @@ def details(*, id: str) -> str: 'set.html', item=BrickSet().select_specific(id), open_instructions=request.args.get('open_instructions'), - brickset_owners=BrickSetOwnerList.list(), brickset_statuses=BrickSetStatusList.list(all=True), - brickset_storages=BrickSetStorageList.list(as_class=True), - brickset_tags=BrickSetTagList.list(), + **set_metadata_lists(as_class=True) ) diff --git a/bricktracker/views/storage.py b/bricktracker/views/storage.py index e41e97a..7d5ba3f 100644 --- a/bricktracker/views/storage.py +++ b/bricktracker/views/storage.py @@ -1,11 +1,9 @@ from flask import Blueprint, render_template from .exceptions import exception_handler -from ..set_owner_list import BrickSetOwnerList -from ..set_list import BrickSetList +from ..set_list import BrickSetList, set_metadata_lists from ..set_storage import BrickSetStorage from ..set_storage_list import BrickSetStorageList -from ..set_tag_list import BrickSetTagList storage_page = Blueprint('storage', __name__, url_prefix='/storages') @@ -30,7 +28,5 @@ def details(*, id: str) -> str: 'storage.html', item=storage, sets=BrickSetList().using_storage(storage), - brickset_owners=BrickSetOwnerList.list(), - brickset_storages=BrickSetStorageList.list(as_class=True), - brickset_tags=BrickSetTagList.list(), + **set_metadata_lists(as_class=True) )