3 ÝPfã@süddlmZmZmZddlZddlmZddlmZyddl j j Z Wn e k rdddlj jZ YnXddddd d d gZejdd ko’ejd dkZyedƒZeeeƒs°edƒZWndZYnXdZGdd„deƒZdd„Zdd„Zdd „Zdd„ZdS)é)Úabsolute_importÚdivisionÚunicode_literalsN)Ú ModuleType)Ú text_typeÚ default_etreeÚMethodDispatcherÚisSurrogatePairÚsurrogatePairToCodepointÚmoduleFactoryFactoryÚsupports_lone_surrogatesÚPY27éééz"\uD800"z u"\uD800"FTc@s$eZdZdZffdd„Zdd„ZdS)rapDict with 2 special properties: On initiation, keys that are lists, sets or tuples are converted to multiple keys so accessing any one of the items in the original list-like object returns the matching value md = MethodDispatcher({("foo", "bar"):"baz"}) md["foo"] == "baz" A default value which can be set through the default attribute. cCsjg}xN|D]F\}}t|ttttfƒrBx*|D]}|j||fƒq*Wq |j||fƒq Wtj||ƒd|_dS)N) Ú isinstanceÚlistÚtupleÚ frozensetÚsetÚappendÚdictÚ__init__Údefault)ÚselfÚitemsZ _dictEntriesÚnameÚvalueÚitem©rú/usr/lib/python3.6/_utils.pyr4s  zMethodDispatcher.__init__cCstj|||jƒS)N)rÚgetr)rÚkeyrrr Ú __getitem__CszMethodDispatcher.__getitem__N)Ú__name__Ú __module__Ú __qualname__Ú__doc__rr#rrrr r's  cCsLt|ƒdkoJt|dƒdkoJt|dƒdkoJt|dƒdkoJt|dƒdkS)NrriØiÿÛriÜiÿß)ÚlenÚord)Údatarrr r Js  cCs,dt|dƒddt|dƒd}|S)NiriØiriÜ)r))r*Zchar_valrrr r Pscsi‰‡‡fdd„}|S)Nc sØttjtdƒƒrd|j}n d|j}t|jƒƒ}yˆ|||Stk rÒt|ƒ}ˆ|f|ž|Ž}|jj|ƒdˆkr†iˆ|<dˆ|kržiˆ||<dˆ||kr¾iˆ|||<|ˆ|||<|SXdS)NÚz _%s_factorys _%s_factoryrÚargsÚkwargs) rrr$ÚtyperrÚKeyErrorÚ__dict__Úupdate)Z baseModuler,r-rZ kwargs_tupleÚmodZobjs)ÚfactoryÚ moduleCacherr Ú moduleFactory\s$      z+moduleFactoryFactory..moduleFactoryr)r3r5r)r3r4r r Yscsi‰‡‡fdd„}|S)Ncs2t|ƒt|jƒƒf}|ˆkr*ˆ||Žˆ|<ˆ|S)N)rr)r,r-r")ÚcacheÚfuncrr Úwrappedyszmemoize..wrappedr)r7r8r)r6r7r Úmemoizevsr9)Z __future__rrrÚsysÚtypesrZpip._vendor.sixrZxml.etree.cElementTreeZetreeZ cElementTreerÚ ImportErrorZxml.etree.ElementTreeZ ElementTreeÚ__all__Ú version_infor ÚevalZ_xrr rrr r r r9rrrr Ús0    #