aboutsummaryrefslogtreecommitdiff
path: root/sbdata/__main__.py
diff options
context:
space:
mode:
authornea <romangraef@gmail.com>2022-03-12 21:02:08 +0100
committernea <romangraef@gmail.com>2022-03-12 21:02:08 +0100
commit7a9d8290fdd73169e9a91034acaab367f35a0c4e (patch)
treefa3ceb44fa121fe602a4b404392c5e9e806e3ad5 /sbdata/__main__.py
parentc30ac933566c66ec359931a0f9a68415fb36789e (diff)
downloadsbdata-7a9d8290fdd73169e9a91034acaab367f35a0c4e.tar.gz
sbdata-7a9d8290fdd73169e9a91034acaab367f35a0c4e.tar.bz2
sbdata-7a9d8290fdd73169e9a91034acaab367f35a0c4e.zip
explore
Diffstat (limited to 'sbdata/__main__.py')
-rw-r--r--sbdata/__main__.py25
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__':