3 C\@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@x:2dHy 3dH}Wntk r,YWq.collect)r)r rr)r r r concat_asyncs rcOst||}yHxB|j|j|2dHy 3dH}Wntk rDYWqPX|Vq"WWntk rntj}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)r_stack_depth_contextZeval_ctx autoescaper)rr rrr async_callSs z-wrap_block_reference_call..async_callcs|jjjs|S|S)N)r1rr#)r)r3 original_callrr__call__Zs z+wrap_block_reference_call..__call__)rr)r4r5r)r3r4rwrap_block_reference_callRs r6cs(tddtfdd}t|S)Ncs |j|IdH}|rt|}|S)N)Z_funcr)r argumentsr2r rrr async_invokedsz'wrap_macro_invoke..async_invokecs |jjs|||S|||S)N)Z _environmentr#)rr7r2)r8original_invokerr_invokeks z"wrap_macro_invoke.._invoke)rr)r9r:r)r8r9rwrap_macro_invokecs r;cs(|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{srAFc s`|j|||}g}x@|j|2dHy 3dH}Wntk rDYWqTX|j|q"Wt|||S)N)rrr r r)rrZsharedlocalscontextZ body_streamitemrrrr=s 4r=cCsdddlm}t|j|_tt|j|_tt|j|_t|j|_t |j |_ t |_ tt |j |_ dS)Nr)Template)Zjinja2rEr(r'rrr+r.r-rAr@r>Z_get_default_module_asyncr=)rErrrpatch_templates      rFcCs,ddlm}m}t|j|_t|j|_dS)Nr)BlockReferenceMacro)jinja2.runtimerGrHr6r5r;r:)rGrHrrr patch_runtimes rJcCs&ddlm}ddlm}|j|dS)Nr)FILTERS) ASYNC_FILTERS)Zjinja2.filtersrKZjinja2.asyncfiltersrLupdate)rKrLrrr patch_filterss  rNcCstttdS)N)rFrJrNrrrr patch_allsrOcstj|r|IdHS|S)N)inspect isawaitable)valuerrr auto_awaits  rSc Cs^t|drFx6|2dHy 3dH}Wntk r6YWqBX|VqWdSx|D] }|VqLWdS)N __aiter__)hasattrr )iterablerDrrr auto_aiters  .  rWc@s*eZdZd ddZeddZddZdS) AsyncLoopContextNrcCs&tj||||||_||_||_dS)N)r__init___async_iterator_after_length)rasync_iterator undefinedafterlengthrecursedepth0rrrrYszAsyncLoopContext.__init__cCs|jdkrtd|jS)NzHLoop length for some iterators cannot be lazily calculated in async mode)r\ TypeError)rrrrr`s zAsyncLoopContext.lengthcCst|S)N)AsyncLoopContextIterator)rrrrrTszAsyncLoopContext.__aiter__)Nr)__name__ __module__ __qualname__rYpropertyr`rTrrrrrXs  rXc@s(eZdZd ZddZddZddZdS) rdrCcCs ||_dS)N)rC)rrCrrrrYsz!AsyncLoopContextIterator.__init__cCs|S)Nr)rrrrrTsz"AsyncLoopContextIterator.__aiter__c sp|j}|jd7_|jtkr$t|j|_|j|_y|jjIdH|_Wntk rdt|_YnX|j|fS)N) rCZindex0r[rr _currentZ_beforerZr )rr*rrrr s  z"AsyncLoopContextIterator.__anext__N)rC)rerfrg __slots__rYrTr rrrrrdsrdcsy t|}Wn8ttfk rDt|dsrAr=rFrJrNrOrSrWrXobjectrdrorrrr s4