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])
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='',
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())