U /XR @s dZddlZejddkZddZesteZefZefZ ddZ ddZ ddZ dd l mZd-d d ZeZd.d d ZnPeZeefZeefZ ddZ ddZ ddZ dd lmZedddZedddZdZeedrLGdddeZz0ze eW5QRXWnYnXWn.ek r6dZYnek rJYnXzddlmZWnek rddl m!Z!Gddde"e!Zd d!Z#d"d#Z$d$d%Z%d&d'Z&e!j'Z'e!j(Z(e!j)Z)e!j*Z*e!j+Z+e!j Z e!j Z e!j Z YnXzdd(l,m-Z-Wn(ek rd)d*Z.d/d+d,Z-YnXdS)0z Compatibility layer. Some py2/py3 compatibility support based on a stripped down version of six so we don't have to depend on a specific version of it. :copyright: (c) 2014 by Armin Ronacher. :license: BSD NcCs|SNxrr /compat.py rcCs t|Sr)iterkeysdrrrrr cCs t|Sr)r valuesr rrrrr cCs t|Sr)r itemsr rrrrr )StringIOcCs|j|k r|||dSr) __traceback__with_traceback)tpvaluetbrrrreraises  rcCs*t|trt|dddd}t|||dS)NzexecT) dont_inherit) isinstancestrcompiler)codeZglobZlocrrrexec_in"s rcCs|Sr)iterkeysr rrrr,r cCs|Sr) itervaluesr rrrr-r cCs|Sr) iteritemsr rrrr.r z5def reraise(tp, value, tb=None): raise tp, value, tbcCs|j|_dd|_|S)NcSs|dS)Nzutf-8) __unicode__encoderrrrr6r z&implements_to_string..)__str__r!)clsrrrimplements_to_string4s r%zdef exec_in(code, glob, loc=None): if isinstance(code, basestring): code = compile(code, '', 'exec', dont_inherit=True) exec code in glob, loc cs"Gfddd}|ddiS)Ncs&eZdZejZejZfddZdS)z!with_metaclass..metaclasscs$|dkrt||d|S||S)Nr)type__new__)r$nameZ this_basesr basesmetarrr'Nsz)with_metaclass..metaclass.__new__N)__name__ __module__ __qualname__r&__call____init__r'rr)rr metaclassJsr1Ztemporary_classr)r+r*r1rr)rwith_metaclass@s r2FZpypy_version_infoc@seZdZddZddZdS)_MgrcCs|Srrselfrrr __enter__]sz_Mgr.__enter__cGs tdSr)sysZ exc_clear)r5argsrrr__exit__`sz _Mgr.__exit__N)r,r-r.r6r9rrrrr3\sr3T) OrderedDict) DictMixinc@s"eZdZeZddZddZdS)r:cOs||j||dSr)clearupdate)r5r8kwargsrrrr0vszOrderedDict.__init__cCst|_t|_t|dSr)dictZ_OrderedDict__maplistZ_OrderedDict__orderr<r4rrrr<zszOrderedDict.clearN)r,r-r.objectnullr0r<rrrrr:rsr:cCs6||kr$t|j|j|<|j|t|||dSr)len__order__mapappendr? __setitem__)r5keyrrrrrGs rGcCs$t|||j||j|_dSr)r? __delitem__rEpoprBrDr5rHrrrrIs  rIccs |jD]}||jk r|VqdSr)rDrBrKrrr__iter__s  rLcCst|Sr)r@r4rrrr sr ) import_modulec Cspt|dstdt|}t|ddD]4}z|dd|}Wq&tk rXtdYq&Xq&d|d ||fS) z6Return the absolute name of the module to be imported.rindexz'package' not set to a string.rz2attempted relative import beyond top-level packagez%s.%sN)hasattr ValueErrorrCZxrangerN)r(packageleveldotrrrr _resolve_names rWcCs^|drL|stdd}|D]}|dkr.q8|d7}qt||d||}t|tj|S)zImport a module. The 'package' argument is required when performing a relative import. It specifies the package to use as the anchor point from which to resolve the relative import to an absolute import. rQz/relative imports require the 'package' argumentrrON) startswith TypeErrorrW __import__r7modules)r(rTrU characterrrrrMs  rM)N)N)N)/__doc__r7 version_infoZPY2Z _identityrZ text_typeZ string_typesintZ integer_typesrrr iorrr%rZunicodeZlongZ cStringIOrr2ZBROKEN_PYPY_CTXMGR_EXITrRrAr3AssertionErrorrY collectionsr: ImportErrorUserDictr;r?rGrIrLr setdefaultr=rJrr importlibrMrWrrrrsx