U kf @sTddlmZddlZddlZddlmZddlmZddlmZddlmZdZdZ z ddl Z Wn*e k rZ z e e Z W5dZ [ XYnZXdZd d lmZd d lmZd d lmZd d lmZd dlmZd dlmZd dlmZedZGdddZejsPesPddZddZddZddZddZddZd d!Zd"d#Zd$d%ZdS)&) annotationsN)Any)Callable) Coroutine)TypeVarFT) await_only)await_fallback) in_greenlet)greenlet_spawn)is_exit_exception)AsyncAdaptedLock)_Runner_Tc@sTeZdZdZddddZddddd d d Zd dddd d dZddddZdS) _AsyncUtilz&Asyncio util for test suite/ util onlyNone)returncCstr t|_dSN) have_greenletrrunnerselfrK/opt/hc_python/lib64/python3.8/site-packages/sqlalchemy/util/concurrency.py__init__)sz_AsyncUtil.__init__z&Callable[..., Coroutine[Any, Any, _T]]rr)fnargskwargsrcOs|j|||S)zRun coroutine on the loop)rrunrrrrrrrr-sz_AsyncUtil.runzCallable[..., _T]cOsDtr6|jr|||S|jt|f||Sn |||SdS)z3Run sync function in greenlet. Support nested callsN)rrZget_loopZ is_runningrr rrrrrun_in_greenlet6s  z_AsyncUtil.run_in_greenletcCstr|jdSr)rrcloserrrrr!Bsz_AsyncUtil.closeN)__name__ __module__ __qualname____doc__rrr r!rrrrr&s   rcCs trdSttrdtnddS)Nz9the greenlet library is required to use this function. %s)r ValueErrorgreenlet_errorrrrr_not_implementedIsr)cCs t|t Sr) isinstance Exception)errrr Vsr cCs tdSrr)thingrrrrYsrcCs|Srrr.rrrr \sr cCs tdSrr-rrrrr _sr cOs tdSrr-)rrkwrrrr bsr cOs tdSrr-)rr0rrrr esr cOs |||Srrrargr0rrr_util_async_runhsr3cOs tdSrr-r1rrr"_util_async_run_coroutine_functionksr4) __future__rZasynciotypingrrrrrr(Zgreenlet ImportErrorr,strZ_concurrency_py3krr r r r r rrr TYPE_CHECKINGr)r3r4rrrr sB             !