From: Plom Heller Date: Fri, 14 Aug 2026 19:38:44 +0000 (+0200) Subject: Replace awkward ATTR_DESCS global with dataclasses Field.metadata. X-Git-Url: https://plomlompom.com/repos/%7B%7Bdb.prefix%7D%7D/%22https:/validator.w3.org/processes?a=commitdiff_plain;h=d4e02f95a5d09e5c7de25a1e139f4f1a8ae7c3c4;p=bricksplom Replace awkward ATTR_DESCS global with dataclasses Field.metadata. --- diff --git a/src/bricksplom/misc.py b/src/bricksplom/misc.py index cf75d3c..436ffa0 100644 --- a/src/bricksplom/misc.py +++ b/src/bricksplom/misc.py @@ -2,7 +2,7 @@ # standard libs from abc import ABC, abstractmethod -from dataclasses import dataclass, field as dc_field +from dataclasses import dataclass, field as dc_field, fields as dc_fields from pathlib import Path from typing import Any, Callable, Optional, Self # ourselves @@ -43,15 +43,6 @@ LDRAW_MODES = {LDRAW_MODE_FILL_N_STUDS, LDRAW_MODE_VERIFY_N_STUDS, LDRAW_MODE_VERIFY_PATHS} -ATTR_DESCS: dict[str, str] = { - 'n_studs': 'number of studs', - 'description': 'guesstimate what this be', - 'ldraw': 'path of associated LDRAW file', - 'x': 'size over x-axis', - 'y': 'size over y-axis', - 'z': 'size over z-axis', -} - BrickListing = tuple[int, str, str] # count, ID, comment PageColumn = tuple[BrickListing, ...] Page = tuple[PageColumn, ...] @@ -270,14 +261,31 @@ class BrickColor(Textfiled, Lookupable): @dataclass class BrickDesignData: 'Lookupables for BrickDesign besides .id.' - n_studs: int = NUMBER_UNSET - description: str = '?' - ldraw: str = '' - x: float = NUMBER_UNSET - y: float = NUMBER_UNSET - z: float = NUMBER_UNSET + n_studs: int = dc_field(default=NUMBER_UNSET, metadata={ + 'usage': 'number of studs'}) + description: str = dc_field(default='?', metadata={ + 'usage': 'guesstimate what this be'}) + ldraw: str = dc_field(default='', metadata={ + 'usage': 'path of associated LDRAW file'}) + x: float = dc_field(default=NUMBER_UNSET, metadata={ + 'usage': 'size over x-axis'}) + y: float = dc_field(default=NUMBER_UNSET, metadata={ + 'usage': 'size over y-axis'}) + z: float = dc_field(default=NUMBER_UNSET, metadata={ + 'usage': 'size over z-axis'}) _secured: set = dc_field(default_factory=set) + @classmethod + def usage( + cls, + field_name: str + ) -> str: + 'Return "usage" Field metadata if set for field_name.' + usages = {f.name: f.metadata['usage'] for f in dc_fields(cls) + if 'usage' in f.metadata} + assert field_name in usages + return usages[field_name] + @classmethod def sortables( cls @@ -428,7 +436,7 @@ class BrickDesign(Textfiled, WithDb, Lookupable): ) -> bool: assert q_body.isdigit() return getattr(item, attr_name) == int(q_body) - return 'by ' + ATTR_DESCS[attr_name], match + return 'by ' + BrickDesignData.usage(attr_name), match return super().matchers() | { f'{attr_name}{CHAR_ATTR_EQ}': attr_matcher(attr_name) for attr_name, attr_type in BrickDesignData.sortables().items() @@ -450,7 +458,7 @@ class BrickDesign(Textfiled, WithDb, Lookupable): ) -> tuple[Self, ...]: return tuple(sorted(pre_sorted, key=lambda item: getattr(item, attr_name))) - return 'by ' + ATTR_DESCS[attr_name], f_sort + return 'by ' + BrickDesignData.usage(attr_name), f_sort return super().sorters()\ | {TOK_SORT_BOX: cls._by_box_sorter('design')}\ | {attr_name: attr_sorter(attr_name) diff --git a/src/run.py b/src/run.py index bf0f5f7..103adca 100755 --- a/src/run.py +++ b/src/run.py @@ -17,7 +17,6 @@ from bricksplom.misc import ( CHAR_SEP_LDRAW_MODES, LDRAW_MODES, PARAM_Q_ID, - TOK_SORT_ID, ) NAME_ENV_DIRNAME = 'BRICKSPLOM_DIR'