???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................U
    &Ì.eô  ã                   @   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m	Z	m
Z
 ddlmZ ddlmZmZ ddlmZ ddlmZ dd	lmZ G d
d„ deƒZdS )zm
distutils.command.upload

Implements the Distutils 'upload' subcommand (upload package to a package
index).
é    N)Ústandard_b64encode)ÚurlopenÚRequestÚ	HTTPError)Úurlparse)ÚDistutilsErrorÚDistutilsOptionError)ÚPyPIRCCommand)Úspawn)Úlogc                   @   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Ú r   F)r	   Úinitialize_optionsÚusernameÚpasswordÚshow_responser   Úidentity)Úself© r   ú0/usr/lib64/python3.8/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   Z_read_pypircr   r   r   r   Údistribution)r   Zconfigr   r   r   r   (   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   Z
dist_filesr   Úupload_file)r   ÚmsgÚcommandÚ	pyversionÚfilenamer   r   r   Úrun:   s
    z
upload.runc           "      C   s  t | jƒ\}}}}}}	|s"|s"|	r0td| j ƒ‚|dkrDtd| ƒ‚| jr|ddd|g}
| jrnd| jg|
dd…< t|
| jd	 t|d
ƒ}z| 	¡ }W 5 | ¡  X | j
j}dd| ¡ | ¡ tj |¡|f||t |¡ ¡ d| ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ |  ¡ dœ}zt !|¡ ¡ }W nP t"k
rŒ } z0d| }|  #|t$j%¡ ddl&m'} |ƒ s|‚ W 5 d }~X Y n
X ||d< d|d< | jrÜt|d d
ƒ"}tj |¡d | 	¡ f|d< W 5 Q R X | j(d | j)  *d¡}dt+|ƒ ,d¡ }d}d| *d¡ }|d }t- .¡ }| /¡ D ]”\}}d| }t0|t1ƒsP|g}|D ]j}t2|ƒt3kr€|d|d  7 }|d }nt4|ƒ *d ¡}| 5|¡ | 5| *d ¡¡ | 5d!¡ | 5|¡ qTq.| 5|¡ | 6¡ }d"|| jf }|  #|t$j%¡ d#| t4t7|ƒƒ|d$œ}t8| j||d%}zt9|ƒ}| :¡ }|j;} W nf t<k
rd } z|j=}|j;} W 5 d }~X Y n8 t>k
rš } z|  #t4|ƒt$j?¡ ‚ W 5 d }~X Y nX |d&krî|  #d'|| f t$j%¡ | j@r|  A|¡}!d( Bd)|!d)f¡}|  #|t$j%¡ n"d*|| f }|  #|t$j?¡ tC|ƒ‚d S )+NzIncompatible url %s)ZhttpZhttpszunsupported schema Zgpgz--detach-signz-az--local-useré   )Údry_runÚrbZfile_uploadÚ1z1.0)z:actionZprotocol_versionÚnameÚversionÚcontentZfiletyper    Zsha256_digestZmetadata_versionZsummaryZ	home_pageZauthorZauthor_emailÚlicenseÚdescriptionÚkeywordsÚplatformZclassifiersZdownload_urlZprovidesZrequiresZ	obsoletesz#calculating md5 checksum failed: %sr   )Úget_fips_modeZ
md5_digestr   Zcommentz.ascZgpg_signatureú:ÚasciizBasic z3--------------GHSKFJDLGDS7543FJKLFHRE75642756743254s   
--s   --
z+
Content-Disposition: form-data; name="%s"z; filename="%s"é   zutf-8s   

zSubmitting %s to %sz multipart/form-data; boundary=%s)zContent-typezContent-lengthZAuthorization)ÚdataÚheaderséÈ   zServer response (%s): %sÚ
zK---------------------------------------------------------------------------zUpload failed (%s): %s)Dr   r   ÚAssertionErrorr   r   r
   r$   ÚopenÚcloseÚreadr   ZmetadataZget_nameZget_versionÚosÚpathÚbasenameÚhashlibZsha256Z	hexdigestZget_descriptionZget_urlZget_contactZget_contact_emailZget_licenceZget_long_descriptionZget_keywordsZget_platformsZget_classifiersZget_download_urlZget_providesZget_requiresZget_obsoletesZmd5Ú
ValueErrorZannouncer   ÚINFOZ_hashlibr.   r   r   Úencoder   ÚdecodeÚioÚBytesIOÚitemsÚ
isinstanceÚlistÚtypeÚtupleÚstrÚwriteÚgetvalueÚlenr   r   Zgetcoder   r   ÚcodeÚOSErrorZERRORr   Z_read_pypi_responseÚjoinr   )"r   r   r    r!   ZschemaZnetlocZurlZparamsZqueryZ	fragmentsZgpg_argsÚfr)   Úmetar2   ZdigestÚer   r.   Z	user_passZauthÚboundaryZsep_boundaryZend_boundaryZbodyÚkeyÚvalueÚtitler3   ZrequestÚresultZstatusÚreasonÚtextr   r   r   r   B   sÖ    ÿÿ

â!ÿ




ýÿ

ÿ
zupload.upload_fileN)Ú__name__Ú
__module__Ú__qualname__r+   r	   Zuser_optionsZboolean_optionsr   r   r"   r   r   r   r   r   r      s   ýr   )Ú__doc__r:   rB   r-   r=   Úbase64r   Zurllib.requestr   r   r   Zurllib.parser   Zdistutils.errorsr   r   Zdistutils.corer	   Zdistutils.spawnr
   Z	distutilsr   r   r   r   r   r   Ú<module>   s   