2323 asynccontextmanager as acm ,
2424 contextmanager as cm ,
2525)
26+ from functools import partial
2627from typing import (
2728 Generator ,
2829 Any ,
3233 Outcome ,
3334 acapture ,
3435)
35- import pdbp
3636from msgspec import Struct
3737import trio
3838from trio ._core ._run import (
@@ -206,6 +206,8 @@ async def _start_wrapped_in_scope(
206206def add_task_handle_and_crash_handling (
207207 nursery : Nursery ,
208208
209+ debug_mode : bool = False ,
210+
209211) -> Generator [
210212 Any ,
211213 Outcome ,
@@ -246,7 +248,9 @@ def add_task_handle_and_crash_handling(
246248 # a REPL on std errors.
247249 except Exception as err :
248250 print (f'{ task .name } crashed, entering debugger!' )
249- pdbp .xpm ()
251+ if debug_mode :
252+ import pdbp
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