î j fC%ã@súdddgZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z ddlm Z dd l m Z ejd Zejj oÒeejjd ƒƒZy ejZWnek rüdZYnXy ejZWnek r*d d „ZYnXyddlmZmZWne k rcdZZYnXdd„Z!e!ƒZ"[!dd„Z#Gdd„dƒZ$dd„Zdd„Zej%e$fZ&edk rÞe&ef7Z&ndd„Z'dd„Z(dS)Ú coroutineÚiscoroutinefunctionÚ iscoroutineéNé)Úcompat)Úevents)Úfutures)ÚloggerZ YIELD_FROMZPYTHONASYNCIODEBUGcCsdS)NF©)Úfuncr r ú7/opt/alt/python34/lib64/python3.4/asyncio/coroutines.pyÚ*sr )Ú CoroutineÚ AwaitablecCsaGdd„dƒ}dd„}d}|ƒ}||ƒ}t|ƒ|j|ƒ|j|fkS) Nc@s@eZdZdd„Zdd„Zdd„Zdd„Zd S) z!has_yield_from_bug..MyGencSs d|_dS)N)Ú send_args)Úselfr r r Ú__init__6sz*has_yield_from_bug..MyGen.__init__cSs|S)Nr )rr r r Ú__iter__8sz*has_yield_from_bug..MyGen.__iter__cSsdS)Né*r )rr r r Ú__next__:sz*has_yield_from_bug..MyGen.__next__cWs ||_dS)N)r)rZwhatr r r Úsend<s z&has_yield_from_bug..MyGen.sendN)Ú__name__Ú __module__Ú __qualname__rrrrr r r r ÚMyGen5s    rcss |DdHdS)Nr )Úgenr r r Úyield_from_gen?sz*has_yield_from_bug..yield_from_genréé)rrr)Únextrr)rrÚvaluerÚcoror r r Úhas_yield_from_bug4s     r"cCs t|dƒS)N)Ú CoroWrapper)rr r r Ú debug_wrapperKsr$c@s0eZdZddd„Zdd„Zdd„Zdd „ZerTd d „Zn d d „Zd d„Z dd„Z e dd„ƒZ e dd„ƒZ e dd„ƒZejr dd„Ze dd„ƒZe dd„ƒZe dd„ƒZe dd „ƒZe d!d"„ƒZnd#d$„ZdS)%r#NcCs[||_||_tjtjdƒƒ|_t|ddƒ|_t|ddƒ|_ dS)Nrrr) rr Ú tracebackÚ extract_stackÚsysÚ _getframeÚ_source_tracebackÚgetattrrr)rrr r r r rVs   zCoroWrapper.__init__cCsUt|ƒ}|jrA|jd}|d|d|df7}nd|jj|fS)Nrz, created at %s:%srz<%s %s>éÿÿÿÿ)Ú_format_coroutiner)Ú __class__r)rÚ coro_reprÚframer r r Ú__repr__^s    zCoroWrapper.__repr__cCs|S)Nr )rr r r reszCoroWrapper.__iter__cCs|jjdƒS)N)rr)rr r r rhszCoroWrapper.__next__cGsKtjƒ}|j}|jj|jtkr;|d}n|jj|ƒS)Nr) r'r(Úf_backÚf_codeÚco_codeÚf_lastiÚ _YIELD_FROMrr)rr r/Zcallerr r r rps    zCoroWrapper.sendcCs|jj|ƒS)N)rr)rr r r r rxscCs|jj|ƒS)N)rÚthrow)rÚexcr r r r6{szCoroWrapper.throwcCs |jjƒS)N)rÚclose)rr r r r8~szCoroWrapper.closecCs |jjS)N)rÚgi_frame)rr r r r9�szCoroWrapper.gi_framecCs |jjS)N)rÚ gi_running)rr r r r:…szCoroWrapper.gi_runningcCs |jjS)N)rÚgi_code)rr r r r;‰szCoroWrapper.gi_codecCsCt|jddƒ}|dk r?tdj|j|ƒƒ‚n|S)NÚcr_awaitz;Cannot await on coroutine {!r} while it's awaiting for {!r})r*rÚ RuntimeErrorÚformat)rr<r r r Ú __await__�s  zCoroWrapper.__await__cCs |jjS)N)rÚ gi_yieldfrom)rr r r r@—szCoroWrapper.gi_yieldfromcCs |jjS)N)rr<)rr r r r<›szCoroWrapper.cr_awaitcCs |jjS)N)rÚ cr_running)rr r r rAŸszCoroWrapper.cr_runningcCs |jjS)N)rÚcr_code)rr r r rB£szCoroWrapper.cr_codecCs |jjS)N)rÚcr_frame)rr r r rC§szCoroWrapper.cr_framecCsËt|ddƒ}t|ddƒ}|dkrEt|ddƒ}n|dk rÇ|jd krÇd|}t|dfƒ}|r·djtj|ƒƒ}|d7}||jƒ7}ntj|ƒndS) Nrr9rCrz%r was never yielded fromr)Úz6 Coroutine object created at (most recent call last): r+)r*r4Újoinr%Ú format_listÚrstripr Úerror)rrr/ÚmsgÚtbr r r Ú__del__«s   zCoroWrapper.__del__)rrrrr0rrÚ_YIELD_FROM_BUGrr6r8Úpropertyr9r:r;rZPY35r?r@r<rArBrCrKr r r r r#Ss(         r#cs¤tˆƒrˆStjˆƒr(ˆ‰n!tjˆƒ‡fdd†ƒ‰tsstdkrdˆ}q—tˆƒ}n$tjˆƒ‡‡fdd†ƒ}d|_|S)z„Decorator to mark coroutines. If the coroutine is not yielded from before it is destroyed, an error message is logged. c ?s“ˆ||Ž}t|tjƒs0tj|ƒr>|DdH}nQtdk r�y |j}Wntk rkYq�Xt|tƒr�|ƒDdH}q�n|S)N)Ú isinstancerZFutureÚinspectZ isgeneratorÚ _AwaitableABCr?ÚAttributeError)ÚargsÚkwÚresZ await_meth)r r r r!Ìs!   zcoroutine..coroNcs_tˆ||Ždˆƒ}|jr1|jd=ntˆddƒ|_tˆddƒ|_|S)Nr rrrr+)r#r)r*rr)rRÚkwdsÚw)r!r r r Úwrapperãs   zcoroutine..wrapperT)Ú_inspect_iscoroutinefunctionrOÚisgeneratorfunctionÚ functoolsÚwrapsÚ_DEBUGÚ_types_coroutineÚ _is_coroutine)r rWr )r!r r r¼s  !  $ cCst|ddƒpt|ƒS)z6Return True if func is a decorated coroutine function.r^F)r*rX)r r r r rôscCs t|tƒS)z)Return True if obj is a coroutine object.)rNÚ_COROUTINE_TYPES)Úobjr r r rÿsc Csµd}t|tƒrH|j}|j}|dk rNdj|ƒ}qNn|}|dkrotj|fƒ}ny |j}Wntk r™|j }YnXy |j }Wntk rÄ|j }YnX|j }d}t|tƒrjt j|jƒ rj|jdk rjtj|jƒ}|dk r2|\}}n|dkrTd|||f}q±d|||f}nG|dk r•|j}d|||f}n|j}d|||f}|S)Nz{}()rz%s done, defined at %s:%sz%s running, defined at %s:%sz%s running at %s:%s)rNr#r rr>rZ_format_callbackr;rQrBr9rCÚ co_filenamerOrYZ_get_function_sourceÚf_linenoÚco_firstlineno) r!Z coro_namer Z coro_codeZ coro_frameÚfilenameÚlinenoÚsourcer.r r r r,sL              r,))Ú__all__rZrOZopcodeÚosr'r%ÚtypesrDrrrÚlogr Zopmapr5ÚflagsÚignore_environmentÚboolÚenvironÚgetr\rr]rQrrXZcollections.abcrZ _CoroutineABCrrPÚ ImportErrorr"rLr$r#Ú GeneratorTyper_rr,r r r r ÚsN                  i 8