CHAR_COLL_SEP_PAGE = '='
CHAR_COL_SOLID = '+'
CHAR_COL_TRANSPARENT = '-'
-CHAR_Q_EQ_ID = ':'
+CHAR_Q_ID = '='
CHAR_Q_STUDS = 's'
CHAR_Q_TEXT = '?'
BOX_PREFIX = 'box:'
) -> 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()
}
query_body: str
) -> bool:
'Return if self matches query.'
- assert query_char in self.matchers
+ assert query_char in self.matchers, query_char
return self.matchers[query_char](query_body)
def lookup(
self,
table_name: str,
- inquiry: str,
- show_raw: bool
+ item_id: str,
+ show_raw: bool,
+ filter_by: str
) -> str:
'Return result of inquiry on table of table_name.'
assert table_name in self.lookupable
maybe_dict = getattr(self, table_name)
table = maybe_dict if isinstance(maybe_dict, dict) else maybe_dict()
- query_char, query_body = inquiry[0], inquiry[1:]
- if query_char == CHAR_Q_EQ_ID:
- item = table[query_body]
- return item.raw() if show_raw else item.show()
- return CHAR_NEWLINE.join(
- [(r.raw() if show_raw else str(r)) for
- r in sorted(table.values(), key=lambda r: r.id_indented())
- if r.match(query_char, query_body)])
+ if item_id:
+ filter_by = CHAR_Q_ID + item_id
+ items = sorted(table.values(), key=lambda x: x.id_indented())
+ if filter_by:
+ items = [item for item in items
+ if item.match(filter_by[0], filter_by[1:])]
+ return CHAR_NEWLINE.join([(item.raw() if show_raw else str(item))
+ for item in items])
def main(
db = BricksDb(environ.get(NAME_ENV_DIRNAME, '.'))
parser = ArgumentParser()
add_abbrev_choices_arg(parser, 'table', set(db.lookupable))
- parser.add_argument('inquiry', nargs='?', default=CHAR_Q_TEXT)
- parser.add_argument('--raw', action='store_true')
+ 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')
args = parser.parse_args()
- print(db.lookup(args.table, args.inquiry, args.raw).rstrip())
+ print(
+ db.lookup(
+ table_name=args.table,
+ item_id=args.item_id,
+ show_raw=args.raw,
+ filter_by=args.filter_by
+ ).rstrip())
if __name__ == '__main__':