1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
U
H=®dJRã@sÈddlZddlZddlZddlZddlZddlZzddlmZWn ek
r`ddl    mZYnXddl
m Z ddl m Z mZmZmZmZmZddlmZmZmZe e¡ZdZdZGd    d
„d
eƒZdS) éN)ÚThreadé)ÚDistlibException)ÚHTTPBasicAuthHandlerÚRequestÚHTTPPasswordMgrÚurlparseÚ build_openerÚ string_types)Úcached_propertyÚzip_dirÚ ServerProxyzhttps://pypi.org/pypiÚpypic@s¶eZdZdZdZd*dd„Zdd„Zdd    „Zd
d „Zd d „Z    dd„Z
dd„Z d+dd„Z d,dd„Z d-dd„Zd.dd„Zdd„Zd/dd„Zd0d d!„Zd1d"d#„Zd$d%„Zd&d'„Zd2d(d)„ZdS)3Ú PackageIndexzc
    This class represents a package index compatible with PyPI, the Python
    Package Index.
    s.----------ThIs_Is_tHe_distlib_index_bouNdaRY_$Nc
CsÊ|pt|_| ¡t|jƒ\}}}}}}|s<|s<|s<|dkrJtd|jƒ‚d|_d|_d|_d|_t    t
j dƒR}dD]F}    z,t j |    dg||d}
|
dkr¢|    |_Wq¼Wqttk
r¸YqtXqtW5QRXdS)    z”
        Initialise an instance.
 
        :param url: The URL of the index. If not specified, the URL for PyPI is
                    used.
        )ÚhttpÚhttpszinvalid repository: %sNÚw)ÚgpgZgpg2z    --version©ÚstdoutÚstderrr)Ú DEFAULT_INDEXÚurlÚread_configurationrrÚpassword_handlerÚ ssl_verifierrÚgpg_homeÚopenÚosÚdevnullÚ
subprocessÚ
check_callÚOSError) ÚselfrÚschemeÚnetlocÚpathÚparamsÚqueryÚfragZsinkÚsÚrc©r,úPD:\z\workplace\VsCode\pyvenv\venv\Lib\site-packages\pip/_vendor/distlib/index.pyÚ__init__$s(
 ÿ
zPackageIndex.__init__cCs&ddlm}ddlm}|ƒ}||ƒS)zs
        Get the distutils command for interacting with PyPI configurations.
        :return: the command.
        r)Ú Distribution)Ú PyPIRCCommand)Údistutils.corer/Údistutils.configr0)r#r/r0Údr,r,r-Ú_get_pypirc_commandAs  z PackageIndex._get_pypirc_commandcCsR| ¡}|j|_| ¡}| d¡|_| d¡|_| dd¡|_| d|j¡|_dS)zç
        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.
        ÚusernameÚpasswordÚrealmrÚ
repositoryN)r4rr8Ú _read_pypircÚgetr5r6r7)r#ÚcÚcfgr,r,r-rKs  zPackageIndex.read_configurationcCs$| ¡| ¡}| |j|j¡dS)zÍ
        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)Úcheck_credentialsr4Ú _store_pypircr5r6)r#r;r,r,r-Úsave_configurationZszPackageIndex.save_configurationcCs\|jdks|jdkrtdƒ‚tƒ}t|jƒ\}}}}}}| |j||j|j¡t|ƒ|_    dS)zp
        Check that ``username`` and ``password`` have been set, and raise an
        exception if not.
        Nz!username and password must be set)
r5r6rrrrÚ add_passwordr7rr)r#ZpmÚ_r%r,r,r-r=fs zPackageIndex.check_credentialscCs\| ¡| ¡| ¡}d|d<| | ¡g¡}| |¡}d|d<| | ¡g¡}| |¡S)aq
        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.
        Úverifyú:actionZsubmit)r=ÚvalidateÚtodictÚencode_requestÚitemsÚ send_request)r#Úmetadatar3ÚrequestÚresponser,r,r-Úregisterrs
 
zPackageIndex.registercCsF| ¡}|sq:| d¡ ¡}| |¡t d||f¡q| ¡dS)ar
        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.
        úutf-8z%s: %sN)ÚreadlineÚdecodeÚrstripÚappendÚloggerÚdebugÚclose)r#ÚnameÚstreamZoutbufr*r,r,r-Ú_reader†s
 
zPackageIndex._readerc    Csš|jdddg}|dkr|j}|r.| d|g¡|dk    rF| dddg¡t ¡}tj |tj |¡d    ¡}| d
d d |d ||g¡t     
dd |¡¡||fS)a‰
        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`.
        ú --status-fdÚ2ú--no-ttyNú    --homedirz--batchz--passphrase-fdÚ0z.ascz --detach-signz--armorz --local-userz--outputú invoking: %sú ) rrÚextendÚtempfileÚmkdtemprr&ÚjoinÚbasenamerRrS)r#ÚfilenameÚsignerÚ sign_passwordÚkeystoreÚcmdÚtdZsfr,r,r-Úget_sign_command˜s"
ÿzPackageIndex.get_sign_commandc    Cs´tjtjdœ}|dk    r tj|d<g}g}tj|f|Ž}t|jd|j|fd}| ¡t|jd|j|fd}| ¡|dk    r|j     |¡|j 
¡|  ¡|  ¡|  ¡|j ||fS)aæ
        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``.
        rNÚstdinr)ÚtargetÚargsr)r ÚPIPEÚPopenrrWrÚstartrrkÚwriterTÚwaitrbÚ
returncode)    r#rhZ
input_dataÚkwargsrrÚpÚt1Út2r,r,r-Ú run_commandµs& þ
 
zPackageIndex.run_commandc
CsD| ||||¡\}}| || d¡¡\}}}    |dkr@td|ƒ‚|S)aR
        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.
        rMrz&sign command failed with error code %s)rjrxÚencoder)
r#rdrerfrgrhÚsig_filer+rrr,r,r-Ú    sign_fileØs
ÿÿ
ÿzPackageIndex.sign_fileÚsdistÚsourcec    Cs(| ¡tj |¡s td|ƒ‚| ¡| ¡}d}    |rZ|jsJt     d¡n| 
||||¡}    t |dƒ}
|
  ¡} W5QRXt  | ¡ ¡} t  | ¡ ¡} | dd||| | dœ¡dtj |¡| fg}|    rt |    dƒ}
|
  ¡}W5QRX| d    tj |    ¡|f¡t tj |    ¡¡| | ¡|¡}| |¡S)
a´
        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.
        z not found: %sNz)no signing program available - not signedÚrbZ file_uploadÚ1)rCZprotocol_versionÚfiletypeÚ    pyversionÚ
md5_digestÚ sha256_digestÚcontentZ gpg_signature)r=rr&ÚexistsrrDrErrRÚwarningr{rÚreadÚhashlibÚmd5Ú    hexdigestÚsha256ÚupdatercrQÚshutilÚrmtreeÚdirnamerFrGrH)r#rIrdrerfr€rrgr3rzÚfZ    file_datar‚rƒÚfilesZsig_datarJr,r,r-Ú upload_fileïsD   
ÿ ú ÿzPackageIndex.upload_filec
Csœ| ¡tj |¡s td|ƒ‚tj |d¡}tj |¡sFtd|ƒ‚| ¡|j|j    }}t
|ƒ  ¡}dd|fd|fg}d||fg}|  ||¡}    |  |    ¡S)a2
        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.
        znot a directory: %rz
index.htmlz not found: %r)rCZ
doc_uploadrUÚversionr„)r=rr&Úisdirrrbr…rDrUr“r ÚgetvaluerFrH)
r#rIZdoc_dirÚfnrUr“Úzip_dataÚfieldsr‘rJr,r,r-Úupload_documentation(s       ÿ  z!PackageIndex.upload_documentationcCsT|jdddg}|dkr|j}|r.| d|g¡| d||g¡t dd |¡¡|S)    a|
        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`.
        rXrYrZNr[z--verifyr]r^)rrr_rRrSrb)r#Úsignature_filenameÚ data_filenamergrhr,r,r-Úget_verify_commandDszPackageIndex.get_verify_commandcCsH|jstdƒ‚| |||¡}| |¡\}}}|dkr@td|ƒ‚|dkS)a6
        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.
        z0verification unavailable because gpg unavailable)rrz(verify command failed with error code %sr)rrrœrx)r#ršr›rgrhr+rrr,r,r-Úverify_signature\sÿÿzPackageIndex.verify_signaturec    Csl|dkrd}t d¡n6t|ttfƒr0|\}}nd}tt|ƒƒ}t d|¡t|dƒ®}| t    |ƒ¡}zŽ|  ¡}    d}
d} d} d} d    |    kr–t |    d
ƒ} |r¦|| |
| ƒ|  |
¡}|s¶qô| t|ƒ7} | |¡|rÚ| |¡| d 7} |r¦|| |
| ƒq¦W5| 
¡XW5QRX| dkr0| | kr0td | | fƒ‚|rh| ¡}||kr\td ||||fƒ‚t d|¡dS)a
        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.
        NzNo digest specifiedr‰zDigest specified: %sÚwbi éÿÿÿÿrzcontent-lengthzContent-Lengthrz1retrieval incomplete: got only %d out of %d bytesz.%s digest mismatch for %s: expected %s, got %szDigest verified: %s)rRrSÚ
isinstanceÚlistÚtupleÚgetattrrˆrrHrrTÚinfoÚintr‡ÚlenrqrŒrrŠ)r#rÚdestfileÚdigestÚ
reporthookZdigesterZhasherZdfpZsfpÚheadersÚ    blocksizeÚsizer‡ÚblocknumÚblockÚactualr,r,r-Ú download_fileus^ 
 
 
 
ÿÿ
ÿÿzPackageIndex.download_filecCs:g}|jr| |j¡|jr(| |j¡t|Ž}| |¡S)zÝ
        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).
        )rrQrr    r)r#ÚreqÚhandlersÚopenerr,r,r-rHÂs  zPackageIndex.send_requestc
CsØg}|j}|D]L\}}t|ttfƒs*|g}|D]*}| d|d| d¡d| d¡f¡q.q|D].\}}    }
| d|d||    f d¡d|
f¡q`| d|ddf¡d |¡} d|} | tt| ƒƒdœ} t    |j
| | ƒS)    a&
        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--z)Content-Disposition: form-data; name="%s"rMóz8Content-Disposition: form-data; name="%s"; filename="%s"s
smultipart/form-data; boundary=)z Content-typezContent-length) Úboundaryr r¡r¢r_ryrbÚstrr¦rr)r#r˜r‘ÚpartsrµÚkÚvaluesÚvÚkeyrdÚvalueÚbodyÚctrªr,r,r-rFÒsD  ÿÿû
ÿÿû
 
þzPackageIndex.encode_requestcCsFt|tƒrd|i}t|jdd}z| ||p.d¡W¢S|dƒƒXdS)NrUg@)ÚtimeoutrTÚand)r r
r rÚsearch)r#ZtermsÚoperatorZ    rpc_proxyr,r,r-rÁýs 
zPackageIndex.search)N)N)N)N)NNr|r}N)N)N)NN)N)Ú__name__Ú
__module__Ú __qualname__Ú__doc__rµr.r4rr?r=rLrWrjrxr{r’r™rœrr°rHrFrÁr,r,r,r-rs6
 
  ÿ
 
#
ÿ
9ÿ
ÿ
 
M+r)rˆÚloggingrrr r`Ú    threadingrÚ ImportErrorZdummy_threadingÚrÚcompatrrrrr    r
Úutilr r r Ú    getLoggerrÃrRrÚ DEFAULT_REALMÚobjectrr,r,r,r-Ú<module>s