Y@sdZddlZddlZddlZddlZddlZyddlmZWnek rpe ZYnXdddddd gZ d dZ d dZ d dZ d dZddZyeddZWnek rddZYnXy eddZddZWn*ek rFddZddZYnXGdddeZGdddeZejdkrddlZe dddd d!d"Zd#d$Zd%d&Zd'd(Znd)d&Zd*d(Zd+d ZdS),zUtility functions.N) OrderedDicturlsafe_b64encodeurlsafe_b64decodeutf8to_json from_jsonmatches_requirementcCstj|jtdS)z!urlsafe_b64encode without padding=)base64rrstripbinary)datar+/tmp/pip-build-3puug3g5/wheel/wheel/util.pyrscCs)ddt|d@}tj||S)z!urlsafe_b64decode without padding=)lenr r)r padrrrrscCstj|ddS)zConvert given data to JSON. sort_keysT)jsondumps)orrrrscCs tj|S)zDecode a JSON payload.)rloads)jrrrr scCsHtjddkr"i}d}nddi}d}t||||S)Nrrbnewline)sys version_infoopen)namemodenlbinrrr open_for_csv$s   r%cCs t|tr|jdS|S)zUtf-8 encode data.zutf-8) isinstanceunicodeencode)r rrrr0s cCs t|tr|jdS|S)zUtf-8 encode data.zutf-8)r&strr()r rrrr6s cCs|S)Nr)srrrnativeAsr+cCs t|tr|jdS|S)Nascii)r&r'r()r*rrrr Cs r cCs t|tr|jdS|S)Nr,)r&bytesdecode)r*rrrr+Hs cCs t|tr|jdSdS)Nr,)r&r)r()r*rrrr Lsc@sCeZdZdddZddZddZdd Zd S) HashingFilesha256cCs1||_||_tj||_d|_dS)Nr)fdhashtypehashlibnewhashlength)selfr1r2rrr__init__Qs  zHashingFile.__init__cCs9|jj||jt|7_|jj|dS)N)r5updater6rr1write)r7r rrrr:VszHashingFile.writecCs|jjdS)N)r1close)r7rrrr;ZszHashingFile.closecCsF|jdkr|jjS|jj}|jdtt|S)Nmd5r )r2r5 hexdigestdigestr+r)r7r>rrrr>\s zHashingFile.digestN)__name__ __module__ __qualname__r8r:r;r>rrrrr/Ps   r/cs.eZdZfddZddZS)OrderedDefaultDictcsx|sd|_nI|ddkp/t|ds>td|d|_|dd}tt|j||dS)Nrz'first argument must be callable or None)default_factorycallable TypeErrorsuperrBr8)r7argskwargs) __class__rrr8cs    zOrderedDefaultDict.__init__cCs3|jdkrt||j||<}|S)N)rDKeyError)r7keydefaultrrr __missing__ms zOrderedDefaultDict.__missing__)r?r@rAr8rNrr)rJrrBbs  rBwin32 CSIDL_APPDATACSIDL_LOCAL_APPDATACSIDL_COMMON_APPDATA#cCsEd}tjtjj}tjjjdt|d|||jS)Nr) ctypescreate_unicode_bufferZwintypesMAX_PATHwindllshell32SHGetFolderPathWcsidlvalue)r!SHGFP_TYPE_CURRENTbufrrrget_pathys#r`cGsDtd}tjj||}tjj|s@tj||S)NrR)r`ospathjoinisdirmakedirs)resourceZappdatarbrrrsave_config_paths   rgcgsYddg}xF|D]>}t|}tjj||}tjj|r|VqWdS)NrRrT)r`rarbrcexists)rfidsidbaserbrrrload_config_pathss    rlcGsddl}|jj|S)Nr)xdg.BaseDirectory BaseDirectoryrg)rfxdgrrrrgs cGsddl}|jj|S)Nr)rmrnrl)rfrorrrrls cCsyddlm}m}Wntk r:tdYnX|j|}g}xW|D]O}|j}|d|jdd|jd}||krW|j|qWW|S)zList of wheels matching a requirement. :param req: The requirement to satisfy :param wheels: List of wheels to search. r) Distribution Requirementz-Cannot use requirements without pkg_resources project_namer!versionver) pkg_resourcesrprq ImportError RuntimeErrorparseZparsed_filenamegroupappend)reqwheelsrprqselectedZwffdistrrrrs   ' ) __doc__rrar rr3 collectionsrrvdict__all__rrrrr%r'r NameErrorr+r objectr/rBplatformctypes.wintypesrVr\r`rgrlrrrrrsP