home · contact · privacy
For -s and -m allow multiple inputs. master
authorPlom Heller <plom@plomlompom.com>
Thu, 13 Aug 2026 20:39:59 +0000 (22:39 +0200)
committerPlom Heller <plom@plomlompom.com>
Thu, 13 Aug 2026 20:39:59 +0000 (22:39 +0200)
src/bricksplom/misc.py
src/run.py

index 32137144f73a587e87439e83ae895122ed906c7a..cf75d3c61f38dc36085891ef76cd0a473a21cd4b 100644 (file)
@@ -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])
index fe41c189384ca1ec4a2238118f4fc82846ff45db..bf0f5f7bedcea1ec86e0d1930af876ce8634811e 100755 (executable)
@@ -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())