From: Plom Heller Date: Thu, 13 Aug 2026 20:39:59 +0000 (+0200) Subject: For -s and -m allow multiple inputs. X-Git-Url: https://plomlompom.com/repos/%7B%7Bdb.prefix%7D%7D/%22https:/validator.w3.org/%7B%7Bitem_name%7D%7D?a=commitdiff_plain;p=bricksplom For -s and -m allow multiple inputs. --- diff --git a/src/bricksplom/misc.py b/src/bricksplom/misc.py index 3213714..cf75d3c 100644 --- a/src/bricksplom/misc.py +++ b/src/bricksplom/misc.py @@ -908,31 +908,37 @@ class BricksDb: self, table_name: str, formatter: str, - match_by: str, - sort_by: str + match_by: tuple[str, ...], + sort_by: tuple[str, ...] ) -> str: '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 + match_keys_vals = [] + for instruction in match_by: + match_key = match_val = '' + for idx, c in enumerate(instruction): + match_key += c + if c in PARAM_Q_DELIMITERS: + match_val = instruction[idx+1:] + break + match_keys_vals += [(match_key, match_val)] cls = self.lookupables[table_name] - for arg_key, x_ers in [(arg, m()) - for arg, m in ((match_key, cls.matchers), - (sort_by, cls.sorters), - (formatter, cls.formatters))]: + for arg_keys, x_ers in [ + (arg, m()) for arg, m in ((tuple(t[0] for t in match_keys_vals), + cls.matchers), + (sort_by, cls.sorters), + ((formatter, ), cls.formatters))]: keys = x_ers.keys() - if arg_key == ARG_QMARK: + if ARG_QMARK in arg_keys: return CHAR_NEWLINE.join([f'{key} – {x_ers[key][0]}' for key in sorted(keys)]) - 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][1](self, items) - if items and match_by: - items = tuple(x for x in items if x.match(match_key, match_val)) + for arg_key in arg_keys: + assert (not arg_key) or arg_key in keys, (arg_key, keys) + if (items := tuple(getattr(self, table_name).values())): + for match_key, match_val in match_keys_vals: + items = tuple(x for x in items + if x.match(match_key, match_val)) + for sorter in sort_by: + items = cls.sorters()[sorter][1](self, items) return CHAR_NEWLINE.join([cls.formatters()[formatter][1](item) for item in items]) diff --git a/src/run.py b/src/run.py index fe41c18..bf0f5f7 100755 --- a/src/run.py +++ b/src/run.py @@ -64,10 +64,10 @@ def main( action='store', help=hint_qmark, default='default') parser.add_argument( '-m', arg_match, - action='store', help=hint_qmark, default='') + action='append', help=hint_qmark) parser.add_argument( '-s', '--sort', - action='store', help=hint_qmark, default=TOK_SORT_ID) + action='append', help=hint_qmark) action_ldraw = parser.add_argument( '-l', '--ldraw', action='store', default='', @@ -94,8 +94,8 @@ def main( db.lookup( table_name=args.table, formatter=args.format, - match_by=args.match, - sort_by=args.sort + match_by=args.match or tuple(), + sort_by=args.sort or tuple() ).rstrip())