3 ]}@sJddlmZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZyddlZdZWnek rdZYnXddlmZddlmZddlZddlmZmZddlmZdd lmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'dd l(m)Z)dd l*m+Z+dd l,m-Z-dd l.m/Z/ddl0m1Z1ddl2m3Z3m4Z4ddl5m6Z6ddl7m8Z8ddl9m:Z:m;Z;ddlZ>ddl?m@Z@mAZAddlBmCZCmDZDddlEmFZFddlGmHZHddlImJZJddlKmLZLddlMmNZNddlOmPZPddlQmRZRdddd d!d"d#d$d%d&d'g ZSejTeUZVd(d)ZWGd*d+d+e@ZXGd,d-d-e=ZYGd.d/d/eNZZGd0d1d1e>Z[Gd2d3d3e:j\Z]dSd4dZ^e j_d5e j`Zae j_d6e j`Zbd7dZcd8dZdd9d Zed:d!Zfd;d"Zgdd$Zid?d%Zjd@dAZkdBdCZldDdEZmdFdGZndTdHd&ZodUdId#ZpdJdKZqGdLdMdMeRjrZsdVdNd'ZtdOdPZudQdRZvdS)W)absolute_importNTF)parse)request)InstallationError HashMismatch)PyPI) splitextrmtree format_size display_path backup_dirask_path_exists unpack_fileARCHIVE_EXTENSIONSconsumecall_subprocess) auto_decode)check_path_owner) indent_log)SETUPTOOLS_SHIM)libc_ver)DownloadProgressBarDownloadProgressSpinner)write_delete_marker_file)vcs)requestssix) BaseAdapter HTTPAdapter)AuthBase HTTPBasicAuth)CONTENT_CHUNK_SIZEResponse)get_netrc_auth)CaseInsensitiveDict)urllib3)CacheControlAdapter) FileCache) LockError) xmlrpc_clientget_file_contentis_url url_to_path path_to_urlis_archive_fileunpack_vcs_linkunpack_file_url is_vcs_url is_file_urlunpack_http_url unpack_urlcCs dtjdtjdtjid}|dddkrBtj|dd<n|dddkrtjjd krntjd d }ntj}d jd d|D|dd<nB|dddkrtj|dd<n |dddkrtj|dd<tjj drJddl m }t t ddtdddg|j}t t ddtddgt}|r<||d<|rJ||d<tjj dr|tjdr|dtjdd|d<tjrtj|jdid<tjrtj|jdid<tjrtj|d<trtjd d d)krtj|d"<d#j|tj|d*d&d'd(S)+z6 Return a string representing the user agent. pip)nameversionr6) installerpythonimplementationr:CPythonr7PyPyfinalN.cSsg|] }t|qS)str).0xr@r@+/tmp/pip-build-8jg9gmni/pip/pip/download.py Sszuser_agent..Jython IronPythonlinuxr)distrocSs|dS)Nr@)rCr@r@rD_szuser_agent..idcSs|dS)NrJr@)rCr@r@rDrKcsliblibcrIdarwinmacOSsystemreleasecpuopenssl_versionz9{data[installer][name]}/{data[installer][version]} {json},:T) separators sort_keys)datajson)rTrU)rWrX)r5 __version__platformpython_versionpython_implementationsyspypy_version_info releaseleveljoin startswith pip._vendorrIdictfilterziplinux_distributionrmac_verrQ setdefaultrRmachineHAS_TLS version_infosslOPENSSL_VERSIONformatr\dumps)r[rbrI distro_infosrNr@r@rD user_agent?sP        ruc@s.eZdZd ddZddZddZdd Zd S) MultiDomainBasicAuthTcCs||_i|_dS)N) prompting passwords)selfrwr@r@rD__init__szMultiDomainBasicAuth.__init__cCstj|j}|jjddd}tj|dd|f|dd|_|jj|d\}}|dkrn|j|j\}}|dkr|dkrt |j}|r|nd\}}|s|r||f|j|<t |pd|pd|}|j d|j |S) N@rJrTresponse)NN)NN) urllib_parseurlparseurlnetlocrsplit urlunparserxgetparse_credentialsr#r register_hook handle_401)ryreqparsedrusernamepassword netrc_authr@r@rD__call__s & zMultiDomainBasicAuth.__call__cKs|jdkr|S|js|Stj|j}tjjd|j}t j d}|sH|rX||f|j |j<|j |j j t|ppd|pvd|j}|jj|f|}|jj||S)Niz User for %s: z Password: r|) status_coderwrrrrmovesinputrgetpassrxcontentraw release_connr r connectionsendhistoryappend)ryrespkwargsrrrrnew_respr@r@rDrs     zMultiDomainBasicAuth.handle_401cCs8d|kr4|jddd}d|kr,|jddS|dfSdS)Nr{rJrrX)NN)rsplit)ryruserinfor@r@rDrs  z&MultiDomainBasicAuth.parse_credentialsN)T)__name__ __module__ __qualname__rzrrrr@r@r@rDrvs !"rvc@seZdZdddZddZdS)LocalFSAdapterNc Cst|j}t}d|_|j|_ytj|} Wn.tk rZ} zd|_| |_WYdd} ~ XnPXtj j | j dd} t j |dp~d} t| | j| d|_t|d|_|jj|_|S) NiT)usegmtrz text/plain)z Content-TypezContent-Lengthz Last-Modifiedrb)r,rr"rosstatOSErrorremailutils formatdatest_mtime mimetypes guess_typer$st_sizeheadersopenclose) ryrstreamtimeoutverifycertproxiespathnamerstatsexcmodified content_typer@r@rDrs$    zLocalFSAdapter.sendcCsdS)Nr@)ryr@r@rDrszLocalFSAdapter.close)NNNNN)rrrrrr@r@r@rDrs rcsDeZdZdZfddZfddZfddZfdd ZZS) SafeFileCachezw A file based cache which is safe to use even when the target directory may not be accessible or writable. cs4tt|j||t|js0tjd|jd|_dS)NzThe directory '%s' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.)superrrzr directoryloggerwarning)ryargsr) __class__r@rDrzs  zSafeFileCache.__init__c s@|jdkrdSytt|j||Stttfk r:YnXdS)N)rrrrr(rIOError)ryrr)rr@rDrs  zSafeFileCache.getc s@|jdkrdSytt|j||Stttfk r:YnXdS)N)rrrsetr(rr)ryrr)rr@rDrs  zSafeFileCache.setc s@|jdkrdSytt|j||Stttfk r:YnXdS)N)rrrdeleter(rr)ryrr)rr@rDr(s  zSafeFileCache.delete) rrr__doc__rzrrr __classcell__r@r@)rrDrs   rc@seZdZddZdS)InsecureHTTPAdaptercCsd|_d|_dS)N CERT_NONE) cert_reqsca_certs)ryconnrrrr@r@rD cert_verify8szInsecureHTTPAdapter.cert_verifyN)rrrrr@r@r@rDr6srcs,eZdZdZfddZfddZZS) PipSessionNc s|jdd}|jdd}|jdg}tt|j||t|jd<t|_tj |dgdd}|rvt t |d d |d }n t |d }t |d }|jd ||jd||jdtx|D]}|jdj||qWdS)Nretriesrcacheinsecure_hostsz User-Agentig?)totalstatus_forcelistbackoff_factorT) use_dir_lock)r max_retries)rzhttps://zhttp://zfile://z https://{0}/)poprrrzrurrvauthr%Retryr&rrrmountrrr) ryrrrrrsecure_adapterinsecure_adapterhost)rr@rDrzAs*           zPipSession.__init__cs(|jd|jtt|j||f||S)Nr)rlrrrr)rymethodrrr)rr@rDr}szPipSession.request)rrrrrzrrr@r@)rrDr=s             z^(http|https|file):z /*([a-z])\|cCs6d|kr dS|jdddj}|ddddgtjkS) z)Returns true if the name looks like a URLrXFrJrrhttpsrftp)rrr all_schemes)r6rr@r@rDr+scCsH|jdstd|tj|\}}}}}|r6d|}tj||}|S)z( Convert a file: URL to a path. zfile:z4You can only turn file: urls into filenames (not %r)z\\)reAssertionErrorrurlspliturllib_request url2pathname)r_rrr@r@rDr,s  cCs*tjjtjj|}tjdtj|}|S)zh Convert a path to a file: URL. The path will be made absolute and have quoted path parts. zfile:)rrnormpathabspathrurljoinr pathname2url)rrr@r@rDr-scCs t|dj}|tkrdSdS)z9Return True if `name` is a considered as an archive file.rJTF)rrr)r6extr@r@rDr.scCst|}|j|dS)N)_get_used_vcs_backendunpack)linklocation vcs_backendr@r@rDr/scCs.x(tjD]}|j|jkr||j}|SqWdS)N)rbackendsrschemesr)rbackendrr@r@rDrs   rcCs tt|S)N)boolr)rr@r@rDr1scCs|jjjdS)Nzfile:)rrre)rr@r@rDr2scCst|j}tjj|S)zReturn whether a file:// Link points to a directory. ``link`` must not have any other scheme but file://. Call is_file_url() first. )r,url_without_fragmentrrisdir)r link_pathr@r@rD is_dir_urls rcOs|S)Nr@)iterablerrr@r@rD_progress_indicatorsrc sLytjd}Wntttfk r0d}YnXtdd}tjtj krRd}n&|r\d}n|dkrjd}n|std}nd}|j }fdd }fd d } t } |j t j kr|} n|j} |r|rtjd | t|t|d j} ntjd| tj} n |rtjd| n tjd| tjd|| | |tt} |r@|j| nt| dS)Nzcontent-lengthr from_cacheF(iTc 3s\y$xjj|ddD] }|VqWWn2tk rVxjj|}|sHP|Vq6WYnXdS)NF)decode_content)rrAttributeErrorr) chunk_sizechunk)rr@rD resp_reads  z _download_url..resp_readc3s"x|D]}j||VqWdS)N)write)chunksr) content_filer@rDwritten_chunks:s  z%_download_url..written_chunkszDownloading %s (%s))maxzDownloading %szUsing cached %szDownloading from URL %si@)intr ValueErrorKeyErrorrgetattrrgetEffectiveLevelloggingINFOshow_urlrrrr infor riterrdebugr!check_against_chunksr) rrrhashes total_length cached_resp show_progressr&rrprogress_indicatorrdownloaded_chunksr@)rrrD _download_urlsL   %       r1cCsd}tjj||j}tjj|rtdt|d }|dkr@d}nj|dkrdtjdt|tj |nF|dkrt |}tjd t|t|t j ||n|dkrt jd |rt j||tjd t|dS)NTz8The file %s exists. (i)gnore, (w)ipe, (b)ackup, (a)abortiwbaFz Deleting %szBacking up %s to %srJzSaved %s)r2r3r4r5r~)rrrdfilenameexistsr r rrremover shutilmoveraexitcopyr')r6rrr<download_locationr} dest_filer@r@rD _copy_file`s.     r?c Cs|dkrtdtjdd}d}|r0t|||}|rH|}tj|d}nt||||\}}t|||||r~| r~t||||st j |t |dS)Nz@unpack_http_url() missing 1 required keyword argument: 'session'z-unpackzpip-r) rtempfilemkdtemp_check_download_dirrr_download_http_urlrr?runlinkr ) rr download_dirrr+temp_diralready_downloaded_path from_pathrr@r@rDr3{s,     cCst|j}t|rHtjj|r&t|tj||dd|rDt j ddS|rV|j |d}|rjt |||}|rt|}n|}t j|d}t|||||r| rt|||dS)zUnpack link into location. If download_dir is provided and link points to a file, make a copy of the link file inside download_dir. T)symlinksz*Link is a directory, ignoring download_dirNr)r,r rrrrr r9copytreerr'check_against_pathrBrrrr?)rrrEr+rrGrHrr@r@rDr0s,     c Cstjj|rt|d}tjg}|jd|jt||jd|d|g7}tj d|t t ||ddWdQRXtjj |tj |d }tj d ||t||ddd dS) zCopy distribution files in `link_path` to `location`. Invoked when user requests to install a local directory. E.g.: pip install . pip install ~/dev/git-repos/python-prompt-toolkit zsetup.pyz-csdistz --dist-dirzRunning setup.py sdist for %sF)cwd show_stdoutNrzUnpacking sdist %s into %s)rr)rrrr ra executablerrrr'rrrdlistdirr)rrsetup_py sdist_argsrLr@r@rD_copy_dist_from_dirs     rSc@s$eZdZdZdddZd ddZdS) PipXmlrpcTransportzRProvide a `xmlrpclib.Transport` implementation via a `PipSession` object. FcCs*tjj||tj|}|j|_||_dS)N)r) Transportrzrrr_scheme_session)ry index_urlr use_datetime index_partsr@r@rDrzs zPipXmlrpcTransport.__init__c Cs|j||dddf}tj|}y6ddi}|jj|||dd}|j||_|j|jSt j k r} zt j d| j j|WYdd} ~ XnXdS)Nz Content-Typeztext/xmlT)r[rrzHTTP error %s while getting %s)rVrrrWpostrverboseparse_responserr HTTPErrorrcriticalr}r) ryrhandler request_bodyr\partsrrr}rr@r@rDrs     zPipXmlrpcTransport.requestN)F)F)rrrrrzrr@r@r@rDrTs rTcCs^t|rt||n:t|r.t||||dn |dkrs     0               BR!BH )  ` & 0$ ';