From 40142b7e622c25c38163208a0b89c4d7f10d4ec4 Mon Sep 17 00:00:00 2001 From: Gregoo Date: Wed, 29 Jan 2025 21:19:56 +0100 Subject: [PATCH] Theme override nobody cares actually --- bricktracker/rebrickable_set.py | 10 ++---- bricktracker/set.py | 52 +-------------------------- bricktracker/sql/migrations/0007.sql | 1 - bricktracker/sql/set/base/base.sql | 1 - bricktracker/sql/set/update/theme.sql | 3 -- bricktracker/theme.py | 10 +++--- bricktracker/theme_list.py | 9 ++--- bricktracker/views/set.py | 19 ---------- templates/set/management.html | 5 --- 9 files changed, 11 insertions(+), 99 deletions(-) delete mode 100644 bricktracker/sql/set/update/theme.sql diff --git a/bricktracker/rebrickable_set.py b/bricktracker/rebrickable_set.py index d2878d6..fbf10f1 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 893acc0..fa05b0b 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 f955bb9..89ef71f 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 7bc1bc3..8b1f4c8 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 1d884ed..0000000 --- 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 df677f4..3ee1068 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 af1667e..22cac8e 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 59289ff..809d46b 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('//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 b299972..3807480 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') }} -
Theme override
-

- 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) }} -

Data
Refresh the set data {{ accordion.footer() }}