Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
B

?a\t±6F=ã@sÞddlmZddlZddlZddlZyddlZWnek
rHdZYnXejddkrfddlmZe	fZ
eZddl
mZddlZddlZddlmZmZmZmZmZddlmZmZmZmZmZm Z m!Z!dd	„Zddl"Z"dd
l"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+erddl"m,Z,ddl-Z-ddl.Z.ddl/Z0ddl1m1Z1ddl2Z2e3Z3dd
l4m5Z6ddl4m7Z8nddl9mZe:fZ
e:Zddl9m;ZddlZddlZddl<Z<ddl=mZmZmZmZmZmZmZm!Z!ddl>m$Z$mZm#Z#mZmZm'Z'm(Z(m)Z)m*Z*m+Z+er
ddl>m,Z,ddl?m&Z&m%Z%m Z ddl@mAZ-ddl>mBZ"ddlCmAZ.ddl0Z0ddlDm1Z1ddlEmFZ2eGZ3ddl4m8Z8e6Z6yddlmHZHmIZIWn8ek
rÂGdd„deJƒZId`dd„ZKdd„ZHYnXyddl
mLZMWn&ek
rúGdd„deNƒZMYnXyddl<mOZOWn,ek
r8ejPejQBdfd d!„ZOYnXdd"lRmSZTeUeTd#ƒrXeTZSn,dd$lRmVZWGd%d&„d&eWƒZVGd'd(„d(eTƒZSydd)lXmYZYWnek
r²d*d+„ZYYnXddl<Z<ddlZZZye[Z[Wn*e\k
rödd,l]m^Z^d-d.„Z[YnXyej_Z_ej`Z`WnHeak
rPe b¡p&d/Zcecd0kr8d1Zdnd2Zdd3d4„Z_d5d6„Z`YnXydd7lemfZfWnHek
rªdd8lgmhZhmiZiddlZe jd9¡Zkd:d;„Zld<d=„ZfYnXydd>lmmnZnWn"ek
rÞdd>lomnZnYnXejdd?…d@krþe1ƒjpZpnddAlmmpZpyddBlqmrZrWndek
r~ddClqmsZsyddDltmuZvWn ek
rhdadFdG„ZvYnXGdHdI„dIesƒZrYnXyddJlwmxZxWn ek
r°dbdKdL„ZxYnXyddMlqmyZyWnŠek
rLyddNlzm{Z|Wn"ek
rddNl}m{Z|YnXyddOl~mZm€Z€mZWnek
r6YnXGdPdQ„dQe‚ƒZyYnXyddRlƒm„Z„m…Z…Wnvek
rØe jdSej†¡Z‡dTdU„Z…GdVdW„dWe‚ƒZˆdcdXdY„Z‰GdZd[„d[eŠƒZ‹Gd\d]„d]eŒƒZGd^d_„d_eNƒZ„YnXdS)dé)Úabsolute_importNé)ÚStringIO)ÚFileType)ÚurlparseÚ
urlunparseÚurljoinÚurlsplitÚ
urlunsplit)ÚurlretrieveÚquoteÚunquoteÚurl2pathnameÚpathname2urlÚContentTooShortErrorÚ	splittypecCst|tƒr| d¡}t|ƒS)Nzutf-8)Ú
isinstanceÚunicodeÚencodeÚ_quote)Ús©rú/build/wlanpi-profiler-7At3M6/wlanpi-profiler-1.0.10/debian/wlanpi-profiler/opt/wlanpi-profiler/lib/python3.7/site-packages/distlib/compat.pyrs

r)	ÚRequestÚurlopenÚURLErrorÚ	HTTPErrorÚHTTPBasicAuthHandlerÚHTTPPasswordMgrÚHTTPHandlerÚHTTPRedirectHandlerÚbuild_opener)ÚHTTPSHandler)Ú
HTMLParser)Úifilter)Úifilterfalse)Ú
TextIOWrapper)rrrrr
r	r
r)
rrrrrrrrr r!)rrr)Úfilterfalse)Úmatch_hostnameÚCertificateErrorc@seZdZdS)r)N)Ú__name__Ú
__module__Ú__qualname__rrrrr)_sr)éc
Csøg}|sdS| d¡}|d|dd…}}| d¡}||krNtdt|ƒƒ‚|sb| ¡| ¡kS|dkrv| d¡n>| d	¡sŠ| d	¡rœ| t |¡¡n| t |¡ 	d
d¡¡x|D]}| t |¡¡qºWt 
dd
 |¡dtj¡}	|	 
|¡S)zpMatching according to RFC 6125, section 6.4.3

        http://tools.ietf.org/html/rfc6125#section-6.4.3
        FÚ.rr-NÚ*z,too many wildcards in certificate DNS name: z[^.]+zxn--z\*z[^.]*z\Az\.z\Z)ÚsplitÚcountr)ÚreprÚlowerÚappendÚ
startswithÚreÚescapeÚreplaceÚcompileÚjoinÚ
IGNORECASEÚmatch)
ÚdnÚhostnameZ
max_wildcardsZpatsÚpartsZleftmostÚ	remainderÚ	wildcardsÚfragÚpatrrrÚ_dnsname_matchcs(


rDcCsò|stdƒ‚g}| dd¡}x0|D](\}}|dkr"t||ƒr@dS| |¡q"W|sšxF| dd¡D]6}x0|D](\}}|dkrjt||ƒrˆdS| |¡qjWq`Wt|ƒdkrÄtd	|d
 tt|ƒ¡fƒ‚n*t|ƒdkrætd||dfƒ‚ntd
ƒ‚dS)a=Verify that *cert* (in decoded format as returned by
        SSLSocket.getpeercert()) matches the *hostname*.  RFC 2818 and RFC 6125
        rules are followed, but IP addresses are not accepted for *hostname*.

        CertificateError is raised on failure. On success, the function
        returns nothing.
        ztempty or no certificate, match_hostname needs a SSL socket or SSL context with either CERT_OPTIONAL or CERT_REQUIREDÚsubjectAltNamerÚDNSNÚsubjectÚ
commonNamer-z&hostname %r doesn't match either of %sz, zhostname %r doesn't match %rrz=no appropriate commonName or subjectAltName fields were found)	Ú
ValueErrorÚgetrDr4Úlenr)r:Úmapr2)Úcertr>ÚdnsnamesÚsanÚkeyÚvalueÚsubrrrr(•s.

r()ÚSimpleNamespacec@seZdZdZdd„ZdS)Ú	ContainerzR
        A generic container for when multiple values need to be returned
        cKs|j |¡dS)N)Ú__dict__Úupdate)ÚselfÚkwargsrrrÚ__init__ÇszContainer.__init__N)r*r+r,Ú__doc__rYrrrrrTÃsrT)Úwhichcs"dd„}tj ˆ¡r&|ˆ|ƒr"ˆSdS|dkr>tj dtj¡}|sFdS| tj¡}tj	dkr¼tj
|krt| dtj
¡tj dd¡ tj¡}t‡fd	d
„|Dƒƒr¨ˆg}q‡fdd„|Dƒ}nˆg}t
ƒ}xT|D]L}tj |¡}||krÎ| |¡x(|D] }	tj ||	¡}
||
|ƒrö|
SqöWqÎWdS)
aKGiven a command, mode, and a PATH string, return the path which
        conforms to the given mode on the PATH, or None if there is no such
        file.

        `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result
        of os.environ.get("PATH"), or can be overridden with a custom search
        path.

        cSs&tj |¡o$t ||¡o$tj |¡S)N)ÚosÚpathÚexistsÚaccessÚisdir)ÚfnÚmoderrrÚ
_access_checkÜszwhich.<locals>._access_checkNÚPATHÚwin32rÚPATHEXTÚc3s |]}ˆ ¡ | ¡¡VqdS)N)r3Úendswith)Ú.0Úext)Úcmdrrú	<genexpr>ùszwhich.<locals>.<genexpr>csg|]}ˆ|‘qSrr)rirj)rkrrú
<listcomp>üszwhich.<locals>.<listcomp>)r\r]ÚdirnameÚenvironrJÚdefpathr0ÚpathsepÚsysÚplatformÚcurdirÚinsertÚanyÚsetÚnormcaseÚaddr:)rkrbr]rcÚpathextÚfilesÚseenÚdirÚnormdirÚthefileÚnamer)rkrr[Ïs8







r[)ÚZipFileÚ	__enter__)Ú
ZipExtFilec@s$eZdZdd„Zdd„Zdd„ZdS)rƒcCs|j |j¡dS)N)rUrV)rWÚbaserrrrYszZipExtFile.__init__cCs|S)Nr)rWrrrr‚szZipExtFile.__enter__cGs| ¡dS)N)Úclose)rWÚexc_inforrrÚ__exit__szZipExtFile.__exit__N)r*r+r,rYr‚r‡rrrrrƒsrƒc@s$eZdZdd„Zdd„Zdd„ZdS)rcCs|S)Nr)rWrrrr‚#szZipFile.__enter__cGs| ¡dS)N)r…)rWr†rrrr‡&szZipFile.__exit__cOstj|f|ž|Ž}t|ƒS)N)ÚBaseZipFileÚopenrƒ)rWÚargsrXr„rrrr‰*szZipFile.openN)r*r+r,r‚r‡r‰rrrrr"sr)Úpython_implementationcCs0dtjkrdStjdkrdStj d¡r,dSdS)z6Return a string identifying the Python implementation.ÚPyPyÚjavaÚJythonÚ
IronPythonÚCPython)rrÚversionr\r€r5rrrrr‹1s

r‹)ÚCallablecCs
t|tƒS)N)rr’)ÚobjrrrÚcallableCsr”zutf-8ÚmbcsÚstrictÚsurrogateescapecCs:t|tƒr|St|tƒr$| tt¡Stdt|ƒjƒ‚dS)Nzexpect bytes or str, not %s)	rÚbytesÚ	text_typerÚ_fsencodingÚ	_fserrorsÚ	TypeErrorÚtyper*)ÚfilenamerrrÚfsencodeWs

rŸcCs:t|tƒr|St|tƒr$| tt¡Stdt|ƒjƒ‚dS)Nzexpect bytes or str, not %s)	rr™r˜Údecoderšr›rœrr*)ržrrrÚfsdecode`s

r¡)Údetect_encoding)ÚBOM_UTF8Úlookupzcoding[:=]\s*([-\w.]+)cCsH|dd… ¡ dd¡}|dks*| d¡r.dS|dks@| d¡rDd	S|S)
z(Imitates get_normal_name in tokenizer.c.NéÚ_ú-zutf-8zutf-8-)zlatin-1z
iso-8859-1ziso-latin-1)zlatin-1-ziso-8859-1-ziso-latin-1-z
iso-8859-1)r3r8r5)Úorig_encÚencrrrÚ_get_normal_nameqs
rªcsÊyˆjj‰Wntk
r$d‰YnXd‰d}d}‡fdd„}‡‡fdd„}|ƒ}| t¡rpd‰|d	d…}d
}|s||gfS||ƒ}|r’||gfS|ƒ}|s¦||gfS||ƒ}|r¾|||gfS|||gfS)a?
        The detect_encoding() function is used to detect the encoding that should
        be used to decode a Python source file.  It requires one argument, readline,
        in the same way as the tokenize() generator.

        It will call readline a maximum of twice, and return the encoding used
        (as a string) and a list of any lines (left as bytes) it has read in.

        It detects the encoding from the presence of a utf-8 bom or an encoding
        cookie as specified in pep-0263.  If both a bom and a cookie are present,
        but disagree, a SyntaxError will be raised.  If the encoding cookie is an
        invalid charset, raise a SyntaxError.  Note that if a utf-8 bom is found,
        'utf-8-sig' is returned.

        If no encoding is specified, then the default of 'utf-8' will be returned.
        NFzutf-8cs yˆƒStk
rdSXdS)Nó)Ú
StopIterationr)ÚreadlinerrÚread_or_stop”sz%detect_encoding.<locals>.read_or_stopcsäy| d¡}Wn4tk
rBd}ˆdk	r6d |ˆ¡}t|ƒ‚YnXt |¡}|sVdSt|dƒ}yt|ƒ}Wn:tk
r¨ˆdkrd|}nd ˆ|¡}t|ƒ‚YnXˆrà|j	dkr؈dkrÆd}n
d ˆ¡}t|ƒ‚|d	7}|S)
Nzutf-8z'invalid or missing encoding declarationz{} for {!r}rzunknown encoding: zunknown encoding for {!r}: {}zencoding problem: utf-8z encoding problem for {!r}: utf-8z-sig)
r ÚUnicodeDecodeErrorÚformatÚSyntaxErrorÚ	cookie_reÚfindallrªr¤ÚLookupErrorr€)ÚlineÚline_stringÚmsgÚmatchesÚencodingÚcodec)Ú	bom_foundržrrÚfind_cookiešs6



z$detect_encoding.<locals>.find_cookieTrz	utf-8-sig)Ú__self__r€ÚAttributeErrorr5r£)r­r¹Údefaultr®r¼ÚfirstÚsecondr)r»ržr­rr¢|s4
&


r¢)r7é)ré)Úunescape)ÚChainMap)ÚMutableMapping)Úrecursive_reprú...cs‡fdd„}|S)zm
            Decorator to make a repr function return fillvalue for a recursive
            call
            csLtƒ‰‡‡‡fdd„}tˆdƒ|_tˆdƒ|_tˆdƒ|_tˆdiƒ|_|S)Nc	sBt|ƒtƒf}|ˆkrˆSˆ |¡zˆ|ƒ}Wdˆ |¡X|S)N)ÚidÚ	get_identryÚdiscard)rWrPÚresult)Ú	fillvalueÚrepr_runningÚ
user_functionrrÚwrapperñs
z=_recursive_repr.<locals>.decorating_function.<locals>.wrapperr+rZr*Ú__annotations__)rwÚgetattrr+rZr*rÑ)rÏrÐ)rÍ)rÎrÏrÚdecorating_functionîsz,_recursive_repr.<locals>.decorating_functionr)rÍrÓr)rÍrÚ_recursive_reprèsrÔc@s´eZdZdZdd„Zdd„Zdd„Zd'd	d
„Zdd„Zd
d„Z	dd„Z
dd„Zeƒdd„ƒZ
edd„ƒZdd„ZeZdd„Zedd„ƒZdd„Zdd „Zd!d"„Zd#d$„Zd%d&„ZdS)(rÅaÍ A ChainMap groups multiple dicts (or other mappings) together
        to create a single, updateable view.

        The underlying mappings are stored in a list.  That list is public and can
        accessed or updated using the *maps* attribute.  There is no other state.

        Lookups search the underlying mappings successively until a key is found.
        In contrast, writes, updates, and deletions only operate on the first
        mapping.

        cGst|ƒpig|_dS)z˜Initialize a ChainMap by setting *maps* to the given mappings.
            If no mappings are provided, a single empty dictionary is used.

            N)ÚlistÚmaps)rWrÖrrrrYszChainMap.__init__cCst|ƒ‚dS)N)ÚKeyError)rWrPrrrÚ__missing__szChainMap.__missing__c	Cs8x,|jD]"}y||Stk
r(YqXqW| |¡S)N)rÖr×rØ)rWrPÚmappingrrrÚ__getitem__s
zChainMap.__getitem__NcCs||kr||S|S)Nr)rWrPr¿rrrrJ$szChainMap.getcCsttƒj|jŽƒS)N)rKrwÚunionrÖ)rWrrrÚ__len__'szChainMap.__len__cCsttƒj|jŽƒS)N)ÚiterrwrÛrÖ)rWrrrÚ__iter__*szChainMap.__iter__cst‡fdd„|jDƒƒS)Nc3s|]}ˆ|kVqdS)Nr)riÚm)rPrrrl.sz(ChainMap.__contains__.<locals>.<genexpr>)rvrÖ)rWrPr)rPrÚ__contains__-szChainMap.__contains__cCs
t|jƒS)N)rvrÖ)rWrrrÚ__bool__0szChainMap.__bool__cCsd |d tt|jƒ¡¡S)Nz{0.__class__.__name__}({1})z, )r°r:rLr2rÖ)rWrrrÚ__repr__3szChainMap.__repr__cGs|tj|f|žŽƒS)z?Create a ChainMap with a single dict created from the iterable.)ÚdictÚfromkeys)ÚclsÚiterablerŠrrrrä8szChainMap.fromkeyscCs$|j|jd ¡f|jdd…žŽS)zHNew ChainMap or subclass with a new copy of maps[0] and refs to maps[1:]rr-N)Ú	__class__rÖÚcopy)rWrrrrè=sz
ChainMap.copycCs|jif|jžŽS)z;New ChainMap with a new dict followed by all previous maps.)rçrÖ)rWrrrÚ	new_childCszChainMap.new_childcCs|j|jdd…ŽS)zNew ChainMap from maps[1:].r-N)rçrÖ)rWrrrÚparentsGszChainMap.parentscCs||jd|<dS)Nr)rÖ)rWrPrQrrrÚ__setitem__LszChainMap.__setitem__cCs8y|jd|=Wn"tk
r2td |¡ƒ‚YnXdS)Nrz(Key not found in the first mapping: {!r})rÖr×r°)rWrPrrrÚ__delitem__OszChainMap.__delitem__cCs0y|jd ¡Stk
r*tdƒ‚YnXdS)zPRemove and return an item pair from maps[0]. Raise KeyError is maps[0] is empty.rz#No keys found in the first mapping.N)rÖÚpopitemr×)rWrrrríUszChainMap.popitemcGs>y|jdj|f|žŽStk
r8td |¡ƒ‚YnXdS)zWRemove *key* from maps[0] and return its value. Raise KeyError if *key* not in maps[0].rz(Key not found in the first mapping: {!r}N)rÖÚpopr×r°)rWrPrŠrrrrî\szChainMap.popcCs|jd ¡dS)z'Clear maps[0], leaving maps[1:] intact.rN)rÖÚclear)rWrrrrïcszChainMap.clear)N)r*r+r,rZrYrØrÚrJrÜrÞràrárÔrâÚclassmethodrärèÚ__copy__réÚpropertyrêrërìrírîrïrrrrrÅs(
rÅ)Úcache_from_sourcecCs0| d¡st‚|dkrd}|r$d}nd}||S)Nz.pyTÚcÚo)rhÚAssertionError)r]Údebug_overrideÚsuffixrrrrójsró)ÚOrderedDict)rÊ)ÚKeysViewÚ
ValuesViewÚ	ItemsViewc@sþeZdZdZdd„Zejfdd„Zejfdd„Zdd	„Zd
d„Z	dd
„Z
d6dd„Zdd„Zdd„Z
dd„Zdd„Zdd„Zdd„Zdd„ZeZeƒZefdd „Zd7d"d#„Zd8d$d%„Zd&d'„Zd(d)„Zed9d*d+„ƒZd,d-„Zd.d/„Zd0d1„Zd2d3„Z d4d5„Z!d!S):rùz)Dictionary that remembers insertion ordercOsnt|ƒdkrtdt|ƒƒ‚y
|jWn6tk
r\g|_}||dg|dd…<i|_YnX|j||ŽdS)zÑInitialize an ordered dictionary.  Signature is the same as for
            regular dictionaries, but keyword arguments are not recommended
            because their insertion order is arbitrary.

            r-z$expected at most 1 arguments, got %dN)rKrœÚ_OrderedDict__rootr¾Ú_OrderedDict__mapÚ_OrderedDict__update)rWrŠÚkwdsÚrootrrrrY‘s

zOrderedDict.__init__cCsF||kr6|j}|d}|||g|d<|d<|j|<||||ƒdS)z!od.__setitem__(i, y) <==> od[i]=yrr-N)rýrþ)rWrPrQZdict_setitemrÚlastrrrrë¡s
 zOrderedDict.__setitem__cCs0|||ƒ|j |¡\}}}||d<||d<dS)z od.__delitem__(y) <==> del od[y]r-rN)rþrî)rWrPZdict_delitemÚ	link_prevÚ	link_nextrrrrì«s
zOrderedDict.__delitem__ccs2|j}|d}x||k	r,|dV|d}qWdS)zod.__iter__() <==> iter(od)r-rÂN)rý)rWrÚcurrrrrrÞ´s


zOrderedDict.__iter__ccs2|j}|d}x||k	r,|dV|d}qWdS)z#od.__reversed__() <==> reversed(od)rrÂN)rý)rWrrrrrÚ__reversed__¼s


zOrderedDict.__reversed__cCshyDx|j ¡D]}|dd…=qW|j}||dg|dd…<|j ¡Wntk
rXYnXt |¡dS)z.od.clear() -> None.  Remove all items from od.N)rþÚ
itervaluesrýrïr¾rã)rWÚnoderrrrrïÄszOrderedDict.clearTcCs||stdƒ‚|j}|r8|d}|d}||d<||d<n |d}|d}||d<||d<|d}|j|=t ||¡}||fS)z¡od.popitem() -> (k, v), return and remove a (key, value) pair.
            Pairs are returned in LIFO order if last is true or FIFO order if false.

            zdictionary is emptyrr-rÂ)r×rýrþrãrî)rWrrÚlinkrrrPrQrrrríÐs 
zOrderedDict.popitemcCst|ƒS)zod.keys() -> list of keys in od)rÕ)rWrrrÚkeysészOrderedDict.keyscs‡fdd„ˆDƒS)z#od.values() -> list of values in odcsg|]}ˆ|‘qSrr)rirP)rWrrrmïsz&OrderedDict.values.<locals>.<listcomp>r)rWr)rWrÚvaluesíszOrderedDict.valuescs‡fdd„ˆDƒS)z.od.items() -> list of (key, value) pairs in odcsg|]}|ˆ|f‘qSrr)rirP)rWrrrmósz%OrderedDict.items.<locals>.<listcomp>r)rWr)rWrÚitemsñszOrderedDict.itemscCst|ƒS)z0od.iterkeys() -> an iterator over the keys in od)rÝ)rWrrrÚiterkeysõszOrderedDict.iterkeysccsx|D]}||VqWdS)z2od.itervalues -> an iterator over the values in odNr)rWÚkrrrrùs
zOrderedDict.itervaluesccs x|D]}|||fVqWdS)z=od.iteritems -> an iterator over the (key, value) items in odNr)rWrrrrÚ	iteritemsþs
zOrderedDict.iteritemscOsØt|ƒdkr tdt|ƒfƒ‚n|s,tdƒ‚|d}d}t|ƒdkrL|d}t|tƒrrx^|D]}||||<q\WnDt|dƒrœx8| ¡D]}||||<q†Wnx|D]\}}|||<q¢Wx| ¡D]\}}|||<qÀWdS)	a—od.update(E, **F) -> None.  Update od from dict/iterable E and F.

            If E is a dict instance, does:           for k in E: od[k] = E[k]
            If E has a .keys() method, does:         for k in E.keys(): od[k] = E[k]
            Or if E is an iterable of items, does:   for k, v in E: od[k] = v
            In either case, this is followed by:     for k, v in F.items(): od[k] = v

            rÂz8update() takes at most 2 positional arguments (%d given)z,update() takes at least 1 argument (0 given)rrr-r
N)rKrœrrãÚhasattrr
r)rŠrrWÚotherrPrQrrrrVs&	


zOrderedDict.updatecCs0||kr||}||=|S||jkr,t|ƒ‚|S)z±od.pop(k[,d]) -> v, remove specified key and return the corresponding value.
            If key is not found, d is returned if given, otherwise KeyError is raised.

            )Ú_OrderedDict__markerr×)rWrPr¿rÌrrrrî&s
zOrderedDict.popNcCs||kr||S|||<|S)zDod.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in odr)rWrPr¿rrrÚ
setdefault3szOrderedDict.setdefaultcCs^|si}t|ƒtƒf}||kr"dSd||<z&|s>d|jjfSd|jj| ¡fS||=XdS)zod.__repr__() <==> repr(od)z...r-z%s()z%s(%r)N)rÉÚ
_get_identrçr*r)rWZ
_repr_runningZcall_keyrrrrâ:szOrderedDict.__repr__cs\‡fdd„ˆDƒ}tˆƒ ¡}xttƒƒD]}| |d¡q*W|rPˆj|f|fSˆj|ffS)z%Return state information for picklingcsg|]}|ˆ|g‘qSrr)rir)rWrrrmJsz*OrderedDict.__reduce__.<locals>.<listcomp>N)Úvarsrèrùrîrç)rWrÚ	inst_dictrr)rWrÚ
__reduce__HszOrderedDict.__reduce__cCs
| |¡S)z!od.copy() -> a shallow copy of od)rç)rWrrrrèRszOrderedDict.copycCs |ƒ}x|D]}|||<qW|S)zˆOD.fromkeys(S[, v]) -> New ordered dictionary with keys from S
            and values equal to v (which defaults to None).

            r)rårærQÚdrPrrrräVs
zOrderedDict.fromkeyscCs6t|tƒr*t|ƒt|ƒko(| ¡| ¡kSt ||¡S)z›od.__eq__(y) <==> od==y.  Comparison to another OD is order-sensitive
            while comparison to a regular mapping is order-insensitive.

            )rrùrKrrãÚ__eq__)rWrrrrras
 zOrderedDict.__eq__cCs
||kS)Nr)rWrrrrÚ__ne__jszOrderedDict.__ne__cCst|ƒS)z@od.viewkeys() -> a set-like object providing a view on od's keys)rú)rWrrrÚviewkeysoszOrderedDict.viewkeyscCst|ƒS)z<od.viewvalues() -> an object providing a view on od's values)rû)rWrrrÚ
viewvaluessszOrderedDict.viewvaluescCst|ƒS)zBod.viewitems() -> a set-like object providing a view on od's items)rü)rWrrrÚ	viewitemswszOrderedDict.viewitems)T)N)N)N)"r*r+r,rZrYrãrërìrÞrrïrír
rrr
rrrVrÿÚobjectrrîrrârrèrðrärrrrrrrrrrù…s:
	




	rù)ÚBaseConfiguratorÚvalid_identz^[a-z_][a-z0-9_]*$cCst |¡}|std|ƒ‚dS)Nz!Not a valid Python identifier: %rT)Ú
IDENTIFIERr<rI)rrßrrrr s
r c@s"eZdZdZdd„Zddd„ZdS)ÚConvertingDictz A converting dictionary wrapper.cCsJt ||¡}|j |¡}||k	rF|||<t|ƒtttfkrF||_||_	|S)N)
rãrÚÚconfiguratorÚconvertrr"ÚConvertingListÚConvertingTupleÚparentrP)rWrPrQrÌrrrrڔs
zConvertingDict.__getitem__NcCsLt |||¡}|j |¡}||k	rH|||<t|ƒtttfkrH||_||_	|S)N)
rãrJr#r$rr"r%r&r'rP)rWrPr¿rQrÌrrrrJ s
zConvertingDict.get)N)r*r+r,rZrÚrJrrrrr"‘sr"cCsDt |||¡}|j |¡}||k	r@t|ƒtttfkr@||_||_	|S)N)
rãrîr#r$rr"r%r&r'rP)rWrPr¿rQrÌrrrrî¬s
rîc@s"eZdZdZdd„Zddd„ZdS)	r%zA converting list wrapper.cCsJt ||¡}|j |¡}||k	rF|||<t|ƒtttfkrF||_||_	|S)N)
rÕrÚr#r$rr"r%r&r'rP)rWrPrQrÌrrrrÚ¸s
zConvertingList.__getitem__éÿÿÿÿcCs<t ||¡}|j |¡}||k	r8t|ƒtttfkr8||_|S)N)	rÕrîr#r$rr"r%r&r')rWÚidxrQrÌrrrrîÄs
zConvertingList.popN)r()r*r+r,rZrÚrîrrrrr%¶sr%c@seZdZdZdd„ZdS)r&zA converting tuple wrapper.cCsBt ||¡}|j |¡}||k	r>t|ƒtttfkr>||_||_	|S)N)
ÚtuplerÚr#r$rr"r%r&r'rP)rWrPrQrÌrrrrÚÏs
zConvertingTuple.__getitem__N)r*r+r,rZrÚrrrrr&Ísr&c@sŒeZdZdZe d¡Ze d¡Ze d¡Ze d¡Z	e d¡Z
ddd	œZee
ƒZd
d„Zdd
„Zdd„Zdd„Zdd„Zdd„Zdd„ZdS)rzQ
        The configurator base class which defines some useful defaults.
        z%^(?P<prefix>[a-z]+)://(?P<suffix>.*)$z^\s*(\w+)\s*z^\.\s*(\w+)\s*z^\[\s*(\w+)\s*\]\s*z^\d+$Úext_convertÚcfg_convert)rjÚcfgcCst|ƒ|_||j_dS)N)r"Úconfigr#)rWr.rrrrYís
zBaseConfigurator.__init__c		CsÄ| d¡}| d¡}y`| |¡}xP|D]H}|d|7}yt||ƒ}Wq&tk
rl| |¡t||ƒ}Yq&Xq&W|Stk
r¾t ¡dd…\}}td||fƒ}|||_	|_
|‚YnXdS)zl
            Resolve strings to objects using standard import and attribute
            syntax.
            r.rr-NzCannot resolve %r: %s)r0rîÚimporterrÒr¾ÚImportErrorrrr†rIÚ	__cause__Ú
__traceback__)	rWrr€ÚusedÚfoundrBÚeÚtbÚvrrrÚresolveñs"




zBaseConfigurator.resolvecCs
| |¡S)z*Default converter for the ext:// protocol.)r8)rWrQrrrr+szBaseConfigurator.ext_convertcCs|}|j |¡}|dkr&td|ƒ‚nØ|| ¡d…}|j| ¡d}x´|rü|j |¡}|rp|| ¡d}nd|j |¡}|rÔ| ¡d}|j |¡s¢||}n2yt	|ƒ}||}Wnt
k
rÒ||}YnX|rê|| ¡d…}qJtd||fƒ‚qJW|S)z*Default converter for the cfg:// protocol.NzUnable to convert %rrzUnable to convert %r at %r)ÚWORD_PATTERNr<rIÚendr.ÚgroupsÚDOT_PATTERNÚ
INDEX_PATTERNÚ
DIGIT_PATTERNÚintrœ)rWrQÚrestrßrr)Únrrrr,s2
zBaseConfigurator.cfg_convertcCsÆt|tƒs$t|tƒr$t|ƒ}||_nžt|tƒsHt|tƒrHt|ƒ}||_nzt|tƒslt|tƒrlt|ƒ}||_nVt|tƒrÂ|j	 
|¡}|rÂ| ¡}|d}|j 
|d¡}|rÂ|d}t||ƒ}||ƒ}|S)zù
            Convert values to an appropriate type. dicts, lists and tuples are
            replaced by their converting alternatives. Strings are checked to
            see if they have a conversion format and are converted if they do.
            ÚprefixNrø)rr"rãr#r%rÕr&r*Ústring_typesÚCONVERT_PATTERNr<Ú	groupdictÚvalue_convertersrJrÒ)rWrQrßrrBÚ	converterrørrrr$.s*



zBaseConfigurator.convertcsrˆ d¡}t|ƒs| |¡}ˆ dd¡}t‡fdd„ˆDƒƒ}|f|Ž}|rnx | ¡D]\}}t|||ƒqVW|S)z1Configure an object with a user-supplied factory.z()r.Ncs g|]}t|ƒr|ˆ|f‘qSr)r )rir)r.rrrmQsz5BaseConfigurator.configure_custom.<locals>.<listcomp>)rîr”r8rãrÚsetattr)rWr.rôÚpropsrXrÌr€rQr)r.rÚconfigure_customJs


z!BaseConfigurator.configure_customcCst|tƒrt|ƒ}|S)z0Utility function which converts lists to tuples.)rrÕr*)rWrQrrrÚas_tupleXs
zBaseConfigurator.as_tupleN)r*r+r,rZr6r9rDr9r<r=r>rFÚstaticmethodÚ
__import__r/rYr8r+r,r$rJrKrrrrrÙs 




"r)r-)rÈ)N)N)ŽÚ
__future__rr\r6rrÚsslr0Úversion_inforÚ
basestringrCrr™ÚtypesrÚ	file_typeÚ__builtin__ÚbuiltinsÚConfigParserÚconfigparserrrrr	r
Úurllibrrrr
rrrrÚurllib2rrrrrrrr r!r"ÚhttplibÚ	xmlrpclibÚQueueÚqueuer#ÚhtmlentitydefsÚ	raw_inputÚ	itertoolsr$Úfilterr%r'ÚioÚstrr&ÚshutilÚurllib.parseÚurllib.requestÚurllib.errorÚhttp.clientÚclientÚrequestÚ
xmlrpc.clientÚhtml.parserÚ
html.entitiesÚentitiesÚinputr(r)rIrDrSrTrr[ÚF_OKÚX_OKÚzipfilerrˆrrƒZBaseZipExtFilersr‹Ú	sysconfigr”Ú	NameErrorÚcollections.abcr’rŸr¡r¾Úgetfilesystemencodingršr›Útokenizer¢Úcodecsr£r¤r9r²rªÚhtmlr7ÚcgirÄÚcollectionsrÅrÆÚreprlibrÇrÔÚimportlib.utilrórùÚthreadrÊrÚdummy_threadÚ_abcollrúrûrürãÚlogging.configrr ÚIr!r"rîrÕr%r*r&rrrrÚ<module>s
$,(0
2+A


		
[
b
w