Compare commits
3 Commits
7a642edf7a
...
8a83a68e3e
Author | SHA1 | Date |
---|---|---|
|
8a83a68e3e | |
|
e885a18b0c | |
|
466c68896e |
|
@ -44,7 +44,7 @@ dependencies = [
|
|||
"colorlog>=6.8.2,<7",
|
||||
# built-in multi-actor `pdb` REPL
|
||||
"pdbp>=1.6,<2", # windows only (from `pdbp`)
|
||||
"tabcompleter>=1.4.0",
|
||||
"tabcompleter>=1.4.0",
|
||||
# typed IPC msging
|
||||
# TODO, get back on release once 3.13 support is out!
|
||||
"msgspec>=0.19.0",
|
||||
|
@ -57,7 +57,7 @@ dev = [
|
|||
# test suite
|
||||
# TODO: maybe some of these layout choices?
|
||||
# https://docs.pytest.org/en/8.0.x/explanation/goodpractices.html#choosing-a-test-layout-import-rules
|
||||
"pytest>=8.2.0,<9",
|
||||
"pytest>=3.8.5",
|
||||
"pexpect>=4.9.0,<5",
|
||||
# `tractor.devx` tooling
|
||||
"greenback>=1.2.1,<2",
|
||||
|
|
|
@ -23,12 +23,10 @@ import asyncio
|
|||
from asyncio.exceptions import (
|
||||
CancelledError,
|
||||
)
|
||||
from asyncio import (
|
||||
QueueShutDown,
|
||||
)
|
||||
from contextlib import asynccontextmanager as acm
|
||||
from dataclasses import dataclass
|
||||
import inspect
|
||||
import platform
|
||||
import traceback
|
||||
from typing import (
|
||||
Any,
|
||||
|
@ -79,6 +77,20 @@ __all__ = [
|
|||
'run_as_asyncio_guest',
|
||||
]
|
||||
|
||||
if (_py_313 := (
|
||||
('3', '13')
|
||||
==
|
||||
platform.python_version_tuple()[:-1]
|
||||
)
|
||||
):
|
||||
# 3.13+ only.. lel.
|
||||
# https://docs.python.org/3.13/library/asyncio-queue.html#asyncio.QueueShutDown
|
||||
from asyncio import (
|
||||
QueueShutDown,
|
||||
)
|
||||
else:
|
||||
QueueShutDown = False
|
||||
|
||||
|
||||
# TODO, generally speaking we can generalize this abstraction, a "SC linked
|
||||
# parent->child task pair", as the same "supervision scope primitive"
|
||||
|
@ -575,7 +587,11 @@ def _run_asyncio_task(
|
|||
# normally suppressed unless the trio.Task also errors
|
||||
#
|
||||
# ?TODO, is this even needed (does it happen) now?
|
||||
elif isinstance(aio_err, QueueShutDown):
|
||||
elif (
|
||||
_py_313
|
||||
and
|
||||
isinstance(aio_err, QueueShutDown)
|
||||
):
|
||||
# import pdbp; pdbp.set_trace()
|
||||
trio_err = AsyncioTaskExited(
|
||||
'Task exited before `trio` side'
|
||||
|
@ -955,9 +971,10 @@ async def translate_aio_errors(
|
|||
# or an error, we ensure the aio-side gets signalled via
|
||||
# an explicit exception and its `Queue` is shutdown.
|
||||
if ya_trio_exited:
|
||||
# raise `QueueShutDown` on next `Queue.get()` call on
|
||||
# aio side.
|
||||
chan._to_aio.shutdown()
|
||||
# XXX py3.13+ ONLY..
|
||||
# raise `QueueShutDown` on next `Queue.get/put()`
|
||||
if _py_313:
|
||||
chan._to_aio.shutdown()
|
||||
|
||||
# pump this event-loop (well `Runner` but ya)
|
||||
#
|
||||
|
|
2
uv.lock
2
uv.lock
|
@ -390,7 +390,7 @@ dev = [
|
|||
{ name = "pexpect", specifier = ">=4.9.0,<5" },
|
||||
{ name = "prompt-toolkit", specifier = ">=3.0.50" },
|
||||
{ name = "pyperclip", specifier = ">=1.9.0" },
|
||||
{ name = "pytest", specifier = ">=8.2.0,<9" },
|
||||
{ name = "pytest", specifier = ">=3.8.5" },
|
||||
{ name = "stackscope", specifier = ">=0.2.2,<0.3" },
|
||||
{ name = "xonsh", specifier = ">=0.19.2" },
|
||||
]
|
||||
|
|
Loading…
Reference in New Issue