ñÕYfÝ)ã@s(dddgZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z ddlm Z dd l m Z ejd Zejj oÒeejjd ƒƒZyejZejZWnek r dZdZYnXy ejZWnek r9d d „ZYnXyddlmZm Z!Wne"k rrdZZ!YnXdd„Z#e#ƒZ$[#dd„Z%Gdd„dƒZ&dd„Ze'ƒZ(dd„Zej)e&fZ*edk róe*ef7Z*edk r efe*Z*dd„Z+dd„Z,dS)Ú coroutineÚiscoroutinefunctionÚ iscoroutineéNé)Úcompat)Úevents)Úfutures)ÚloggerZ YIELD_FROMZPYTHONASYNCIODEBUGcCsdS)NF©)Úfuncr r ú7/opt/alt/python35/lib64/python3.5/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__:sz*has_yield_from_bug..MyGen.__init__cSs|S)Nr )rr r r Ú__iter__<sz*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 ÚMyGen9s    rcss |EdHdS)Nr )Úgenr r r Úyield_from_genCsz*has_yield_from_bug..yield_from_genréé)rrr)Únextrr)rrÚvaluerÚcoror r r Úhas_yield_from_bug8s     r"cCs t|dƒS)N)Ú CoroWrapper)rr r r Ú debug_wrapperOsr$c@s3eZdZddd„Zdd„Zdd„Zdd „ZerTd d „Zn d d „Zddd 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"„ƒZd#d$„ZdS)%r#NcCs…tj|ƒs*tj|ƒs*t|ƒ‚||_||_tjtj dƒƒ|_ t |ddƒ|_ t |ddƒ|_ dS)Nrrr)ÚinspectÚ isgeneratorrÚAssertionErrorrr Ú tracebackÚ extract_stackÚsysÚ _getframeÚ_source_tracebackÚgetattrrr)rrr r r r rZs *  zCoroWrapper.__init__cCsRt|ƒ}|jr>|jd}|d|d|df7}d|jj|fS)Nrz, created at %s:%srz<%s %s>éÿÿÿÿ)Ú_format_coroutiner,Ú __class__r)rÚ coro_reprÚframer r r Ú__repr__bs    zCoroWrapper.__repr__cCs|S)Nr )rr r r riszCoroWrapper.__iter__cCs|jjdƒS)N)rr)rr r r rlszCoroWrapper.__next__cGs]tjƒ}|j}|jdks*t‚|jj|jtkrM|d}|jj |ƒS)Nr) r*r+Úf_backÚf_lastir'Úf_codeÚco_codeÚ _YIELD_FROMrr)rr r2Zcallerr r r rts    zCoroWrapper.sendcCs|jj|ƒS)N)rr)rr r r r r|scCs|jj|||ƒS)N)rÚthrow)rÚtyper r(r r r r9szCoroWrapper.throwcCs |jjƒS)N)rÚclose)rr r r r;‚szCoroWrapper.closecCs |jjS)N)rÚgi_frame)rr r r r<…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_codecCs@t|jddƒ}|dk r<tdj|j|ƒƒ‚|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 rC›szCoroWrapper.gi_yieldfromcCs |jjS)N)rr?)rr r r r?ŸszCoroWrapper.cr_awaitcCs |jjS)N)rÚ cr_running)rr r r rD£szCoroWrapper.cr_runningcCs |jjS)N)rÚcr_code)rr r r rE§szCoroWrapper.cr_codecCs |jjS)N)rÚcr_frame)rr r r rF«szCoroWrapper.cr_framecCsÂt|ddƒ}t|ddƒ}|dkrBt|ddƒ}|dk r¾|jd kr¾d|}t|dfƒ}|r±djtj|ƒƒ}|d7}||jƒ7}tj|ƒdS) Nrr<rFrz%r was never yielded fromr,Úz6 Coroutine object created at (most recent call last): r.)r-r5Újoinr(Ú format_listÚrstripr Úerror)rrr2ÚmsgÚtbr r r Ú__del__¯s   zCoroWrapper.__del__)rrrrr3rrÚ_YIELD_FROM_BUGrr9r;Úpropertyr<r=r>rZPY35rBrCr?rDrErFrNr r r r r#Ws(        r#cs¤tˆƒrˆStjˆƒr(ˆ‰n!tjˆƒ‡fdd†ƒ‰tsstdkrdˆ}q—tˆƒ}n$tjˆƒ‡‡fdd†ƒ}t|_|S)z„Decorator to mark coroutines. If the coroutine is not yielded from before it is destroyed, an error message is logged. c ?s™ˆ||Ž}tj|ƒs<tj|ƒs<t|tƒrJ|EdH}nKtdk r•y |j}Wntk rwYnXt|tƒr•|ƒEdH}|S)N) rZisfuturer%r&Ú isinstancer#Ú _AwaitableABCrBÚAttributeError)ÚargsÚkwÚresZ await_meth)r r r r!Ðs   zcoroutine..coroNcs\tˆ||Ždˆƒ}|jr.|jd=tˆddƒ|_tˆddƒ|_|S)Nr rrrr.)r#r,r-rr)rTÚkwdsÚw)r!r r r Úwrapperès   zcoroutine..wrapper)Ú_inspect_iscoroutinefunctionr%ÚisgeneratorfunctionÚ functoolsÚwrapsÚ_DEBUGÚ_types_coroutineÚ _is_coroutine)r rYr )r!r r rÀs  !  $ cCs"t|ddƒtkp!t|ƒS)z6Return True if func is a decorated coroutine function.r`N)r-r`rZ)r r r r rýscCs t|tƒS)z)Return True if obj is a coroutine object.)rQÚ_COROUTINE_TYPES)Úobjr r r r sc "Csxt|ƒst‚t|dƒ rÉt|dƒ rÉt|dt|dt|ƒjƒƒ}dj|ƒ}d}y |j}Wn4tk r±y |j }Wntk r¬YnXYnX|rÅdj|ƒS|Sd}t |t ƒr|j }|j }|dk rdj|ƒ}n|}|dkr5tj|fiƒ}y |j}Wntk r_|j}YnXy |j}Wntk rŠ|j}YnX|j}d}t |t ƒr-tj|j ƒ r-|j dk r-tj|j ƒ}|dk rõ|\}}|dkrd |||f} qtd |||f} nG|dk rX|j}d |||f} n|j}d |||f} | S) NrEr>rrz{}()Fz {} runningrz%s done, defined at %s:%sz%s running, defined at %s:%sz%s running at %s:%s)rr'Úhasattrr-r:rrArDrSr=rQr#r rrZ_format_callbackr>rEr<rFÚ co_filenamer%r[Z_get_function_sourceÚf_linenoÚco_firstlineno) r!Z coro_nameZrunningr Z coro_codeZ coro_frameÚfilenameÚlinenoÚsourcer1r r r r/sn                      r/)-Ú__all__r\r%ZopcodeÚosr*r(ÚtypesrGrrrÚlogr Zopmapr8ÚflagsÚignore_environmentÚboolÚenvironÚgetr^rr_Ú CoroutineTypeZ_types_CoroutineTyperSrrZÚcollections.abcrZ _CoroutineABCrrRÚ ImportErrorr"rOr$r#Úobjectr`Ú GeneratorTyperarr/r r r r ÚsX                   i :