Your IP : 18.117.168.139
�
��abc@sddlZddlZddlZddlZddlZddlZyddlmZWn!ek
rddl mZnXddl
mZddlm
Z
mZmZmZmZmZddlmZmZmZeje�ZdZdZd efd
��YZdS(i����N(tThreadi(tDistlibException(tHTTPBasicAuthHandlertRequesttHTTPPasswordMgrturlparsetbuild_openertstring_types(tcached_propertytzip_dirtServerProxyshttps://pypi.python.org/pypitpypitPackageIndexcBs�eZdZdZdd�Zd�Zd�Zd�Zd�Z d�Z
d�Zdd �Zdd
�Z
dd�Zdddd
dd�Zd�Zdd�Zdd�Zddd�Zd�Zd�Zdd�ZRS(sc
This class represents a package index compatible with PyPI, the Python
Package Index.
s.----------ThIs_Is_tHe_distlib_index_bouNdaRY_$cCs|p t|_|j�t|j�\}}}}}}|sX|sX|sX|dkrntd|j��nd|_d|_d|_d|_ d|_
ttj
d��j}x`d
D]X} y>tj| dgd|d |�}
|
d
kr�| |_PnWq�tk
rq�Xq�WWdQXdS(s�
Initialise an instance.
:param url: The URL of the index. If not specified, the URL for PyPI is
used.
thttpthttpssinvalid repository: %stwtgpgtgpg2s --versiontstdouttstderriN(R
R(RR(t
DEFAULT_INDEXturltread_configurationRRtNonetpassword_handlertssl_verifierRtgpg_homet rpc_proxytopentostdevnullt
subprocesst
check_calltOSError(tselfRtschemetnetloctpathtparamstquerytfragtsinktstrc((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pyt__init__$s(
!
cCs3ddlm}ddlm}|�}||�S(ss
Get the distutils command for interacting with PyPI configurations.
:return: the command.
i����(tDistribution(t
PyPIRCCommand(tdistutils.coreR-tdistutils.configR.(R"R-R.td((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pyt_get_pypirc_commandBs cCsy|j�}|j|_|j�}|jd�|_|jd�|_|jdd�|_|jd|j�|_dS(s�
Read the PyPI access configuration as supported by distutils, getting
PyPI to do the actual work. This populates ``username``, ``password``,
``realm`` and ``url`` attributes from the configuration.
tusernametpasswordtrealmRt
repositoryN(R2RR6t_read_pypirctgetR3R4R5(R"tctcfg((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pyRLscCs0|j�|j�}|j|j|j�dS(s�
Save the PyPI access configuration. You must have set ``username`` and
``password`` attributes before calling this method.
Again, distutils is used to do the actual work.
N(tcheck_credentialsR2t
_store_pypircR3R4(R"R9((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pytsave_configuration[s
cCs�|jdks|jdkr-td��nt�}t|j�\}}}}}}|j|j||j|j�t |�|_
dS(sp
Check that ``username`` and ``password`` have been set, and raise an
exception if not.
s!username and password must be setN(R3RR4RRRRtadd_passwordR5RR(R"tpmt_R$((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pyR;gs !cCs�|j�|j�|j�}d|d<|j|j�g�}|j|�}d|d<|j|j�g�}|j|�S(sq
Register a distribution on PyPI, using the provided metadata.
:param metadata: A :class:`Metadata` instance defining at least a name
and version number for the distribution to be
registered.
:return: The HTTP response received from PyPI upon submission of the
request.
tverifys:actiontsubmit(R;tvalidatettodicttencode_requesttitemstsend_request(R"tmetadataR1trequesttresponse((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pytregisterss
cCsjxYtr[|j�}|sPn|jd�j�}|j|�tjd||f�qW|j�dS(sr
Thread runner for reading lines of from a subprocess into a buffer.
:param name: The logical name of the stream (used for logging only).
:param stream: The stream to read from. This will typically a pipe
connected to the output stream of a subprocess.
:param outbuf: The list to append the read lines to.
sutf-8s%s: %sN(tTruetreadlinetdecodetrstriptappendtloggertdebugtclose(R"tnametstreamtoutbufR*((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pyt_reader�s
cCs�|jdddg}|dkr-|j}n|rI|jd|g�n|dk rn|jdddg�ntj�}tjj|tjj |�d�}|jd d
d|d||g�t
jd
dj|��||fS(s�
Return a suitable command for signing a file.
:param filename: The pathname to the file to be signed.
:param signer: The identifier of the signer of the file.
:param sign_password: The passphrase for the signer's
private key used for signing.
:param keystore: The path to a directory which contains the keys
used in verification. If not specified, the
instance's ``gpg_home`` attribute is used instead.
:return: The signing command as a list suitable to be
passed to :class:`subprocess.Popen`.
s--status-fdt2s--no-ttys --homedirs--batchs--passphrase-fdt0s.ascs
--detach-signs--armors--local-users--outputsinvoking: %st N(RRRtextendttempfiletmkdtempRR%tjointbasenameRQRR(R"tfilenametsignert
sign_passwordtkeystoretcmdttdtsf((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pytget_sign_command�s%c Cs
itjd6tjd6}|dk r6tj|d<ng}g}tj||�}td|jdd|j|f�}|j�td|jdd|j|f�}|j�|dk r�|j j
|�|j j�n|j�|j
�|j
�|j||fS(s�
Run a command in a child process , passing it any input data specified.
:param cmd: The command to run.
:param input_data: If specified, this must be a byte string containing
data to be sent to the child process.
:return: A tuple consisting of the subprocess' exit code, a list of
lines read from the subprocess' ``stdout``, and a list of
lines read from the subprocess' ``stderr``.
RRtstdinttargettargsN(RtPIPERtPopenRRWRtstartRRhtwriteRStwaitR^t
returncode( R"Rdt
input_datatkwargsRRtptt1tt2((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pytrun_command�s&
$
$
c
Cse|j||||�\}}|j||jd��\}}} |dkratd|��n|S(sR
Sign a file.
:param filename: The pathname to the file to be signed.
:param signer: The identifier of the signer of the file.
:param sign_password: The passphrase for the signer's
private key used for signing.
:param keystore: The path to a directory which contains the keys
used in signing. If not specified, the instance's
``gpg_home`` attribute is used instead.
:return: The absolute pathname of the file where the signature is
stored.
sutf-8is&sign command failed with error code %s(RgRvtencodeR(
R"R`RaRbRcRdtsig_fileR+RR((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pyt sign_file�s
tsdisttsourcecCs�|j�tjj|�s/td|��n|j�|j�}d} |r�|jsjt j
d�q�|j||||�} nt|d��}
|
j
�}WdQXtj|�j�}tj|�j�}
|jidd6dd6|d 6|d
6|d6|
d6�d
tjj|�|fg}| r�t| d��}
|
j
�}WdQX|jdtjj| �|f�tjtjj| ��n|j|j�|�}|j|�S(s�
Upload a release file to the index.
:param metadata: A :class:`Metadata` instance defining at least a name
and version number for the file to be uploaded.
:param filename: The pathname of the file to be uploaded.
:param signer: The identifier of the signer of the file.
:param sign_password: The passphrase for the signer's
private key used for signing.
:param filetype: The type of the file being uploaded. This is the
distutils command which produced that file, e.g.
``sdist`` or ``bdist_wheel``.
:param pyversion: The version of Python which the release relates
to. For code compatible with any Python, this would
be ``source``, otherwise it would be e.g. ``3.2``.
:param keystore: The path to a directory which contains the keys
used in signing. If not specified, the instance's
``gpg_home`` attribute is used instead.
:return: The HTTP response received from PyPI upon submission of the
request.
s
not found: %ss)no signing program available - not signedtrbNtfile_uploads:actiont1tprotocol_versiontfiletypet pyversiont
md5_digestt
sha256_digesttcontentt
gpg_signature(R;RR%texistsRRCRDRRRQtwarningRyRtreadthashlibtmd5t hexdigesttsha256tupdateR_RPtshutiltrmtreetdirnameRERFRG(R"RHR`RaRbR�R�RcR1Rxtft file_dataR�R�tfilestsig_dataRI((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pytupload_file�s>
c
Cs�|j�tjj|�s/td|��ntjj|d�}tjj|�sitd|��n|j�|j|j }}t
|�j�}d d|fd|fg}d||fg}|j||�} |j
| �S(
s2
Upload documentation to the index.
:param metadata: A :class:`Metadata` instance defining at least a name
and version number for the documentation to be
uploaded.
:param doc_dir: The pathname of the directory which contains the
documentation. This should be the directory that
contains the ``index.html`` for the documentation.
:return: The HTTP response received from PyPI upon submission of the
request.
snot a directory: %rs
index.htmls
not found: %rs:actiont
doc_uploadRTtversionR�(s:actionR�(R;RR%tisdirRR^R�RCRTR�R tgetvalueRERG(
R"RHtdoc_dirtfnRTR�tzip_datatfieldsR�RI((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pytupload_documentation)s
cCs||jdddg}|dkr-|j}n|rI|jd|g�n|jd||g�tjddj|��|S( s|
Return a suitable command for verifying a file.
:param signature_filename: The pathname to the file containing the
signature.
:param data_filename: The pathname to the file containing the
signed data.
:param keystore: The path to a directory which contains the keys
used in verification. If not specified, the
instance's ``gpg_home`` attribute is used instead.
:return: The verifying command as a list suitable to be
passed to :class:`subprocess.Popen`.
s--status-fdRXs--no-ttys --homedirs--verifysinvoking: %sRZN(RRRR[RQRRR^(R"tsignature_filenamet
data_filenameRcRd((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pytget_verify_commandEscCsn|jstd��n|j|||�}|j|�\}}}|dkrdtd|��n|dkS(s6
Verify a signature for a file.
:param signature_filename: The pathname to the file containing the
signature.
:param data_filename: The pathname to the file containing the
signed data.
:param keystore: The path to a directory which contains the keys
used in verification. If not specified, the
instance's ``gpg_home`` attribute is used instead.
:return: True if the signature was verified, else False.
s0verification unavailable because gpg unavailableiis(verify command failed with error code %s(ii(RRR�Rv(R"R�R�RcRdR+RR((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pytverify_signature]s
cCs|dkr"d}tjd�nMt|ttf�rF|\}}nd}tt|��}tjd|�t|d��}|j t
|��}z�|j�} d}
d}d}d}
d| kr�t| d �}n|r�||
|
|�nxyt
rp|j|
�}|sPn|t|�7}|j|�|rJ|j|�n|
d
7}
|r�||
|
|�q�q�WWd|j�XWdQX|dkr�||kr�td||f��n|r|j�}||kr�td
||||f��ntjd|�ndS(s
This is a convenience method for downloading a file from an URL.
Normally, this will be a file from the index, though currently
no check is made for this (i.e. a file can be downloaded from
anywhere).
The method is just like the :func:`urlretrieve` function in the
standard library, except that it allows digest computation to be
done during download and checking that the downloaded data
matched any expected value.
:param url: The URL of the file to be downloaded (assumed to be
available via an HTTP GET request).
:param destfile: The pathname where the downloaded file is to be
saved.
:param digest: If specified, this must be a (hasher, value)
tuple, where hasher is the algorithm used (e.g.
``'md5'``) and ``value`` is the expected value.
:param reporthook: The same as for :func:`urlretrieve` in the
standard library.
sNo digest specifiedR�sDigest specified: %stwbi i����iscontent-lengthsContent-LengthiNs1retrieval incomplete: got only %d out of %d bytess.%s digest mismatch for %s: expected %s, got %ssDigest verified: %s(RRQRRt
isinstancetlistttupletgetattrR�RRGRtinfotintRLR�tlenRnR�RSRR�(R"Rtdestfiletdigestt
reporthooktdigesterthashertdfptsfptheaderst blocksizetsizeR�tblocknumtblocktactual((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pyt
download_filevsV
cCsWg}|jr"|j|j�n|jr>|j|j�nt|�}|j|�S(s�
Send a standard library :class:`Request` to PyPI and return its
response.
:param req: The request to send.
:return: The HTTP response from PyPI (a standard library HTTPResponse).
(RRPRRR(R"treqthandlerstopener((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pyRG�s cCs<g}|j}xy|D]q\}}t|ttf�sC|g}nxA|D]9}|jd|d|jd�d|jd�f�qJWqWxG|D]?\}} }
|jd|d|| fjd�d|
f�q�W|jd|ddf�dj|�}d|}i|d6tt|��d 6}
t |j
||
�S(
s&
Encode fields and files for posting to an HTTP server.
:param fields: The fields to send as a list of (fieldname, value)
tuples.
:param files: The files to send as a list of (fieldname, filename,
file_bytes) tuple.
s--s)Content-Disposition: form-data; name="%s"sutf-8ts8Content-Disposition: form-data; name="%s"; filename="%s"s
smultipart/form-data; boundary=sContent-typesContent-length(tboundaryR�R�R�R[RwR^tstrR�RR(R"R�R�tpartsR�tktvaluestvtkeyR`tvaluetbodytctR�((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pyRE�s4
cCsbt|t�ri|d6}n|jdkrIt|jdd�|_n|jj||p^d�S(NRTttimeoutg@tand(R�RRRR
Rtsearch(R"ttermstoperator((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pyR��s
N(t__name__t
__module__t__doc__R�RR,R2RR=R;RKRWRgRvRyR�R�R�R�R�RGRER�(((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pyRs*
#8 M +(R�tloggingRR�RR\t threadingRtImportErrortdummy_threadingR�RtcompatRRRRRRtutilRR R
t getLoggerR�RQRt
DEFAULT_REALMtobjectR(((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/index.pyt<module>s
.
?>