1 Commits

Author SHA1 Message Date
vegardbm 3091bfd4ff cli: let me quit 2026-05-30 23:58:17 +02:00
4 changed files with 50 additions and 44 deletions
+1 -4
View File
@@ -3,7 +3,7 @@ debug = true
debug_sql = false debug_sql = false
[database] [database]
# One of (sqlite, postgresql) # One of (sqlite, postgres)
type = 'sqlite' type = 'sqlite'
[database.sqlite] [database.sqlite]
@@ -38,6 +38,3 @@ dryrun = false
warn_days_before_borrowing_deadline = [ 5, 1 ] warn_days_before_borrowing_deadline = [ 5, 1 ]
days_before_queue_position_expires = 14 days_before_queue_position_expires = 14
warn_days_before_expiring_queue_position_deadline = [ 3, 1 ] warn_days_before_expiring_queue_position_deadline = [ 3, 1 ]
[general]
quit_allowed = true
Generated
+4 -4
View File
@@ -7,11 +7,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1780178524, "lastModified": 1769338528,
"narHash": "sha256-2PcNyNqbGCWBpAMdCU1HxSQmhQiG6evdjxVnPA7w5bQ=", "narHash": "sha256-t18ZoSt9kaI1yde26ok5s7aFLkap1Q9+/2icVh2zuaE=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "2406de41ce9d0a1404cbf4e55537e3f720f37f23", "rev": "7218348163fd8d84df4a6f682c634793e67a3fed",
"revCount": 15, "revCount": 13,
"type": "git", "type": "git",
"url": "https://git.pvv.ntnu.no/Projects/libdib.git" "url": "https://git.pvv.ntnu.no/Projects/libdib.git"
}, },
+43 -33
View File
@@ -16,7 +16,6 @@ from worblehat.models import *
from worblehat.services import ( from worblehat.services import (
create_bookcase_item_from_isbn, create_bookcase_item_from_isbn,
is_valid_isbn, is_valid_isbn,
Config,
) )
from .subclis import ( from .subclis import (
@@ -48,13 +47,26 @@ class WorblehatCli(NumberedCmd):
self.sql_session_dirty = False self.sql_session_dirty = False
self.prompt_header = None self.prompt_header = None
def run_with_safe_exit_wrapper(self) -> None: @classmethod
def run_with_safe_exit_wrapper(cls, sql_session: Session) -> None:
tool = cls(sql_session)
while True: while True:
try: try:
self.cmdloop() tool.cmdloop()
except KeyboardInterrupt: except KeyboardInterrupt:
print("\n\n-----------------\n") if not tool.sql_session_dirty:
self.do_exit("Exit") exit(0)
try:
print()
if prompt_yes_no(
"Are you sure you want to exit without saving?",
default=False,
):
raise KeyboardInterrupt
except KeyboardInterrupt:
if tool.sql_session is not None:
tool.sql_session.rollback()
exit(0)
def do_show_bookcase(self, arg: str) -> None: def do_show_bookcase(self, arg: str) -> None:
bookcase_selector = InteractiveItemSelector( bookcase_selector = InteractiveItemSelector(
@@ -121,36 +133,35 @@ class WorblehatCli(NumberedCmd):
"""), """),
) )
with self.sql_session.no_autoflush: print("Please select the bookcase where the item is placed:")
print("Please select the bookcase where the item is placed:") bookcase_selector = InteractiveItemSelector(
bookcase_selector = InteractiveItemSelector( cls=Bookcase,
cls=Bookcase, sql_session=self.sql_session,
sql_session=self.sql_session, )
) bookcase_selector.cmdloop()
bookcase_selector.cmdloop() bookcase = bookcase_selector.result
bookcase = bookcase_selector.result if bookcase == None:
if bookcase == None: return
return
bookcase_item.shelf = select_bookcase_shelf(bookcase, self.sql_session) bookcase_item.shelf = select_bookcase_shelf(bookcase, self.sql_session)
print("Please select the items media type:") print("Please select the items media type:")
media_type_selector = InteractiveItemSelector( media_type_selector = InteractiveItemSelector(
cls=MediaType, cls=MediaType,
sql_session=self.sql_session, sql_session=self.sql_session,
default=self.sql_session.scalars( default=self.sql_session.scalars(
select(MediaType).where(MediaType.name.ilike("book")), select(MediaType).where(MediaType.name.ilike("book")),
).one(), ).one(),
) )
media_type_selector.cmdloop() media_type_selector.cmdloop()
bookcase_item.media_type = media_type_selector.result bookcase_item.media_type = media_type_selector.result
if bookcase_item.media_type == None: if bookcase_item.media_type == None:
return return
username = input("Who owns this book? [PVV]> ") username = input("Who owns this book? [PVV]> ")
if username != "": if username != "":
bookcase_item.owner = username bookcase_item.owner = username
self.sql_session.add(bookcase_item) self.sql_session.add(bookcase_item)
self.sql_session.flush() self.sql_session.flush()
@@ -235,8 +246,7 @@ class WorblehatCli(NumberedCmd):
self.sql_session.commit() self.sql_session.commit()
else: else:
self.sql_session.rollback() self.sql_session.rollback()
if Config["general.quit_allowed"]: exit(0)
exit(0)
funcs = { funcs = {
0: { 0: {
+1 -2
View File
@@ -65,8 +65,7 @@ def main() -> None:
if args.command == "cli": if args.command == "cli":
sql_session = _connect_to_database(echo=Config["logging.debug_sql"]) sql_session = _connect_to_database(echo=Config["logging.debug_sql"])
worblehat = WorblehatCli(sql_session) WorblehatCli.run_with_safe_exit_wrapper(sql_session)
worblehat.run_with_safe_exit_wrapper()
exit(0) exit(0)
if args.command == "create-db": if args.command == "create-db":