home · contact · privacy
Enhance naming consistencies between attributes, CLI parameters.
authorPlom Heller <plom@plomlompom.com>
Sat, 13 Jun 2026 16:06:15 +0000 (18:06 +0200)
committerPlom Heller <plom@plomlompom.com>
Sat, 13 Jun 2026 16:06:15 +0000 (18:06 +0200)
bricksplom.py

index 404ad5a5e28f12d52ab77cb0a732661bf281d8b5..cfe67b83ed438bd2264ac83f304822e09379b919 100755 (executable)
@@ -27,13 +27,15 @@ CHAR_COLL_SEP_COLUMN = '-'
 CHAR_COLL_SEP_PAGE = '='
 CHAR_COL_SOLID = '+'
 CHAR_COL_TRANSPARENT = '-'
-CHAR_Q_ID = '='
-CHAR_Q_STUDS = 's'
-CHAR_Q_TEXT = '?'
 BOX_PREFIX = 'box:'
+
+PARAM_Q_ID = 'id='
+PARAM_Q_STUDS = 'n_studs='
+PARAM_Q_TEXT = 'text:'
+PARAMS_Q = (PARAM_Q_ID, PARAM_Q_STUDS, PARAM_Q_TEXT)
 TOK_SORT_BOX = 'box'
 TOK_SORT_ID = 'id'
-TOK_SORT_STUDS = 'studs'
+TOK_SORT_STUDS = 'n_studs'
 
 BrickListing = tuple[int, str, str]  # count, ID, comment
 PageColumn = tuple[BrickListing, ...]
@@ -133,8 +135,8 @@ class Lookupable:
             ) -> dict[str, Callable[[str], bool]]:
         'Available lookup matchers.'
         return {
-            CHAR_Q_ID: lambda q_body: self.id_ == q_body,
-            CHAR_Q_TEXT: lambda q_body: q_body.upper() in str(self).upper()
+            PARAM_Q_ID: lambda q_body: self.id_ == q_body,
+            PARAM_Q_TEXT: lambda q_body: q_body.upper() in str(self).upper()
             }
 
     def match(
@@ -277,7 +279,7 @@ class BrickDesign(Textfiled, Lookupable):
                 ) -> bool:
             assert q_body.isdigit()
             return self.attrs.n_studs == int(q_body)
-        return super().matchers | {CHAR_Q_STUDS: q_studs}
+        return super().matchers | {PARAM_Q_STUDS: q_studs}
 
     @property
     def sorters(
@@ -483,7 +485,7 @@ class BrickSet(Textfiled, WithDb, Lookupable):
             self
             ) -> dict[str, Callable[[str], bool]]:
         return super().matchers | {
-            CHAR_Q_TEXT: lambda q_body: q_body.upper() in self.show().upper()
+            PARAM_Q_TEXT: lambda q_body: q_body.upper() in self.show().upper()
             }
 
     def _format_paginated(
@@ -683,7 +685,7 @@ class BricksDb:
             table_name: str,
             item_id: str,
             show_raw: bool,
-            filter_by: str,
+            match_by: str,
             sort_by: str
             ) -> str:
         'Return result of inquiry on table of table_name.'
@@ -691,13 +693,16 @@ class BricksDb:
         maybe_dict = getattr(self, table_name)
         table = maybe_dict if isinstance(maybe_dict, dict) else maybe_dict()
         if item_id:
-            filter_by = CHAR_Q_ID + item_id
+            match_by = PARAM_Q_ID + item_id
         items = tuple(table.values())
         if items and sort_by:
             items = items[0].sorters[sort_by](self, items)
-        if filter_by:
-            items = tuple(item for item in items
-                          if item.match(filter_by[0], filter_by[1:]))
+        if match_by:
+            candidates = [p for p in PARAMS_Q if match_by.startswith(p)]
+            assert len(candidates) == 1
+            p_key = candidates[0]
+            p_val = match_by[len(p_key):]
+            items = tuple(item for item in items if item.match(p_key, p_val))
         if len(items) == 1 and not show_raw:
             return items[0].show()
         return CHAR_NEWLINE.join(
@@ -730,7 +735,7 @@ def main(
     add_abbrev_choices_arg(parser, 'table', set(db.lookupable))
     parser.add_argument('item_id', nargs='?', metavar='ITEM_ID')
     parser.add_argument('-r', '--raw', action='store_true')
-    parser.add_argument('-f', '--filter-by', action='store')
+    parser.add_argument('-m', '--match-by', action='store')
     parser.add_argument('-s', '--sort-by', action='store', default=TOK_SORT_ID)
     args = parser.parse_args()
     print(
@@ -738,7 +743,7 @@ def main(
             table_name=args.table,
             item_id=args.item_id,
             show_raw=args.raw,
-            filter_by=args.filter_by,
+            match_by=args.match_by,
             sort_by=args.sort_by
         ).rstrip())