From: Plom Heller Date: Sat, 1 Aug 2026 04:56:03 +0000 (+0200) Subject: Overhaul structuring, erroring on -m/-s/-f. X-Git-Url: https://plomlompom.com/repos/%22https:/validator.w3.org/%7B%7Bdb.prefix%7D%7D/edit?a=commitdiff_plain;h=5f23dde718b6eac9a2ed1e6376a6085aa2da5bfa;p=bricksplom Overhaul structuring, erroring on -m/-s/-f. --- diff --git a/bricksplom.py b/bricksplom.py index 167a87c..4ee57a0 100755 --- a/bricksplom.py +++ b/bricksplom.py @@ -30,6 +30,7 @@ CHAR_SEP_TOKEN = ' ' CHAR_COMMENT = '#' CHAR_DESIGN_ALT = '=' CHAR_ATTR_EQ = '=' +CHAR_TEXTCONTAINS = ':' SEP_DESIGN_DESC = ' #' SEP_DESIGN_ATTR = '|' CHAR_COLL_INDENT = ' ' @@ -43,8 +44,10 @@ CHAR_COL_SOLID = '+' CHAR_COL_TRANSPARENT = '-' BOX_PREFIX = 'box:' +ARG_Q_MARK = '?' PARAM_Q_ID = f'id{CHAR_ATTR_EQ}' -PARAM_Q_TEXT = 'text:' +PARAM_Q_TEXT = f'text{CHAR_TEXTCONTAINS}' +PARAM_Q_DELIMITERS = {CHAR_ATTR_EQ, CHAR_TEXTCONTAINS} TOK_SORT_BOX = 'box' TOK_SORT_ID = 'id' @@ -807,34 +810,31 @@ class BricksDb: def lookup( self, table_name: str, - item_id: str, formatter: str, match_by: str, sort_by: str ) -> str: - 'Return result of inquiry on table of table_name.' + 'Return formatted result of inquiry on table of table_name.' assert table_name in self.lookupables + match_key = match_val = '' + for idx, c in enumerate(match_by): + match_key += c + if c in PARAM_Q_DELIMITERS: + match_val = match_by[idx+1:] + break cls = self.lookupables[table_name] - for argument, keys in [(arg, m().keys()) - for arg, m in ((match_by, cls.matchers), - (sort_by, cls.sorters), - (formatter, cls.formatters))]: - if argument == '?': + for arg_key, keys in [(arg, m().keys()) + for arg, m in ((match_key, cls.matchers), + (sort_by, cls.sorters), + (formatter, cls.formatters))]: + if arg_key == ARG_Q_MARK: return CHAR_NEWLINE.join(keys) - table = getattr(self, table_name) - if item_id: - match_by = PARAM_Q_ID + item_id - items = tuple(table.values()) + assert (not arg_key) or arg_key in keys, (arg_key, keys) + items = tuple(getattr(self, table_name).values()) if items and sort_by: items = cls.sorters()[sort_by](self, items) if items and match_by: - p_key = '' - for p_key in [p_key for p_key in cls.matchers() - if match_by.startswith(p_key)]: - break - assert p_key - p_val = match_by[len(p_key):] - items = tuple(item for item in items if item.match(p_key, p_val)) + items = tuple(x for x in items if x.match(match_key, match_val)) return CHAR_NEWLINE.join([cls.formatters()[formatter](item) for item in items]) @@ -863,7 +863,7 @@ def main( choices=choices, type=complete, metavar='TABLE', help=msg) parser = ArgumentParser() add_abbreviable_table_arg() - hint_qmark = 'use "?" to see what be available for chosen table' + hint_qmark = f'use "{ARG_Q_MARK}" to list options for chosen table' hint_ldraw = 'allowed: ' + ', '.join(sorted(list(LDRAW_MODES))) parser.add_argument( 'item_id', @@ -872,10 +872,10 @@ def main( '-f', '--format', action='store', help=hint_qmark, default='default') parser.add_argument( - '-m', '--match-by', - action='store', help=hint_qmark) + '-m', '--match', + action='store', help=hint_qmark, default='') parser.add_argument( - '-s', '--sort-by', + '-s', '--sort', action='store', help=hint_qmark, default=TOK_SORT_ID) action_ldraw = parser.add_argument( '-l', '--ldraw', @@ -885,6 +885,8 @@ def main( for _ in [m for m in args.ldraw.split(CHAR_SEP_LDRAW_MODES) if m and m not in LDRAW_MODES]: parser.error(str(ArgumentError(action_ldraw, hint_ldraw))) + if args.match_by != ARG_Q_MARK and args.item_id: + args.match_by = PARAM_Q_ID + args.item_id return args args = parse_args() @@ -894,10 +896,9 @@ def main( print( db.lookup( table_name=args.table, - item_id=args.item_id, formatter=args.format, - match_by=args.match_by, - sort_by=args.sort_by + match_by=args.match, + sort_by=args.sort ).rstrip())