ó ÃÒYc@s$dZddlmZddlZddlZddlZddlZddlZddlZdZ ej dkrddlm Z d„Z n$ej dd ƒZd „Z d „Z y ejZWnek rÜd „ZnXej d dƒZd„ZejdƒZdefd„ƒYZd„Zdd„ZyddlmZWn!ek riddlmZnXdefd„ƒYZe ejƒZ e!e j"ƒZ#e#dkrÉe j$ rÉd„Zee_n9e#dkráe j$rán!e#dkrd„Zee_neeƒZ%d„Z&d„Z'dS(sT Decorator module, see http://pypi.python.org/pypi/decorator for the documentation. iÿÿÿÿ(tprint_functionNs4.1.2t3(tgetfullargspeccCs|jS(N(t__init__(tcls((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pytget_init0st FullArgSpecs5args varargs varkw defaults kwonlyargs kwonlydefaultscCs tjtj|ƒgdfƒS(s?A quick and dirty replacement for getfullargspec for Python 2.XN(Rt_maketinspectt getargspectNone(tf((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pyR7scCs |jjS(N(Rt__func__(R((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pyR;scCstS(N(tFalse(R ((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pytiscoroutinefunctionBstArgSpecsargs varargs varkw defaultscCs+t|ƒ}t|j|j|j|jƒS(s$A replacement for inspect.getargspec(RRtargstvarargstvarkwtdefaults(R tspec((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pyR Js s\s*def\s*([_\w][_\w\d]*)\s*\(t FunctionMakercBs…eZdZejƒZdZZZZ Z Z dddddddd„Z d„Zded„Zeddded„ƒZRS(s´ An object with the ability to create functions with a given signature. It has attributes name, doc, module, signature, defaults, dict and methods update and make. cCsß||_|r2|j|_|jdkr6d|_n|j|_|j|_tj|ƒr2t |ƒ}t |diƒ|_ x'dD]} t || t || ƒƒq…Wx1t |jƒD] \} } t |d | | ƒq¸Wtjd krtjd d „|d Œdd!|_|_nÿt|jƒ} t|jƒ} |jrm| jd|jƒ| jd|jƒn|jr†| jdƒnx9|jD].} | jd| ƒ| jd| | fƒqW|jrö| jd|jƒ| jd|jƒndj| ƒ|_dj| ƒ|_|jjƒ|_q2n|rD||_n|dk r\||_n|rn||_n|r€||_n|r’||_n|r¤||_nt|dƒs¹t‚t|dƒsÛt d|ƒ‚ndS(Nst_lambda_t__annotations__RRRRt kwonlyargstkwonlydefaultssarg%dRt formatvaluecSsdS(Nt((tval((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pytvsiþÿÿÿiiÿÿÿÿt*s%s=Nones%s=%ss**s, tnamet signatures%You are decorating a non function: %s(sargssvarargssvarkwsdefaultss kwonlyargsskwonlydefaults(!tshortsignaturet__name__Rt__doc__tdoct __module__tmoduleRt isfunctionRtgetattrt annotationstsetattrt enumerateRtsystversiont formatargspecR tlistRtappendRRtjoint__dict__tcopytdictR RthasattrtAssertionErrort TypeError(tselftfuncRR RR$R&tfuncdicttargspectatitargtallargst allshortargs((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pyRasb        '          cKsÔ|j|_t|ddƒ|_t|diƒ|_|j|_|jpNd|_ t|ddƒ|_ yt j dƒ}Wnt k r•d}nX|jjddƒ}t|d|ƒ|_|jj|ƒdS( s2Update the signature of func with the data in selfR$R4R)it?R"R&N(RR"R(R R#R2Rt __defaults__Rt__kwdefaults__RR,t _getframetAttributeErrort f_globalstgetR%tupdate(R8R9tkwtframet callermodule((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pyRHšs    cJs~|e|ƒ}|pi}ej|ƒ}|dkrJed|ƒ‚n|jdƒ}e|gg|jjdƒD]}|j dƒ^quƒ} x3| D]+} | dkr›e d| |fƒ‚q›q›W|j dƒsæ|d7}nd e |j ƒf} ye|| d ƒ} | |UWn0ed d ejƒe|d ejƒ‚nX||} |rj||d tsinglesError in generated code:tfilet __source__N(s_func_s_call_(tvarstDEFtsearchR t SyntaxErrortgrouptsetR!tsplittstript NameErrortendswithtnextt_compile_counttcompiletprintR,tstderrRH(R8t src_templtevaldictt addsourcetattrstsrctmoRR>tnamestntfilenametcodeR9((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pytmake«s4   /      cKsæt|tƒr@|jƒjddƒ\} } | d } d } nd } d } |} || | | |||ƒ} djd„|jƒDƒƒ}|jdƒ}|rÆt|ƒrÆd|j dd ƒ}n d |}| j ||||S( sú Create a function from the strings name, signature and body. evaldict is the evaluation dictionary. If addsource is true an attribute __source__ is added to the result. The attributes attrs are added, if any. t(iiÿÿÿÿs css|]}d|VqdS(s N((t.0tline((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pys ßsRNs#async def %(name)s(%(signature)s): treturns return awaitsdef %(name)s(%(signature)s): N( t isinstancetstrRYRXR R1t splitlinesRGRtreplaceRk(RtobjtbodyRbRR$R&RcRdRtrestR R9R8tibodytcaller((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pytcreateÍs     (N(R"R%R#t itertoolstcountR]RRRRRRR RRHR Rkt classmethodtTrueRy(((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pyRTs  8 "cCsRtd|d|ƒ}tj|d|d|ƒ}t|dƒrN|j|_n|S(sE decorate(func, caller) decorates a function using a caller. RNRMs)return _call_(_func_, %(shortsignature)s)t __wrapped__t __qualname__(R4RRyR5R(R9RxRbtfun((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pytdecorateésc Csë|d k rt||ƒStj|ƒrP|jjƒ}d|j|jf}nZtj|ƒrŒ|jdkrwd}n |j}|j}n|jjjƒ}|j j}t d|dtƒ}t j d|d|d|d |j d |ƒS( s=decorator(caller) converts a caller function into a decoratorsHdecorator(%s) converts functions/generators into factories of %s objectssRt_callt _decorate_s%s(func)sreturn _decorate_(func, _call)R$R&R~N(R RRtisclassR"tlowerR'R#t __class__t__call__R4RRyR%(Rxt_funcRR$Rb((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pyt decoratorös$       (t_GeneratorContextManager(tGeneratorContextManagertContextManagercBseZd„ZRS(cCs(tj|dtd|d|ƒd|ƒS(sContext manager decorators.with _self_: return _func_(%(shortsignature)s)t_self_RMR~(RRyR4(R8R9((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pyR‡s(R"R%R‡(((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pyRŒsicOstj||||ŽƒS(N(RŠR(R8tgR<tk((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pyR#sicOstj||||ƒS(N(RŠR(R8RŽR<R((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pyR)scCsxt}xUt|ƒD]G\}}t||ƒr8t}Pnt||ƒr|||Žs(RztproductR0ttuple(Ržtlsttanc(R«Rš(s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pyt dispatch_info‡s  !csªtd„|Dƒƒ}yˆ|}Wntk r7nX|||ŽStjˆ|ŒŒ}t|ƒx6|D].}ˆj|ƒ}|dk rk|||ŽSqkWˆ||ŽS(Ncss|]}t|ƒVqdS(N(R§(RmR>((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pys ’s(R±tKeyErrorRzR°R\RGR (R™RRIRžR t combinationsR¡(R«R9R¥(s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pyt _dispatch‘s     s#return _f_(%s, %%(shortsignature)s)t_f_R¯tdefaultR¥R‘R«R´R~(RWRRRZRRyR4(R9targsetR¯R´R·(RšR™t dispatch_str(R«R9R¥R‘s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pyt gen_func_decRs    t dispatch_on(R6R1R¬tneR"(R™R¼((RšR™R»s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pyR½Ds W ((R#t __future__RtreR,RR¬Rzt collectionst __version__R-RRt namedtupleRRRERR R^RStobjectRRR R‰t contextlibRŠt ImportErrorR‹RŒRtinitR•Rtn_argsRtcontextmanagerR0R½(((s`/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/decorator/decorator.pyt!sX               •