11# This code implements a clone of the asyncio mainloop which hooks into
22# Trio.
33
4+ import inspect
45import trio_asyncio
56
67# import logging
1213
1314
1415def trio2aio (proc ):
15- """Decorate an asyncio function so that it's callable by Trio (only)."""
16+ if inspect .isasyncgenfunction (proc ):
17+ @wraps (proc )
18+ def call (* args , ** kwargs ):
19+ proc_ = proc
20+ if kwargs :
21+ proc_ = partial (proc_ , ** kwargs )
22+ return trio_asyncio .wrap_generator (proc_ , * args )
1623
17- @wraps (proc )
18- async def call (* args , ** kwargs ):
19- if kwargs :
20- proc_ = partial (proc , ** kwargs )
21- else :
24+ else :
25+ @wraps (proc )
26+ async def call (* args , ** kwargs ):
2227 proc_ = proc
23- return await trio_asyncio .run_asyncio (proc_ , * args )
28+ if kwargs :
29+ proc_ = partial (proc_ , ** kwargs )
30+ return await trio_asyncio .run_asyncio (proc_ , * args )
2431
2532 return call
2633
@@ -30,10 +37,9 @@ def aio2trio(proc):
3037
3138 @wraps (proc )
3239 async def call (* args , ** kwargs ):
40+ proc_ = proc
3341 if kwargs :
34- proc_ = partial (proc , ** kwargs )
35- else :
36- proc_ = proc
42+ proc_ = partial (proc_ , ** kwargs )
3743 return await trio_asyncio .run_trio (proc_ , * args )
3844
3945 return call
@@ -42,10 +48,9 @@ async def call(*args, **kwargs):
4248def aio2trio_task (proc ):
4349 @wraps (proc )
4450 async def call (* args , ** kwargs ):
51+ proc_ = proc
4552 if kwargs :
46- proc_ = partial (proc , ** kwargs )
47- else :
48- proc_ = proc
53+ proc_ = partial (proc_ , ** kwargs )
4954 trio_asyncio .run_trio_task (proc_ , * args )
5055
5156 return call
0 commit comments