From: Plom Heller Date: Sun, 31 May 2026 23:47:56 +0000 (+0200) Subject: Restructure item-filtering syntax. X-Git-Url: https://plomlompom.com/repos/%7B%7Bdb.prefix%7D%7D/foo.html?a=commitdiff_plain;h=f582b3133ad511398a44c94bf02b333dfb462d94;p=bricksplom Restructure item-filtering syntax. --- diff --git a/bricksplom.py b/bricksplom.py index b4f69aa..f8ae1f9 100755 --- a/bricksplom.py +++ b/bricksplom.py @@ -25,7 +25,7 @@ CHAR_COLL_SEP_COLUMN = '-' 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:' @@ -128,6 +128,7 @@ class Lookupable: ) -> 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() } @@ -137,7 +138,7 @@ class Lookupable: 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) @@ -595,21 +596,22 @@ class BricksDb: 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( @@ -634,10 +636,17 @@ 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__':