diff --git a/bricktracker/rebrickable_set.py b/bricktracker/rebrickable_set.py
index d2878d6c..fbf10f1a 100644
--- a/bricktracker/rebrickable_set.py
+++ b/bricktracker/rebrickable_set.py
@@ -11,10 +11,10 @@ from .parser import parse_set
from .rebrickable import Rebrickable
from .rebrickable_image import RebrickableImage
from .record import BrickRecord
-from .theme import BrickTheme
from .theme_list import BrickThemeList
if TYPE_CHECKING:
from .socket import BrickSocket
+ from .theme import BrickTheme
logger = logging.getLogger(__name__)
@@ -66,13 +66,7 @@ class RebrickableSet(BrickRecord):
if not hasattr(self.fields, 'theme_id'):
self.fields.theme_id = 0
- if not hasattr(self.fields, 'theme_name'):
- self.fields.theme_name = None
-
- self.theme = BrickThemeList().get(
- str(self.fields.theme_id),
- name=self.fields.theme_name
- )
+ self.theme = BrickThemeList().get(self.fields.theme_id)
# Resolve instructions
if self.resolve_instructions:
diff --git a/bricktracker/set.py b/bricktracker/set.py
index 893acc05..fa05b0b3 100644
--- a/bricktracker/set.py
+++ b/bricktracker/set.py
@@ -1,12 +1,11 @@
import logging
-from sqlite3 import Row
import traceback
from typing import Any, Self, TYPE_CHECKING
from uuid import uuid4
from flask import current_app, url_for
-from .exceptions import DatabaseException, ErrorException, NotFoundException
+from .exceptions import DatabaseException, NotFoundException
from .minifigure_list import BrickMinifigureList
from .part_list import BrickPartList
from .rebrickable_set import RebrickableSet
@@ -122,18 +121,6 @@ class BrickSet(RebrickableSet):
return True
- # Ingest a set
- def ingest(self, record: Row | dict[str, Any], /):
- # Super charge the record with theme override
- if 'theme' in record.keys() and record['theme'] is not None:
- if isinstance(record, Row):
- record = dict(record)
-
- record['theme_id'] = record['theme']
- record['theme_name'] = record['theme']
-
- super().ingest(record)
-
# A identifier for HTML component
def html_id(self, prefix: str | None = None, /) -> str:
components: list[str] = []
@@ -209,36 +196,6 @@ class BrickSet(RebrickableSet):
id=self.fields.id,
))
- # Update theme
- def update_theme(self, json: Any | None, /) -> None:
- theme: str | None = json.get('value', '') # type: ignore
-
- # We need a string
- try:
- theme = str(theme)
- theme = theme.strip()
- except Exception:
- raise ErrorException('"{theme}" is not a valid string'.format(
- theme=theme
- ))
-
- if theme == '':
- theme = None
-
- self.fields.theme = theme
-
- # Update the status
- rows, _ = BrickSQL().execute_and_commit(
- 'set/update/theme',
- parameters=self.sql_parameters()
- )
-
- if rows != 1:
- raise DatabaseException('Could not update the theme override for set {set} ({id})'.format( # noqa: E501
- set=self.fields.set,
- id=self.fields.id,
- ))
-
# Self url
def url(self, /) -> str:
return url_for('set.details', id=self.fields.id)
@@ -271,10 +228,3 @@ class BrickSet(RebrickableSet):
'set.refresh',
id=self.fields.id,
)
-
- # Compute the url for the theme override
- def url_for_theme(self, /) -> str:
- return url_for(
- 'set.update_theme',
- id=self.fields.id,
- )
diff --git a/bricktracker/sql/migrations/0007.sql b/bricktracker/sql/migrations/0007.sql
index f955bb9d..89ef71f8 100644
--- a/bricktracker/sql/migrations/0007.sql
+++ b/bricktracker/sql/migrations/0007.sql
@@ -24,7 +24,6 @@ CREATE TABLE "bricktracker_sets" (
"id" TEXT NOT NULL,
"set" TEXT NOT NULL,
"description" TEXT,
- "theme" TEXT, -- Custom theme name
"storage" TEXT, -- Storage bin location
"purchase_date" INTEGER, -- Purchase data
"purchase_location" TEXT, -- Purchase location
diff --git a/bricktracker/sql/set/base/base.sql b/bricktracker/sql/set/base/base.sql
index 7bc1bc37..8b1f4c88 100644
--- a/bricktracker/sql/set/base/base.sql
+++ b/bricktracker/sql/set/base/base.sql
@@ -1,6 +1,5 @@
SELECT
{% block id %}{% endblock %}
- "bricktracker_sets"."theme",
"rebrickable_sets"."set",
"rebrickable_sets"."number",
"rebrickable_sets"."version",
diff --git a/bricktracker/sql/set/update/theme.sql b/bricktracker/sql/set/update/theme.sql
deleted file mode 100644
index 1d884edf..00000000
--- a/bricktracker/sql/set/update/theme.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-UPDATE "bricktracker_sets"
-SET "theme" = :theme
-WHERE "bricktracker_sets"."id" IS NOT DISTINCT FROM :id
diff --git a/bricktracker/theme.py b/bricktracker/theme.py
index df677f4d..3ee1068b 100644
--- a/bricktracker/theme.py
+++ b/bricktracker/theme.py
@@ -1,14 +1,14 @@
# Lego set theme
class BrickTheme(object):
- id: str
+ id: int
name: str
- parent: str | None
+ parent: int | None
- def __init__(self, id: str, name: str, parent: str | None = None, /):
- self.id = id
+ def __init__(self, id: str | int, name: str, parent: str | None = None, /):
+ self.id = int(id)
self.name = name
if parent is not None and parent != '':
- self.parent = parent
+ self.parent = int(parent)
else:
self.parent = None
diff --git a/bricktracker/theme_list.py b/bricktracker/theme_list.py
index af1667ed..22cac8ee 100644
--- a/bricktracker/theme_list.py
+++ b/bricktracker/theme_list.py
@@ -17,7 +17,7 @@ logger = logging.getLogger(__name__)
# Lego sets themes
class BrickThemeList(object):
- themes: dict[str, BrickTheme]
+ themes: dict[int, BrickTheme]
mtime: datetime | None
size: int | None
exception: Exception | None
@@ -57,15 +57,12 @@ class BrickThemeList(object):
BrickThemeList.mtime = None
# Get a theme
- def get(self, id: str, /, *, name: str | None = None) -> BrickTheme:
+ def get(self, id: int, /) -> BrickTheme:
# Seed a fake entry if missing
if id not in self.themes:
- if name is None:
- name = 'Unknown ({id})'.format(id=id)
-
BrickThemeList.themes[id] = BrickTheme(
id,
- name,
+ 'Unknown ({id})'.format(id=id)
)
return self.themes[id]
diff --git a/bricktracker/views/set.py b/bricktracker/views/set.py
index 59289ff0..809d46b4 100644
--- a/bricktracker/views/set.py
+++ b/bricktracker/views/set.py
@@ -167,22 +167,3 @@ def refresh(*, id: str) -> str:
namespace=current_app.config['SOCKET_NAMESPACE'],
messages=MESSAGES
)
-
-
-# Change the theme override
-@set_page.route('/<id>/theme', methods=['POST'])
-@login_required
-@exception_handler(__file__, json=True)
-def update_theme(*, id: str) -> Response:
- brickset = BrickSet().select_light(id)
-
- brickset.update_theme(request.json)
-
- # Info
- logger.info('Set {set} ({id}): theme override changed to "{theme}"'.format( # noqa: E501
- set=brickset.fields.set,
- id=brickset.fields.id,
- theme=brickset.fields.theme,
- ))
-
- return jsonify({'value': brickset.fields.theme})
diff --git a/templates/set/management.html b/templates/set/management.html
index b2999728..38074808 100644
--- a/templates/set/management.html
+++ b/templates/set/management.html
@@ -1,10 +1,5 @@
{% if g.login.is_authenticated() %}
{{ accordion.header('Management', 'management', 'set-details', expanded=true, icon='settings-4-line') }}
- <h5>Theme override</h5>
- <p>
- You can override the current theme ({{ badge.theme(item.theme.name, solo=solo, last=last) }}) with any string you want.
- {{ form.input('Theme', item.fields.id, item.html_id('theme'), item.url_for_theme(), item.fields.theme, all=all, read_only=read_only) }}
- </p>
<h5 class="border-bottom">Data</h5>
<a href="{{ item.url_for_refresh() }}" class="btn btn-primary" role="button"><i class="ri-refresh-line"></i> Refresh the set data</a>
{{ accordion.footer() }}