home
·
contact
·
privacy
projects
/
ircplom
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
dd354b7
)
Ensure Terminal context manager actually gets to finish (i.e. turn cursor visible...
master
author
Christian Heller
<c.heller@plomlompom.de>
Mon, 6 Oct 2025 22:12:31 +0000
(
00:12
+0200)
committer
Christian Heller
<c.heller@plomlompom.de>
Mon, 6 Oct 2025 22:12:31 +0000
(
00:12
+0200)
src/run.py
patch
|
blob
|
history
diff --git
a/src/run.py
b/src/run.py
index 90c03cd34bca15ef2d2f7159ec5542ed95c82680..0c54b38a5c5f15421fff89947a8ce8a4d3077e8c 100755
(executable)
--- a/
src/run.py
+++ b/
src/run.py
@@
-5,10
+5,11
@@
from pathlib import Path
from queue import SimpleQueue
from sys import argv, exit as sys_exit
from pathlib import Path
from queue import SimpleQueue
from sys import argv, exit as sys_exit
+from typing import Optional
# non-standard libs
from plomlib.setup import dependency_hint
try:
# non-standard libs
from plomlib.setup import dependency_hint
try:
- from ircplom.events import ExceptionEvent, QuitEvent
+ from ircplom.events import
CrashingException,
ExceptionEvent, QuitEvent
from ircplom.client import ClientsDb, ClientEvent, NewClientEvent
from ircplom.tui_base import BaseTui, Terminal, TerminalInterface, TuiEvent
from ircplom.client_tui import ClientTui
from ircplom.client import ClientsDb, ClientEvent, NewClientEvent
from ircplom.tui_base import BaseTui, Terminal, TerminalInterface, TuiEvent
from ircplom.client_tui import ClientTui
@@
-23,6
+24,7
@@
def main_loop(cls_term: type[TerminalInterface], cls_tui: type[BaseTui]
q_events: SimpleQueue = SimpleQueue()
clients_db: ClientsDb = {}
try:
q_events: SimpleQueue = SimpleQueue()
clients_db: ClientsDb = {}
try:
+ to_raise: Optional[CrashingException] = None
with cls_term(_q_out=q_events).setup() as term:
tui = cls_tui(_q_out=q_events, term=term)
while True:
with cls_term(_q_out=q_events).setup() as term:
tui = cls_tui(_q_out=q_events, term=term)
while True:
@@
-30,13
+32,16
@@
def main_loop(cls_term: type[TerminalInterface], cls_tui: type[BaseTui]
if isinstance(event, QuitEvent):
break
if isinstance(event, ExceptionEvent):
if isinstance(event, QuitEvent):
break
if isinstance(event, ExceptionEvent):
- raise event.exception
+ to_raise = event.exception
+ break
if isinstance(event, TuiEvent):
event.affect(tui)
elif isinstance(event, NewClientEvent):
event.affect(clients_db)
elif isinstance(event, ClientEvent):
event.affect(clients_db[event.client_id])
if isinstance(event, TuiEvent):
event.affect(tui)
elif isinstance(event, NewClientEvent):
event.affect(clients_db)
elif isinstance(event, ClientEvent):
event.affect(clients_db[event.client_id])
+ if to_raise:
+ raise to_raise
finally:
for client in clients_db.values():
client.close()
finally:
for client in clients_db.values():
client.close()