dbfdg 3 sݨ\@s dZddlZddlZddlZddlmZddlmZmZm Z ddl m Z ddl m Z mZddZd d Zd d Zd dZddZddZddZeddZddZd.ddZddZddZd d!Zd"d#Zd$d%Zd&d'ZGd(d)d)e ZGd*d+d+e Z!d/d,d-Z"dS)0z jinja2.asyncsupport ~~~~~~~~~~~~~~~~~~~ Has all the code for async support which is implemented as a patch for supported Python versions. :copyright: (c) 2017 by the Jinja Team. :license: BSD, see LICENSE for more details. N)update_wrapper)concat internalcodeMarkup)TemplateModule)LoopContextBase_last_iterationcs&gfdd}|IdHtS)Nc s>x82dHy 3dH}Wn tk s.Xj|q YWdS)N)StopAsyncIterationappend)event) async_genrv"/usr/lib/python3.6/asyncsupport.pycollects"zconcat_async..collect)r)r rr)r r r concat_asyncs rcOst||}yFx@|j|j|2dHy 3dH}Wn tk sBX|Vq"YWWntk rltj}YnXdS|jj|dVdS)NT) dictroot_render_func new_contextr Exceptionsysexc_info environmenthandle_exception)selfargskwargsvarsr rrrrgenerate_asyncs .rcs ddfdd}t|S)Nc ss@|j||}yx|j|jVqWWntk r:YnXdS)N)rrun_until_complete __anext__r )rlooprrr rrr_convert_generator,s  z.wrap_generate_func.._convert_generatorcs*|jjs|f||S|tj||S)N)ris_asyncasyncioget_event_loop)rrr)r"original_generaterrgenerate3sz$wrap_generate_func..generate)r)r&r'r)r"r&rwrap_generate_func+sr(c sd|jjstdt||}|j|}yt|j|IdHStk rTtj }YnX|jj |dS)Nz8The environment was not created with async mode enabled.T) rr# RuntimeErrorrrrrrrrr)rrrrctxrrrr render_async:s  r+csfdd}t|S)Ncs2|jjs|f||Stj}|j|j||S)N)rr#r$r%rr+)rrrr!)original_renderrrrenderJsz wrap_render_func..render)r)r,r-r)r,rwrap_render_funcIs r.cs(tddtfdd}t|S)Ncs2t|j|j|jIdH}|jjjr.t|}|S)N)rZ_stackZ_depth_contextZeval_ctx autoescaper)rr rrr async_callSs z-wrap_block_reference_call..async_callcs|jjjs|S|S)N)r/rr#)r)r1 original_callrr__call__Zs z+wrap_block_reference_call..__call__)rr)r2r3r)r1r2rwrap_block_reference_callRs r4cs(tddtfdd}t|S)Ncs |j|IdH}|rt|}|S)N)Z_funcr)r argumentsr0r rrr async_invokedsz'wrap_macro_invoke..async_invokecs |jjs|||S|||S)N)Z _environmentr#)rr5r0)r6original_invokerr_invokeks z"wrap_macro_invoke.._invoke)rr)r7r8r)r6r7rwrap_macro_invokecs r9cs(|jdk r|jS|jIdH|_}|S)N)_modulemake_module_async)rr rrrget_default_module_asyncss r<cstfdd}|S)Ncs|jjrtd|S)Nz6Template module attribute is unavailable in async mode)rr#r))r)original_default_modulerr_get_default_module|sz0wrap_default_module.._get_default_module)r)r=r>r)r=rwrap_default_module{sr?Fc s^|j|||}g}x>|j|2dHy 3dH}Wn tk sFX|j|q"YWt|||S)N)rrr r r)rrZsharedlocalscontextZ body_streamitemrrrr;s (r;cCsdddlm}t|j|_tt|j|_tt|j|_t|j|_t |j |_ t |_ tt |j |_ dS)Nr)Template)Zjinja2rCr(r'rrr+r.r-r?r>r<Z_get_default_module_asyncr;)rCrrrpatch_templates      rDcCs,ddlm}m}t|j|_t|j|_dS)Nr)BlockReferenceMacro)jinja2.runtimerErFr4r3r9r8)rErFrrr patch_runtimes rHcCs&ddlm}ddlm}|j|dS)Nr)FILTERS) ASYNC_FILTERS)Zjinja2.filtersrIZjinja2.asyncfiltersrJupdate)rIrJrrr patch_filterss  rLcCstttdS)N)rDrHrLrrrr patch_allsrMcstj|r|IdHS|S)N)inspectZ isawaitable)valuerrr auto_awaits  rPc Cs\t|drDx4|2dHy 3dH}Wn tk s4X|VqYWdSx|D] }|VqJWdS)N __aiter__)hasattrr )iterablerBrrr auto_aiters  " rTc@s*eZdZd ddZeddZddZdS) AsyncLoopContextNrcCs&tj||||||_||_||_dS)N)r__init___async_iterator_after_length)rasync_iterator undefinedafterlengthrecursedepth0rrrrVszAsyncLoopContext.__init__cCs|jdkrtd|jS)NzHLoop length for some iterators cannot be lazily calculated in async mode)rY TypeError)rrrrr]s zAsyncLoopContext.lengthcCst|S)N)AsyncLoopContextIterator)rrrrrQszAsyncLoopContext.__aiter__)Nr)__name__ __module__ __qualname__rVpropertyr]rQrrrrrUs  rUc@s(eZdZd ZddZddZddZdS) rarAcCs ||_dS)N)rA)rrArrrrVsz!AsyncLoopContextIterator.__init__cCs|S)Nr)rrrrrQsz"AsyncLoopContextIterator.__aiter__c sp|j}|jd7_|jtkr$t|j|_|j|_y|jjIdH|_Wntk rdt|_YnX|j|fS)N) rAZindex0rXrr Z_currentZ_beforerWr )rr*rrrr s  z"AsyncLoopContextIterator.__anext__N)rA)rbrcrd __slots__rVrQr rrrrrasracsy t|}Wn8ttfk rDt|ds s4