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