From d8046ac1744c6075d467f8ec24f090ee44daa708 Mon Sep 17 00:00:00 2001
From: Gregoo <versatile.mailbox@gmail.com>
Date: Mon, 3 Feb 2025 17:38:39 +0100
Subject: [PATCH] Add missing metadata for set loaded from minifigures or parts

---
 bricktracker/set_list.py         | 20 ++++++++++++++++----
 bricktracker/views/minifigure.py |  6 ++++++
 bricktracker/views/part.py       |  6 ++++++
 templates/macro/badge.html       |  2 +-
 templates/minifigure/card.html   |  2 +-
 templates/part/card.html         |  2 +-
 6 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/bricktracker/set_list.py b/bricktracker/set_list.py
index e25594ca..ffc436d2 100644
--- a/bricktracker/set_list.py
+++ b/bricktracker/set_list.py
@@ -130,7 +130,10 @@ class BrickSetList(BrickRecordList[BrickSet]):
         # Load the sets from the database
         for record in self.select(
             override_query=self.missing_minifigure_query,
-            order=self.order
+            order=self.order,
+            owners=BrickSetOwnerList.as_columns(),
+            statuses=BrickSetStatusList.as_columns(),
+            tags=BrickSetTagList.as_columns(),
         ):
             brickset = BrickSet(record=record)
 
@@ -147,7 +150,10 @@ class BrickSetList(BrickRecordList[BrickSet]):
         # Load the sets from the database
         for record in self.select(
             override_query=self.missing_part_query,
-            order=self.order
+            order=self.order,
+            owners=BrickSetOwnerList.as_columns(),
+            statuses=BrickSetStatusList.as_columns(),
+            tags=BrickSetTagList.as_columns(),
         ):
             brickset = BrickSet(record=record)
 
@@ -163,7 +169,10 @@ class BrickSetList(BrickRecordList[BrickSet]):
         # Load the sets from the database
         for record in self.select(
             override_query=self.using_minifigure_query,
-            order=self.order
+            order=self.order,
+            owners=BrickSetOwnerList.as_columns(),
+            statuses=BrickSetStatusList.as_columns(),
+            tags=BrickSetTagList.as_columns(),
         ):
             brickset = BrickSet(record=record)
 
@@ -180,7 +189,10 @@ class BrickSetList(BrickRecordList[BrickSet]):
         # Load the sets from the database
         for record in self.select(
             override_query=self.using_part_query,
-            order=self.order
+            order=self.order,
+            owners=BrickSetOwnerList.as_columns(),
+            statuses=BrickSetStatusList.as_columns(),
+            tags=BrickSetTagList.as_columns(),
         ):
             brickset = BrickSet(record=record)
 
diff --git a/bricktracker/views/minifigure.py b/bricktracker/views/minifigure.py
index 5d9cc85f..99587287 100644
--- a/bricktracker/views/minifigure.py
+++ b/bricktracker/views/minifigure.py
@@ -3,7 +3,10 @@ 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
 
 minifigure_page = Blueprint('minifigure', __name__, url_prefix='/minifigures')
 
@@ -28,4 +31,7 @@ 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(),
     )
diff --git a/bricktracker/views/part.py b/bricktracker/views/part.py
index 7cbc1c80..b2a9eedd 100644
--- a/bricktracker/views/part.py
+++ b/bricktracker/views/part.py
@@ -4,7 +4,10 @@ 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
 
 part_page = Blueprint('part', __name__, url_prefix='/parts')
 
@@ -64,4 +67,7 @@ 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(),
     )
diff --git a/templates/macro/badge.html b/templates/macro/badge.html
index dfc93840..bd683f40 100644
--- a/templates/macro/badge.html
+++ b/templates/macro/badge.html
@@ -73,7 +73,7 @@
 {% endmacro %}
 
 {% macro storage(item, storages, solo=false, last=false) %}
-  {% if item.fields.storage in storages.mapping %}
+  {% if storages and item.fields.storage in storages.mapping %}
     {% set storage = storages.mapping[item.fields.storage] %}
     {% if last %}
       {% set tooltip=storage.fields.name %}
diff --git a/templates/minifigure/card.html b/templates/minifigure/card.html
index 2cba9b4c..812c2cd5 100644
--- a/templates/minifigure/card.html
+++ b/templates/minifigure/card.html
@@ -1,4 +1,4 @@
-{% import 'macro/accordion.html' as accordion %}
+{% import 'macro/accordion.html' as accordion with context %}
 {% import 'macro/badge.html' as badge %}
 {% import 'macro/card.html' as card %}
 
diff --git a/templates/part/card.html b/templates/part/card.html
index 16f2103e..a83a2f7f 100644
--- a/templates/part/card.html
+++ b/templates/part/card.html
@@ -1,4 +1,4 @@
-{% import 'macro/accordion.html' as accordion %}
+{% import 'macro/accordion.html' as accordion with context %}
 {% import 'macro/badge.html' as badge %}
 {% import 'macro/card.html' as card %}