Files
dibbler/dibbler/subcommands/loop.py
2026-02-03 23:24:37 +09:00

111 lines
2.9 KiB
Python
Executable File

#!/usr/bin/python
import random
import sys
import traceback
from signal import (
SIG_IGN,
SIGQUIT,
SIGTSTP,
)
from signal import (
signal as set_signal_handler,
)
from sqlalchemy.orm import Session
from ..conf import config
from ..menus import (
AddProductMenu,
AddStockMenu,
AddUserMenu,
AdjustCreditMenu,
AdjustStockMenu,
BalanceMenu,
BuyMenu,
CleanupStockMenu,
EditProductMenu,
EditUserMenu,
FAQMenu,
LoggedStatisticsMenu,
MainMenu,
Menu,
PrintLabelMenu,
ProductListMenu,
ProductPopularityMenu,
ProductRevenueMenu,
ProductSearchMenu,
ShowUserMenu,
TransferMenu,
UserListMenu,
)
random.seed()
def main(sql_session: Session):
if not config["general"]["stop_allowed"]:
set_signal_handler(SIGQUIT, SIG_IGN)
if not config["general"]["stop_allowed"]:
set_signal_handler(SIGTSTP, SIG_IGN)
main_menu = MainMenu(
sql_session,
items=[
BuyMenu(sql_session),
ProductListMenu(sql_session),
ShowUserMenu(sql_session),
UserListMenu(sql_session),
AdjustCreditMenu(sql_session),
TransferMenu(sql_session),
AddStockMenu(sql_session),
Menu(
"Add/edit",
sql_session,
items=[
AddUserMenu(sql_session),
EditUserMenu(sql_session),
AddProductMenu(sql_session),
EditProductMenu(sql_session),
AdjustStockMenu(sql_session),
CleanupStockMenu(sql_session),
],
),
ProductSearchMenu(sql_session),
Menu(
"Statistics",
sql_session,
items=[
ProductPopularityMenu(sql_session),
ProductRevenueMenu(sql_session),
BalanceMenu(sql_session),
LoggedStatisticsMenu(sql_session),
],
),
FAQMenu(sql_session),
PrintLabelMenu(sql_session),
],
exit_msg="happy happy joy joy",
exit_confirm_msg="Really quit Dibbler?",
)
if not config["general"]["quit_allowed"]:
main_menu.exit_disallowed_msg = (
"You can check out any time you like, but you can never leave."
)
while True:
# noinspection PyBroadException
try:
main_menu.execute()
except KeyboardInterrupt:
print("")
print("Interrupted.")
except:
print("Something went wrong.")
print(f"{sys.exc_info()[0]}: {sys.exc_info()[1]}")
if config["general"]["show_tracebacks"]:
traceback.print_tb(sys.exc_info()[2])
else:
break
print("Restarting main menu.")