firmware/testing/devtest/menu_dump.py
2021-04-27 14:49:53 -04:00

65 lines
1.9 KiB
Python

def doit():
def dump_menu(m, label, indent, menu_item=None, menu_idx=0):
from menu import MenuItem
from seed import WordNestMenu
print("%s%s"% (indent, label))
if callable(m):
# cant do async here, fake it
#m = await m(m, 0, menu_item)
try:
m = m(m, menu_idx, menu_item).__next__()
m = m or []
except:
m = []
indent += ' '
for menu_idx, mi in enumerate(m):
if isinstance(mi, str):
here = mi
elif isinstance(mi, MenuItem):
here = mi.label
if getattr(mi, 'predicate', False):
here += ' [MAYBE]'
# NOTE: most attributes not present unless used
funct = getattr(mi, 'next_func', None)
if funct:
try:
rv = funct(m, menu_idx, mi).__next__()
if isinstance(rv, MenuSystem):
dump_menu(rv, here, indent, menu_item=mi, menu_idx=menu_idx)
except:
pass
next_menu = getattr(mi, 'next_menu', None)
chooser = getattr(mi, 'chooser', None)
if next_menu:
dump_menu(next_menu, here, indent, menu_item=mi, menu_idx=menu_idx)
continue
elif chooser:
mx = list(chooser())[1]
dump_menu(mx, here, indent)
continue
print('%s%s' % (indent, here))
from flow import EmptyWallet, NormalSystem, FactoryMenu, VirginSystem
for nm, m in [
('No PIN Set', VirginSystem),
('Empty Wallet', EmptyWallet),
('Normal', NormalSystem),
('Factory Mode', FactoryMenu),
]:
dump_menu(m, nm, '')
print()
doit()