10
10
import attr
11
11
import outcome
12
12
13
- from .. import _channel , _core
13
+ from .. import _core
14
14
from ._run import _public
15
15
from ._wakeup_socketpair import WakeupSocketpair
16
16
17
17
if TYPE_CHECKING :
18
18
from typing_extensions import TypeAlias
19
19
20
+ from .._channel import MemoryReceiveChannel , MemorySendChannel
20
21
from .._core import Abort , RaiseCancelT , Task
21
22
from .._file_io import _HasFileNo
22
23
@@ -36,7 +37,7 @@ class _KqueueStatistics:
36
37
class KqueueIOManager :
37
38
_kqueue : select .kqueue = attr .ib (factory = select .kqueue )
38
39
_registered : dict [
39
- tuple [int , int ], Task | _channel . MemorySendChannel [select .kevent ]
40
+ tuple [int , int ], Task | MemorySendChannel [select .kevent ]
40
41
] = attr .ib (factory = dict )
41
42
_force_wakeup : WakeupSocketpair = attr .ib (factory = WakeupSocketpair )
42
43
_force_wakeup_fd : int | None = attr .ib (default = None )
@@ -119,17 +120,19 @@ def current_kqueue(self) -> select.kqueue:
119
120
@_public
120
121
def monitor_kevent (
121
122
self , ident : int , filter : int
122
- ) -> Iterator [_channel . MemoryReceiveChannel [select .kevent ]]:
123
+ ) -> Iterator [MemoryReceiveChannel [select .kevent ]]:
123
124
"""TODO: these are implemented, but are currently more of a sketch than
124
125
anything real. See `#26
125
126
<https://github.com/python-trio/trio/issues/26>`__.
126
127
"""
128
+ from .._channel import open_memory_channel
129
+
127
130
key = (ident , filter )
128
131
if key in self ._registered :
129
132
raise _core .BusyResourceError (
130
133
"attempt to register multiple listeners for same ident/filter pair"
131
134
)
132
- send , recv = _channel . open_memory_channel [select .kevent ](math .inf )
135
+ send , recv = open_memory_channel [select .kevent ](math .inf )
133
136
self ._registered [key ] = send
134
137
try :
135
138
yield recv
0 commit comments