2323 asynccontextmanager as acm ,
2424 contextmanager as cm ,
2525)
26+ from functools import partial
2627from typing import (
2728 Generator ,
2829 Any ,
@@ -206,6 +207,8 @@ async def _start_wrapped_in_scope(
206207def add_task_handle_and_crash_handling (
207208 nursery : Nursery ,
208209
210+ debug_mode : bool = False ,
211+
209212) -> Generator [
210213 Any ,
211214 Outcome ,
@@ -246,7 +249,8 @@ def add_task_handle_and_crash_handling(
246249 # a REPL on std errors.
247250 except Exception as err :
248251 print (f'{ task .name } crashed, entering debugger!' )
249- pdbp .xpm ()
252+ if debug_mode :
253+ pdbp .xpm ()
250254 raise
251255
252256 finally :
@@ -255,11 +259,15 @@ def add_task_handle_and_crash_handling(
255259
256260@acm
257261async def open_nursery (
258- task_manager = None ,
259- ** kwargs ,
262+ task_manager : Generator [Any , Outcome , None ] | None = None ,
263+
264+ ** lowlevel_nursery_kwargs ,
260265):
261- async with trio .open_nursery (** kwargs ) as nurse :
262- yield TaskManagerNursery (nurse , task_manager = task_manager )
266+ async with trio .open_nursery (** lowlevel_nursery_kwargs ) as nurse :
267+ yield TaskManagerNursery (
268+ nurse ,
269+ task_manager = task_manager ,
270+ )
263271
264272
265273async def sleep_then_return_val (val : str ):
@@ -284,7 +292,10 @@ async def ensure_cancelled():
284292
285293 async def main ():
286294 async with open_nursery (
287- task_manager = add_task_handle_and_crash_handling ,
295+ task_manager = partial (
296+ add_task_handle_and_crash_handling ,
297+ debug_mode = True ,
298+ ),
288299 ) as sn :
289300 for _ in range (3 ):
290301 outcome , _ = await sn .start_soon (trio .sleep_forever )
0 commit comments