a
    ñ»jE  ã                   @   sÄ   d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ eeddƒeeddƒeeddƒdœZG dd„ deƒZdd„ ZdS )zm
distutils.command.upload

Implements the Distutils 'upload' subcommand (upload package to a package
index).
é    N)Ústandard_b64encode)Úurlparse)Ú	HTTPErrorÚRequestÚurlopené   )Úalways_iterable)ÚPyPIRCCommand)ÚDistutilsErrorÚDistutilsOptionError)ÚspawnÚmd5Úsha256Úblake2b)Z
md5_digestZsha256_digestZblake2_256_digestc                   @   sJ   e Zd ZdZejddg Zejdg Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dS )Úuploadzupload binary package to PyPI)ÚsignÚszsign files to upload using gpg)z	identity=ÚizGPG identity used to sign filesr   c                 C   s,   t  | ¡ d| _d| _d| _d| _d | _d S )NÚ F)r	   Úinitialize_optionsÚusernameÚpasswordÚshow_responser   Úidentity)Úself© r   úJE:\soccer\ml_env\Lib\site-packages\setuptools/_distutils/command/upload.pyr   (   s    
zupload.initialize_optionsc                 C   sr   t  | ¡ | jr| jstdƒ‚|  ¡ }|i krV|d | _|d | _|d | _|d | _	| jsn| j
jrn| j
j| _d S )Nz.Must use --sign for --identity to have meaningr   r   Ú
repositoryÚrealm)r	   Úfinalize_optionsr   r   r   Ú_read_pypircr   r   r   r   Údistribution)r   Úconfigr   r   r   r   0   s    




zupload.finalize_optionsc                 C   s:   | j jsd}t|ƒ‚| j jD ]\}}}|  |||¡ qd S )NzHMust create and upload files in one command (e.g. setup.py sdist upload))r!   Ú
dist_filesr   Úupload_file)r   ÚmsgÚcommandÚ	pyversionÚfilenamer   r   r   Úrun@   s    ÿz
upload.runc           #      C   s  t | jƒ\}}}}}}	|s"|s"|	r2td| j› �ƒ‚|dvrFtd| ƒ‚| jr~ddd|g}
| jrpd| jg|
dd…< t|
| jd	� t|d
ƒ}z| ¡ }W | 	¡  n
| 	¡  0 | j
j}dd| ¡ | ¡ tj |¡|f||d| ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ dœ}d|d< t ¡ D ]B\}}|d u �rN�q8z||ƒ  ¡ ||< W n t!�yv   Y n0 �q8| j�rÐt|d d
ƒ�,}tj |¡d | ¡ f|d< W d   ƒ n1 �sÆ0    Y  | j"d | j#  $d¡}dt%|ƒ &d¡ }d}d| $d¡ }|d }t' (¡ }| ¡ D ]Ž\}}d|› d�}t)|ƒD ]n}t*|ƒt+u �rn|d|d › d�7 }|d }nt,|ƒ $d¡}| -|¡ | -| $d¡¡ | -d¡ | -|¡ �q>�q"| -|¡ | .¡ }d |› d!| j› �}|  /|t0j1¡ d"|› �t,t2|ƒƒ|d#œ}t3| j||d$�}zt4|ƒ}| 5¡ }|j6} W nj t7�yZ }! z|!j8}|!j6} W Y d }!~!nBd }!~!0  t9�y’ }! z |  /t,|!ƒt0j:¡ ‚ W Y d }!~!n
d }!~!0 0 |d%k�rê|  /d&|› d'| › �t0j1¡ | j;�r|  <|¡}"d( =d)|"d)f¡}|  /|t0j1¡ n&d*|› d'| › �}|  /|t0j:¡ t>|ƒ‚d S )+NzIncompatible url )ÚhttpÚhttpszunsupported schema Zgpgz--detach-signz-az--local-userr   )Údry_runÚrbZfile_uploadÚ1z1.0)z:actionZprotocol_versionÚnameÚversionÚcontentZfiletyper'   Úmetadata_versionÚsummaryZ	home_pageÚauthorÚauthor_emailÚlicenseÚdescriptionÚkeywordsÚplatformÚclassifiersÚdownload_urlÚprovidesÚrequiresÚ	obsoletesr   Úcommentz.ascZgpg_signatureú:ÚasciizBasic z3--------------GHSKFJDLGDS7543FJKLFHRE75642756743254s   
--s   --
z(
Content-Disposition: form-data; name="ú"z; filename="r   é   zutf-8s   

zSubmitting z to zmultipart/form-data; boundary=)zContent-typezContent-lengthÚAuthorization)ÚdataÚheaderséÈ   zServer response (z): Ú
zK---------------------------------------------------------------------------zUpload failed ()?r   r   ÚAssertionErrorr   r   r   r,   ÚopenÚreadÚcloser!   ÚmetadataÚget_nameÚget_versionÚosÚpathÚbasenameÚget_descriptionÚget_urlÚget_contactÚget_contact_emailÚget_licenceÚget_long_descriptionÚget_keywordsÚget_platformsÚget_classifiersÚget_download_urlÚget_providesÚget_requiresÚget_obsoletesÚ_FILE_CONTENT_DIGESTSÚitemsÚ	hexdigestÚ
ValueErrorr   r   Úencoder   ÚdecodeÚioÚBytesIOÚmake_iterableÚtypeÚtupleÚstrÚwriteÚgetvalueÚannounceÚloggingÚINFOÚlenr   r   Úgetcoder%   r   ÚcodeÚOSErrorÚERRORr   Ú_read_pypi_responseÚjoinr
   )#r   r&   r'   r(   ZschemaÚnetlocÚurlÚparamsÚqueryÚ	fragmentsZgpg_argsÚfr1   ÚmetarE   Zdigest_nameÚdigest_consÚ	user_passÚauthÚboundaryZsep_boundaryZend_boundaryÚbodyÚkeyÚvaluesÚtitleÚvaluer%   rF   ÚrequestÚresultÚstatusÚreasonÚeÚtextr   r   r   r$   J   sº    

æ

<




ý


zupload.upload_fileN)Ú__name__Ú
__module__Ú__qualname__r7   r	   Úuser_optionsÚboolean_optionsr   r   r)   r$   r   r   r   r   r      s   þ
r   c                 C   s    | d u rd gS t | tttfd�S )N)Z	base_type)r   Úbytesrk   rj   )r…   r   r   r   rh   Í   s    rh   )Ú__doc__Úhashlibrf   ro   rP   Úbase64r   Úurllib.parser   Úurllib.requestr   r   r   Ú
_itertoolsr   Úcorer	   Úerrorsr
   r   r   Úgetattrr`   r   rh   r   r   r   r   Ú<module>   s$   


ý 0