ž 7’ReÈc@s×ddlZddlmZddlZddlZddlmZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZyddlZWnek rddlZYnXddlZddlmZddlmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/e j0e1ƒZ2dZ3e j4e3ƒZ5dZ6d e6d Z7e6d Z8d Z9d e9de8de3d e9de8dZ:dZ;de:de;de:dZ<e7d e3e7dZ=de=dZ>de6de>de<dZ?e j4e?ƒZ@de9de8d ZAe j4eAƒZBdd „ZCd!d"„ZDd#d$„ZEd%d&„ZFddd'd(„ZHd)d*„ZId+d,„ZJd-d.„ZKejLd/d0„ƒZMejLd1d2„ƒZNejLd3d4d5„ƒZOGd6d7„d7ePƒZQd8d9„ZRGd:d;„d;ePƒZSd<d=„ZTGd>d?„d?ePƒZUe j4d@e jVƒZWdAdB„ZXddCdD„ZYdEdF„ZZdGdH„Z[dIdJ„Z\dKdL„Z]dMdN„Z^e j4dOe j_ƒZ`e j4dPƒZaddQdR„Zbe j4dSƒZcdTdU„ZddVdW„ZedXdY„ZfdZd[„Zgd\d]„ZhGd^d_„d_ePƒZiGd`da„daePƒZjGdbdc„dcePƒZkdœZldddkdl„Zndmdn„ZodžZpGdudv„dvePƒZqe j4dwƒZre j4dxƒZse j4dyƒZtdzd{„Zd|d}„ZuGd~d„de"jvƒZvGd€d„de'ƒZ&Gd‚dƒ„dƒe&e%ƒZwejxdd„…ZyeydŸkrGd†d‡„d‡e"jzƒZzGdˆd‰„d‰e"j{ƒZ{nGdŠd‹„d‹e#j|ƒZ|GdŒd„de#j}ƒZ}GdŽd„de#j~ƒZ~dd‘„ZGd’d“„d“ePƒZ€Gd”d•„d•e€ƒZGd–d—„d—e€ƒZ‚Gd˜d™„d™e(ƒZƒGdšd›„d›ePƒZ„dS( iN(udeque(uiglobi(uDistlibException(u string_typesu text_typeushutilu raw_inputuStringIOucache_from_sourceuurlopenuhttplibu xmlrpclibu splittypeu HTTPHandleru HTTPSHandleruBaseConfiguratoru valid_identu Containeru configparseruURLErrorumatch_hostnameuCertificateErroruZipFileu\s*,\s*u (\w|[.-])+u(\*|:(\*|\w+):|u)u\*?u([<>=!~]=)|[<>]u(u)?\s*(u)(u)\s*(u))*u(from\s+(?P.*))u \(\s*(?Pu|u)\s*\)|(?Pu\s*)u)*u \[\s*(?Pu)?\s*\]u(?Pu \s*)?(\s*u)?$u(?Pu )\s*(?Pc s^dd„‰d}tj|ƒ}|rZ|jƒ}|d}|dpN|d}|dsdd}nd}|djƒ}|s™d}d}|d}nk|dd kr¶d |}ntj|ƒ} ‡fd d †| Dƒ}d |djdd „|Dƒƒf}|dsd} ntj |dƒ} t d|d|d| d|d|d|ƒ}n|S(NcSs|jƒ}|d|dfS(Nuopuvn(u groupdict(umud((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuget_constraintTs u)parse_requirement..get_constraintudnuc1uc2udirefuiu<>!=u~=csg|]}ˆ|ƒ‘qS(((u.0um(uget_constraint(u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu ls u%parse_requirement..u%s (%s)u, cSsg|]}d|‘qS(u%s %s((u.0ucon((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu ms uexunameu constraintsuextrasu requirementusourceuurl( uNoneuREQUIREMENT_REumatchu groupdictustripuRELOP_IDENT_REufinditerujoinuCOMMA_REusplitu Container( usuresultumudunameuconsuurluconstrursuiteratoruextras((uget_constraintu1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuparse_requirementRs4       &  uparse_requirementcCsødd„}i}xß|D]×\}}}tjj||ƒ}x°t|ƒD]¢}tjj||ƒ} x„t| ƒD]v} ||| ƒ} |dkr¦|j| dƒqr||| ƒ} |jtjjdƒjdƒ} | d| || .get_rel_pathu/N( uosupathujoinuiglobuNoneupopureplaceusepurstrip(uresources_rooturulesu get_rel_pathu destinationsubaseusuffixudestuprefixuabs_baseuabs_globuabs_pathu resource_fileurel_pathurel_dest((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuget_resources_destsws  !uget_resources_destscCs:ttdƒrd}ntjttdtjƒk}|S(Nu real_prefixu base_prefixT(uhasattrusysuTrueuprefixugetattr(uresult((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuin_venv’s uin_venvcCs;tjdkr.dtjkr.tjd}n tj}|S(Nudarwinu__PYVENV_LAUNCHER__(usysuplatformuosuenvironu executable(uresult((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuget_executableœs   uget_executablecCs}|}xpt|ƒ}|}| r1|r1|}n|r |djƒ}||krWPn|rvd|||f}qvq q |S(Niu %c: %s %s(u raw_inputulower(upromptu allowed_charsu error_promptudefaultupusuc((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuproceed¥s    uproceedcCsVt|tƒr|jƒ}ni}x+|D]#}||kr+||||—suFileOperator.cCs¶tjj|ƒ}||jkr²tjj|ƒ r²|jj|ƒtjj|ƒ\}}|j|ƒtj d|ƒ|j s“tj |ƒn|j r²|j j|ƒq²ndS(Nu Creating %s(uosupathuabspathuensureduexistsuaddusplitu ensure_diruloggeruinfoudry_runumkdirurecordu dirs_created(uselfupathuduf((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu ensure_dir™s"   uFileOperator.ensure_dircCs«t|| ƒ}tjd||ƒ|jsš|sD|j||ƒr|sSd}q|j|ƒsht‚|t|ƒd…}nt j |||dƒn|j |ƒ|S(NuByte-compiling %s to %sT( ucache_from_sourceuloggeruinfoudry_rununeweruNoneu startswithuAssertionErrorulenu py_compileucompileuTrueurecord_as_written(uselfupathuoptimizeuforceuprefixudpathudiagpath((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu byte_compile¥s   uFileOperator.byte_compilecCstjj|ƒrtjj|ƒr‘tjj|ƒ r‘tjd|ƒ|js`tj |ƒn|j r ||j krŽ|j j |ƒqŽq qtjj|ƒr¬d}nd}tjd||ƒ|jsÞtj |ƒn|j r||j kr |j j |ƒq qndS(NuRemoving directory tree at %sulinkufileuRemoving %s %s(uosupathuexistsuisdiruislinkuloggerudebugudry_runushutilurmtreeurecordu dirs_createduremoveu files_written(uselfupathus((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuensure_removed³s"%     uFileOperator.ensure_removedcCsjd}x]|setjj|ƒr:tj|tjƒ}Pntjj|ƒ}||kr\Pn|}q W|S(NF(uFalseuosupathuexistsuaccessuW_OKudirname(uselfupathuresultuparent((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu is_writableÈs   uFileOperator.is_writablecCs/|jst‚|j|jf}|jƒ|S(uV Commit recorded changes, turn off recording, return changes. (urecorduAssertionErroru files_writtenu dirs_createdu _init_record(uselfuresult((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyucommitÔs uFileOperator.commitcCsÜ|jsÎx9t|jƒD](}tjj|ƒrtj|ƒqqWt|jddƒ}xq|D]f}tj |ƒ}|rº|dgks‘t ‚tjj ||dƒ}tj |ƒntj |ƒqaWn|jƒdS(Nureverseu __pycache__iT(udry_runulistu files_writtenuosupathuexistsuremoveusortedu dirs_createduTrueulistdiruAssertionErrorujoinurmdiru _init_record(uselfufudirsuduflistusd((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyurollbackÞs  uFileOperator.rollbackNFT(u__name__u __module__u __qualname__uFalseu__init__u _init_recordurecord_as_writtenuneweruTrueu copy_fileuNoneu copy_streamuwrite_binary_fileuwrite_text_fileuset_modeuset_executable_modeu ensure_diru byte_compileuensure_removedu is_writableucommiturollback(u __locals__((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu FileOperator:s          u FileOperatorcCs‹|tjkrtj|}n t|ƒ}|dkr@|}nG|jdƒ}t||jdƒƒ}x|D]}t||ƒ}qnW|S(Nu.i(usysumodulesu __import__uNoneusplitugetattrupop(u module_nameu dotted_pathumoduresultupartsup((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuresolveðs    uresolvecBsS|EeZdZdd„Zedd„ƒZdd„Zdd„Zej Z d S( u ExportEntrycCs(||_||_||_||_dS(N(unameuprefixusuffixuflags(uselfunameuprefixusuffixuflags((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu__init__s   uExportEntry.__init__cCst|j|jƒS(N(uresolveuprefixusuffix(uself((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuvaluesuExportEntry.valuecCs d|j|j|j|jfS(Nu(unameuprefixusuffixuflags(uself((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu__repr__ suExportEntry.__repr__cCsdt|tƒsd}nH|j|jko]|j|jko]|j|jko]|j|jk}|S(NF(u isinstanceu ExportEntryuFalseunameuprefixusuffixuflags(uselfuotheruresult((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu__eq__s uExportEntry.__eq__N( u__name__u __module__u __qualname__u__init__ucached_propertyuvalueu__repr__u__eq__uobjectu__hash__(u __locals__((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu ExportEntryÿs    u ExportEntryu´(?P(\w|[-.])+) \s*=\s*(?P(\w+)([:\.]\w+)*) \s*(\[\s*(?P\w+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])? c CsGtj|ƒ}|sId}d|ks3d|krCtd|ƒ‚qCnú|jƒ}|d}|d}|jdƒ}|dkr”|d}}n4|dkr³td|ƒ‚n|jdƒ\}}|d } | dkrd|ksöd|kr td|ƒ‚ng} nd d „| jd ƒDƒ} t|||| ƒ}|S( Nu[u]uInvalid specification %runameucallableu:iiuflagscSsg|]}|jƒ‘qS((ustrip(u.0uf((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu ;s u$get_export_entry..u,(uENTRY_REusearchuNoneuDistlibExceptionu groupdictucountusplitu ExportEntry( u specificationumuresultudunameupathucolonsuprefixusuffixuflags((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuget_export_entry!s2          uget_export_entryc Cs|d krd}ntjdkrHdtjkrHtjjdƒ}ntjjdƒ}tjj|ƒrtj|tj ƒ}|såt j d|ƒqånHytj |ƒd }Wn.tk rät j d|dd ƒd }YnX|s tjƒ}t j d |ƒntjj||ƒS( u¦ Return the default base location for distlib caches. If the directory does not exist, it is created. Use the suffix provided for the base directory, and default to '.distlib' if it isn't provided. On Windows, if LOCALAPPDATA is defined in the environment, then it is assumed to be a directory, and will be the parent directory of the result. On POSIX, and on Windows if LOCALAPPDATA is not defined, the user's home directory - using os.expanduser('~') - will be the parent directory of the result. The result is just the directory '.distlib' in the parent directory as determined above, or with the name specified with ``suffix``. u.distlibuntu LOCALAPPDATAu $localappdatau~u(Directory exists but is not writable: %suUnable to create %suexc_infou#Default location unusable, using %sNTF(uNoneuosunameuenvironupathu expandvarsu expanduseruisdiruaccessuW_OKuloggeruwarningumakedirsuTrueuOSErroruFalseutempfileumkdtempujoin(usuffixuresultuusable((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuget_cache_base@s&       uget_cache_basecCs`tjjtjj|ƒƒ\}}|r?|jddƒ}n|jtjdƒ}||dS(u Convert an absolute path to a directory name for use in a cache. The algorithm used is: #. On Windows, any ``':'`` in the drive is replaced with ``'---'``. #. Any occurrence of ``os.sep`` is replaced with ``'--'``. #. ``'.cache'`` is appended. u:u---u--u.cache(uosupathu splitdriveuabspathureplaceusep(upathudup((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyupath_to_cache_diris $upath_to_cache_dircCs|jdƒs|dS|S(Nu/(uendswith(us((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu ensure_slashzsu ensure_slashcCskd}}d|kr^|jddƒ\}}d|krC|}q^|jddƒ\}}n|||fS(Nu@iu:(uNoneusplit(unetlocuusernameupassworduprefix((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuparse_credentials€s    uparse_credentialscCs tjdƒ}tj|ƒ|S(Ni(uosuumask(uresult((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuget_process_umask‹s uget_process_umaskcCsXd}d}x3t|ƒD]%\}}t|tƒsd}PqqW|dk sTt‚|S(NTF(uTrueuNoneu enumerateu isinstanceu string_typesuFalseuAssertionError(usequresultuius((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuis_string_sequencesuis_string_sequenceu3([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-([a-z0-9_.+-]+)u -py(\d\.?\d?)cCsd}d}tj|ƒ}|rI|jdƒ}|d|jƒ…}n|rÉt|ƒt|ƒdkrÉtjtj|ƒd|ƒ}|rÉ|j ƒ}|d|…||dd…|f}qÉn|dkrt j|ƒ}|r|jdƒ|jdƒ|f}qn|S(uw Extract name, version, python version from a filename (no extension) Return name, version, pyver or None iNu\bi( uNoneuPYTHON_VERSIONusearchugroupustartulenureumatchuescapeuenduPROJECT_NAME_AND_VERSION(ufilenameu project_nameuresultupyverumun((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyusplit_filenameŸs " - 'usplit_filenameu-(?P[\w .-]+)\s*\(\s*(?P[^\s)]+)\)$cCsRtj|ƒ}|s(td|ƒ‚n|jƒ}|djƒjƒ|dfS(uÇ A utility method used to get name and version from a string. From e.g. a Provides-Dist value. :param p: A value in a form 'foo (1.0)' :return: The name and version as a tuple. u$Ill-formed name/version string: '%s'unameuver(uNAME_VERSION_REumatchuDistlibExceptionu groupdictustripulower(upumud((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuparse_name_and_versionºs  uparse_name_and_versioncCstƒ}t|pgƒ}t|p'gƒ}d|krS|jdƒ||O}nxµ|D]­}|dkr||j|ƒqZ|jdƒrÚ|dd…}||kr»tjd|ƒn||kr|j|ƒqqZ||krútjd|ƒn|j|ƒqZW|S(Nu*u-iuundeclared extra: %s(useturemoveuaddu startswithuloggeruwarning(u requestedu availableuresulturuunwanted((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu get_extrasÉs&         u get_extrascCsªi}yet|ƒ}|jƒ}|jdƒdkrFtjdƒn$tjdƒ|ƒ}tj|ƒ}Wn8t k r¥}ztj d||ƒWYdd}~XnX|S(Nu Content-Typeuapplication/jsonu$Unexpected response for JSON requestuutf-8u&Failed to get external data for %s: %s( uurlopenuinfougetuloggerudebugucodecsu getreaderujsonuloadu Exceptionu exception(uurluresulturespuheadersureaderue((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu_get_external_dataâs  &u_get_external_datacCs*d|djƒ|f}t|ƒ}|S(Nu9https://www.red-dove.com/pypi/projects/%s/%s/project.jsoni(uupperu_get_external_data(unameuurluresult((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuget_project_dataös uget_project_datacCs'd|djƒ||f}t|ƒS(Nu<https://www.red-dove.com/pypi/projects/%s/%s/package-%s.jsoni(uupperu_get_external_data(unameuversionuurl((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuget_package_dataüsuget_package_datacBs>|EeZdZdZdd„Zdd„Zdd„ZdS( uCacheuæ A class implementing a cache for resources that need to live in the file system e.g. shared libraries. This class was moved from resources to here because it could be used by other modules, e.g. the wheel module. cCsvtjj|ƒs"tj|ƒntj|ƒjd@dkrQtjd|ƒntjjtjj |ƒƒ|_ dS(uu Initialise an instance. :param base: The base directory where the cache should be located. i?iuDirectory '%s' is not privateN( uosupathuisdirumakedirsustatust_modeuloggeruwarninguabspathunormpathubase(uselfubase((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu__init__ s uCache.__init__cCs t|ƒS(uN Converts a resource prefix to a directory name in the cache. (upath_to_cache_dir(uselfuprefix((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu prefix_to_dirsuCache.prefix_to_dirc Cs»g}x®tj|jƒD]š}tjj|j|ƒ}yZtjj|ƒs^tjj|ƒrntj|ƒn"tjj|ƒrt j |ƒnWqt k r²|j |ƒYqXqW|S(u" Clear the cache. ( uosulistdirubaseupathujoinuislinkuisfileuremoveuisdirushutilurmtreeu Exceptionuappend(uselfu not_removedufn((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuclears$ u Cache.clearN(u__name__u __module__u __qualname__u__doc__u__init__u prefix_to_diruclear(u __locals__((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuCaches  uCachecBsY|EeZdZdZdd„Zd dd„Zdd„Zdd „Zd d „Z d S(u EventMixinu1 A very simple publish/subscribe system. cCs i|_dS(N(u _subscribers(uself((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu__init__2suEventMixin.__init__cCs\|j}||kr+t|gƒ||.strongconnect(u_succs(uselfunode((ugraphuindexu index_counterulowlinksuresultustacku strongconnectu1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyustrong_connections¾s  $"  uSequencer.strong_connectionscCs‘dg}xF|jD];}|j|}x%|D]}|jd||fƒq-WqWx"|jD]}|jd|ƒq\W|jdƒdj|ƒS(Nu digraph G {u %s -> %s;u %s;u}u (u_predsuappendu_nodesujoin(uselfuresultusuccupredsupredunode((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyudotñs    u Sequencer.dotNF(u__name__u __module__u __qualname__u__init__uadd_nodeuFalseu remove_nodeuadduremoveuis_stepu get_stepsupropertyustrong_connectionsudot(u __locals__((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu Sequencervs     3u Sequenceru.tar.gzu.tar.bz2u.taru.zipu.tgzu.tbzu.whlc s采fdd†}tjjˆƒ‰tˆƒ‰d}|dkrÊ|jdƒr]d}qÊ|jdƒr{d}d }qÊ|jdƒr™d }d }qÊ|jdƒr·d}d}qÊtd|ƒ‚nz|dkrt|dƒ}|r]|jƒ}x|D]}||ƒqWq]nBt j ||ƒ}|r]|j ƒ}x|D]}||ƒqFWn|dkrÀt j ddkrÀxA|jƒD]0} t| jtƒs‰| jjdƒ| _q‰q‰Wn|jˆƒWd|rä|jƒnXdS(Ncs|t|tƒs!|jdƒ}ntjjtjjˆ|ƒƒ}|jˆƒ se|ˆtjkrxt d|ƒ‚ndS(Nuutf-8upath outside destination: %r( u isinstanceu text_typeudecodeuosupathuabspathujoinu startswithusepu ValueError(upathup(udest_diruplen(u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu check_paths !#uunarchive..check_pathu.zipu.whluzipu.tar.gzu.tgzutgzur:gzu.tar.bz2u.tbzutbzur:bz2u.tarutaruruUnknown format for %riiuutf-8(u.zipu.whl(u.tar.gzu.tgz(u.tar.bz2u.tbz(uosupathuabspathulenuNoneuendswithu ValueErroruZipFileunamelistutarfileuopenugetnamesusysu version_infou getmembersu isinstanceunameu text_typeudecodeu extractalluclose( uarchive_filenameudest_diruformatuchecku check_pathuarchiveumodeunamesunameutarinfo((udest_diruplenu1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu unarchivesH           u unarchivec Cs²tjƒ}t|ƒ}t|dƒ…}x{tj|ƒD]j\}}}xX|D]P}tjj||ƒ}||d…} tjj| |ƒ} |j|| ƒqPWq:WWdQX|S(u*zip a directory tree into a BytesIO objectuwN( uiouBytesIOulenuZipFileuosuwalkupathujoinuwrite( u directoryuresultudlenuzfurootudirsufilesunameufullureludest((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuzip_dir:s   uzip_diruuKuMuGuTuPcBs°|EeZdZdZdddd„Zdd„Zdd „Zd d „Zd d „Ze dd„ƒZ e dd„ƒZ dd„Z e dd„ƒZ e dd„ƒZdS(uProgressuUNKNOWNiidcCsV|dks||kst‚||_|_||_d|_d|_d|_dS(NiF( uNoneuAssertionErroruminucurumaxustarteduelapseduFalseudone(uselfuminvalumaxval((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu__init__Qs    uProgress.__init__cCs}|j|kst‚|jdks9||jks9t‚||_tjƒ}|jdkri||_n||j|_dS(N(uminuAssertionErrorumaxuNoneucurutimeustarteduelapsed(uselfucurvalunow((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuupdateYs$   uProgress.updatecCs*|dkst‚|j|j|ƒdS(Ni(uAssertionErroruupdateucur(uselfuincr((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu incrementcsuProgress.incrementcCs|j|jƒ|S(N(uupdateumin(uself((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyustartgsuProgress.startcCs/|jdk r"|j|jƒnd|_dS(NT(umaxuNoneuupdateuTrueudone(uself((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyustopksu Progress.stopcCs|jdkr|jS|jS(N(umaxuNoneuunknown(uself((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyumaximumpsuProgress.maximumcCsZ|jrd}nD|jdkr*d}n,d|j|j|j|j}d|}|S(Nu100 %u ?? %gY@u%3d %%(udoneumaxuNoneucurumin(uselfuresultuv((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu percentagets   " uProgress.percentagecCsU|dkr|jdks-|j|jkr6d}ntjdtj|ƒƒ}|S(Niu??:??:??u%H:%M:%S(umaxuNoneucuruminutimeustrftimeugmtime(uselfudurationuresult((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuformat_durations- uProgress.format_durationcCsµ|jrd}|j}nƒd}|jdkr9d}ne|jdksZ|j|jkrcd}n;t|j|jƒ}||j|j}|d|j}d||j|ƒfS(NuDoneuETA iiu%s: %siÿÿÿÿ(udoneuelapsedumaxuNoneucuruminufloatuformat_duration(uselfuprefixut((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuETAˆs   ! u Progress.ETAcCsh|jdkrd}n|j|j|j}x(tD] }|dkrLPn|d}q6Wd||fS(Nigièg@@u%d %sB/s(uelapseducuruminuUNITS(uselfuresultuunit((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuspeed›s   uProgress.speedN(u__name__u __module__u __qualname__uunknownu__init__uupdateu incrementustartustopupropertyumaximumu percentageuformat_durationuETAuspeed(u __locals__((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuProgressNs    uProgressu \{([^}]*)\}u[^/\\,{]\*\*|\*\*[^/\\,}]u^[^{]*\}|\{[^}]*$cCsZtj|ƒr(d}t||ƒ‚ntj|ƒrPd}t||ƒ‚nt|ƒS(uAExtended globbing function that supports ** and {opt1,opt2,opt3}.u7invalid glob %r: recursive glob "**" must be used aloneu2invalid glob %r: mismatching set marker '{' or '}'(u_CHECK_RECURSIVE_GLOBusearchu ValueErroru_CHECK_MISMATCH_SETu_iglob(u path_globumsg((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuiglob°suiglobc cs‹tj|dƒ}t|ƒdkrœt|ƒdksBt|ƒ‚|\}}}x3|jdƒD]4}x+tdj|||fƒƒD] }|Vq†WqaWnëd|krÇxÜt|ƒD] }|VqµWnÀ|jddƒ\}}|dkrôd}n|dkr d}n|jdƒ}|jd ƒ}x]tj |ƒD]L\}}} tj j |ƒ}x(ttj j||ƒƒD] } | VqtWq7WdS( Niiu,uu**u.u*u/u\( u RICH_GLOBusplitulenuAssertionErroru_iglobujoinu std_iglobulstripuosuwalkupathunormpath( u path_globurich_path_globuprefixusetusuffixuitemupathuradicaludirufilesufn((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu_iglob»s*%      "u_iglobcBs,|EeZdZdZdZdd„ZdS(uHTTPSConnectionc CsÞtj|j|jf|jƒ}t|dd ƒrI||_|jƒnt t dƒs¯|j rmt j }n t j }t j||j|jd|dt jd|j ƒ|_n®t jt jƒ}|jt jO_|jrõ|j|j|jƒni}|j rHt j |_|jd|j ƒtt dd ƒrH|j|d!           uHTTPSConnection.connectNT(u__name__u __module__u __qualname__uNoneuca_certsuTrueu check_domainuconnect(u __locals__((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuHTTPSConnectionÜsuHTTPSConnectioncBs;|EeZdZddd„Zdd„Zdd„ZdS( u HTTPSHandlercCs#tj|ƒ||_||_dS(N(uBaseHTTPSHandleru__init__uca_certsu check_domain(uselfuca_certsu check_domain((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu__init__s  uHTTPSHandler.__init__cOs7t||Ž}|jr3|j|_|j|_n|S(uû This is called to create a connection instance. Normally you'd pass a connection class to do_open, but it doesn't actually check for a class, and just expects a callable. As long as we behave just as a constructor would have, we should be OK. If it ever changes so that we *must* pass a class, we'll create an UnsafeHTTPSConnection class which just sets check_domain to False in the class definition, and choose which one to pass to do_open. (uHTTPSConnectionuca_certsu check_domain(uselfuargsukwargsuresult((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu _conn_maker s   uHTTPSHandler._conn_makercCsqy|j|j|ƒSWnStk rl}z3dt|jƒkrWtd|jƒ‚n‚WYdd}~XnXdS(Nucertificate verify failedu*Unable to verify server certificate for %s(udo_openu _conn_makeruURLErrorustrureasonuCertificateErroruhost(uselfureque((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu https_opensuHTTPSHandler.https_openNT(u__name__u __module__u __qualname__uTrueu__init__u _conn_makeru https_open(u __locals__((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu HTTPSHandlers u HTTPSHandlercBs |EeZdZdd„ZdS(uHTTPSOnlyHandlercCstd|ƒ‚dS(NuAUnexpected HTTP request on what should be a secure connection: %s(uURLError(uselfureq((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu http_open0suHTTPSOnlyHandler.http_openN(u__name__u __module__u __qualname__u http_open(u __locals__((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuHTTPSOnlyHandler/suHTTPSOnlyHandleriicBs&|EeZdZdddd„ZdS(uHTTPucKs5|dkrd}n|j|j|||ƒdS(Ni(uNoneu_setupu_connection_class(uselfuhostuportukwargs((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu__init__<s  u HTTP.__init__N(u__name__u __module__u __qualname__uNoneu__init__(u __locals__((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuHTTP;suHTTPcBs&|EeZdZdddd„ZdS(uHTTPSucKs5|dkrd}n|j|j|||ƒdS(Ni(uNoneu_setupu_connection_class(uselfuhostuportukwargs((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu__init__Cs  uHTTPS.__init__N(u__name__u __module__u __qualname__uNoneu__init__(u __locals__((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuHTTPSBsuHTTPScBs/|EeZdZddd„Zdd„ZdS(u TransporticCs ||_tjj||ƒdS(N(utimeoutu xmlrpclibu Transportu__init__(uselfutimeoutu use_datetime((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu__init__Js uTransport.__init__cCsŽ|j|ƒ\}}}tdkr<t|d|jƒ}nN|j sY||jdkr}||_|tj|ƒf|_n|jd}|S(Niiutimeoutii(ii(u get_host_infou _ver_infouHTTPutimeoutu _connectionu_extra_headersuhttplibuHTTPConnection(uselfuhostuhuehux509uresult((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyumake_connectionNs   uTransport.make_connectionN(u__name__u __module__u __qualname__u__init__umake_connection(u __locals__((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu TransportIsu TransportcBs/|EeZdZddd„Zdd„ZdS(u SafeTransporticCs ||_tjj||ƒdS(N(utimeoutu xmlrpclibu SafeTransportu__init__(uselfutimeoutu use_datetime((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu__init__Zs uSafeTransport.__init__cCs­|j|ƒ\}}}|s'i}n|j|d|EeZdZdd„Zdd„Zdd„ZeZdS(u CSVReadercKs‚d|krM|d}tjddkrAtjdƒ|ƒ}n||_nt|ddƒ|_tj|j|j|_dS(Nustreamiiuutf-8upathur( usysu version_infoucodecsu getreaderustreamu _csv_openucsvureaderudefaults(uselfukwargsustream((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu__init__šs   uCSVReader.__init__cCs|S(N((uself((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu__iter__¥suCSVReader.__iter__cCskt|jƒ}tjddkrgxBt|ƒD]1\}}t|tƒs/|jdƒ||Ñs uBConfigurator.configure_custom..convert..u()(u isinstanceulistutupleutypeudictuconfigure_customuconvert(uouresultuk(uconvertuself(u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuconvertÏs(  u.Configurator.configure_custom..convertu()u.u[]csg|]}ˆ|ƒ‘qS(((u.0uo(uconvert(u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu äs u1Configurator.configure_custom..cs2g|](}t|ƒr|ˆˆ|ƒf‘qS((u valid_ident(u.0uk(uconfiguconvert(u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu ås (upopucallableuresolveuNoneutupleudictuitemsusetattr( uselfuconfigucupropsuargsuitemsukwargsuresultunuv((uconfiguconvertuselfu1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuconfigure_customÎs " uConfigurator.configure_customcCsI|j|}t|tƒrEd|krE|j|ƒ|j|<}n|S(Nu()(uconfigu isinstanceudictuconfigure_custom(uselfukeyuresult((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu __getitem__ís uConfigurator.__getitem__c Csatjj|ƒs-tjj|j|ƒ}ntj|dddƒ}tj|ƒ}WdQX|S(u*Default converter for the inc:// protocol.uruencodinguutf-8N( uosupathuisabsujoinubaseucodecsuopenujsonuload(uselfuvalueufuresult((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu inc_convertós uConfigurator.inc_convertN( u__name__u __module__u __qualname__udictuBaseConfiguratoruvalue_convertersuNoneu__init__uconfigure_customu __getitem__u inc_convert(u __locals__((u __class__u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu ConfiguratorÅs    u ConfiguratorcBs>|EeZdZdddd„Zdd„Zdd„ZdS( uSubprocessMixincCs||_||_dS(N(uverboseuprogress(uselfuverboseuprogress((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu__init__s uSubprocessMixin.__init__cCs—|j}|j}xt|jƒ}|s+Pn|dk rG|||ƒq|s`tjjdƒntjj|jdƒƒtjjƒq|j ƒdS(u¨ Read lines from a subprocess' output stream and either pass to a progress callable (if specified) or write progress information to sys.stderr. u.uutf-8N( uprogressuverboseureadlineuNoneusysustderruwriteudecodeuflushuclose(uselfustreamucontextuprogressuverboseus((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyureaders    uSubprocessMixin.readercKsàtj|dtjdtj|}tjd|jd|jdfƒ}|jƒtjd|jd|jdfƒ}|jƒ|j ƒ|j ƒ|j ƒ|j dk rÀ|j ddƒn|j rÜtjjdƒn|S(Nustdoutustderrutargetuargsudone.umainudone. (u subprocessuPopenuPIPEu threadinguThreadureaderustdoutustartustderruwaitujoinuprogressuNoneuverboseusysuwrite(uselfucmdukwargsuput1ut2((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyu run_commands$ $     uSubprocessMixin.run_commandNF(u__name__u __module__u __qualname__uFalseuNoneu__init__ureaderu run_command(u __locals__((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyuSubprocessMixinÿs uSubprocessMixin(u.tar.gzu.tar.bz2u.taru.zipu.tgzu.tbzu.whlT(uuKuMuGuTuP(ii(…ucodecsu collectionsudequeu contextlibucsvuglobuiglobu std_iglobuioujsonulogginguosu py_compileureushutilusocketusslu subprocessusysutarfileutempfileu threadingu ImportErrorudummy_threadingutimeuuDistlibExceptionucompatu string_typesu text_typeu raw_inputuStringIOucache_from_sourceuurlopenuhttplibu xmlrpclibu splittypeu HTTPHandleru HTTPSHandleruBaseHTTPSHandleruBaseConfiguratoru valid_identu Containeru configparseruURLErrorumatch_hostnameuCertificateErroruZipFileu getLoggeru__name__uloggeruCOMMAucompileuCOMMA_REuIDENTu EXTRA_IDENTuVERSPECuRELOPuBARE_CONSTRAINTSu DIRECT_REFu CONSTRAINTSu EXTRA_LISTuEXTRASu REQUIREMENTuREQUIREMENT_REu RELOP_IDENTuRELOP_IDENT_REuparse_requirementuget_resources_destsuin_venvuget_executableuNoneuproceeduextract_by_keyu read_exportsu write_exportsucontextmanagerutempdiruchdirusocket_timeoutuobjectucached_propertyu convert_pathu FileOperatoruresolveu ExportEntryuVERBOSEuENTRY_REuget_export_entryuget_cache_baseupath_to_cache_diru ensure_slashuparse_credentialsuget_process_umaskuis_string_sequenceuIuPROJECT_NAME_AND_VERSIONuPYTHON_VERSIONusplit_filenameuNAME_VERSION_REuparse_name_and_versionu get_extrasu_get_external_datauget_project_datauget_package_datauCacheu EventMixinu SequenceruARCHIVE_EXTENSIONSuTrueu unarchiveuzip_diruUNITSuProgressu RICH_GLOBu_CHECK_RECURSIVE_GLOBu_CHECK_MISMATCH_SETu_iglobuHTTPSConnectionuHTTPSOnlyHandleru version_infou _ver_infouHTTPuHTTPSu Transportu SafeTransportu ServerProxyu _csv_openuCSVBaseu CSVReaderu CSVWriteru ConfiguratoruSubprocessMixin(((u1/tmp/pip-zej_zi-build/pip/_vendor/distlib/util.pyusÔ                  ‚  . %   $    ¶  )          ,H‹6 ] !*)   :