diff options
author | nea <romangraef@gmail.com> | 2022-03-12 21:02:08 +0100 |
---|---|---|
committer | nea <romangraef@gmail.com> | 2022-03-12 21:02:08 +0100 |
commit | 7a9d8290fdd73169e9a91034acaab367f35a0c4e (patch) | |
tree | fa3ceb44fa121fe602a4b404392c5e9e806e3ad5 /sbdata/__main__.py | |
parent | c30ac933566c66ec359931a0f9a68415fb36789e (diff) | |
download | sbdata-7a9d8290fdd73169e9a91034acaab367f35a0c4e.tar.gz sbdata-7a9d8290fdd73169e9a91034acaab367f35a0c4e.tar.bz2 sbdata-7a9d8290fdd73169e9a91034acaab367f35a0c4e.zip |
explore
Diffstat (limited to 'sbdata/__main__.py')
-rw-r--r-- | sbdata/__main__.py | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/sbdata/__main__.py b/sbdata/__main__.py index 596a51f..5453611 100644 --- a/sbdata/__main__.py +++ b/sbdata/__main__.py @@ -4,7 +4,8 @@ import sys from typing import Any import questionary - +import rich +import rich.table from sbdata.repo import Item from sbdata.task import Arguments, tasks @@ -19,6 +20,12 @@ class ObjectEncoder(json.JSONEncoder): return super().default(o) +def render_thing(i): + if isinstance(i, Item): + return i.internalname + return str(i) + + def main(): args = Arguments(sys.argv) task = args.get_value( @@ -30,6 +37,22 @@ def main(): data = task.run(args) if args.has_flag('json'): print(json.dumps(data, cls=ObjectEncoder)) + if args.has_flag('explore'): + if not (isinstance(data, list) and len(data) > 0 and dataclasses.is_dataclass(data[0])): + print('Cannot explore this') + return + console = rich.get_console() + keys = list(data[0].__dict__.keys()) + query = '' + while True: + table = rich.table.Table() + for k in keys: + table.add_column(k) + for item in data: + if any(query in render_thing(val).casefold() for val in item.__dict__.values()): + table.add_row(*[render_thing(getattr(item, k)) for k in keys]) + console.print(table) + query = console.input("Search: ") if __name__ == '__main__': |