
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    š’a­  ã                   @   s´   d 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 eed
dƒeeddƒeeddƒdœ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)ÚlogÚ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Ú r   F)r	   Úinitialize_optionsÚusernameÚpasswordÚshow_responser   Úidentity)Úself© r   úL/tmp/pip-install-7tp5dx2w/setuptools/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   1   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   ÚrunC   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||d| ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ | ¡ dœ}d|d< t ¡ D ]D\}}|d k�rD�q.z||ƒ  ¡ ||< W n t!k
�rn   Y nX �q.| 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| }t)|t*ƒ�s&|g}|D ]j}t+|ƒt,k�rV|d|d  7 }|d }nt-|ƒ $d¡}| .|¡ | .| $d¡¡ | .d¡ | .|¡ �q*�q| .|¡ | /¡ }d|| jf }|  0|t1j2¡ d | t-t3|ƒƒ|d!œ}t4| j||d"�}zt5|ƒ}| 6¡ }|j7}W nf t8k
�r: }  z| j9}| j7}W 5 d } ~ X Y n8 t:k
�rp }  z|  0t-| ƒt1j;¡ ‚ W 5 d } ~ X Y nX |d#k�rÄ|  0d$||f t1j2¡ | j<�ræ|  =|¡}!d% >d&|!d&f¡}|  0|t1j2¡ n"d'||f }|  0|t1j;¡ t?|ƒ‚d S )(NzIncompatible url %s)ÚhttpÚ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&   Ú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="%s"z; filename="%s"r   é   zutf-8s   

zSubmitting %s to %sz multipart/form-data; boundary=%s)zContent-typezContent-lengthÚAuthorization)ÚdataÚheaderséÈ   zServer response (%s): %sÚ
zK---------------------------------------------------------------------------zUpload failed (%s): %s)@r   r   ÚAssertionErrorr   r   r
   r,   ÚopenÚcloseÚreadr    Ú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Ú
isinstanceÚlistÚtypeÚtupleÚstrÚwriteÚgetvalueÚannouncer   ÚINFOÚlenr   r   Úgetcoder$   r   ÚcodeÚOSErrorÚERRORr   Ú_read_pypi_responseÚjoinr   )"r   r%   r&   r'   ZschemaÚnetlocÚurlÚparamsÚqueryZ	fragmentsZgpg_argsÚfr1   ÚmetarD   Zdigest_nameÚdigest_consÚ	user_passÚauthÚboundaryZsep_boundaryZend_boundaryÚbodyÚkeyÚvalueÚtitler$   rE   ÚrequestÚresultÚstatusÚreasonÚeÚtextr   r   r   r#   K   sÐ    ÿÿ

ã 

ÿ




ýÿ

ÿ
zupload.upload_fileN)Ú__name__Ú
__module__Ú__qualname__r7   r	   Úuser_optionsÚboolean_optionsr   r   r(   r#   r   r   r   r   r      s   ýr   )Ú__doc__rO   re   ÚhashlibÚbase64r   Úurllib.requestr   r   r   Úurllib.parser   Údistutils.errorsr   r   Údistutils.corer	   Údistutils.spawnr
   Ú	distutilsr   Úgetattrr_   r   r   r   r   r   Ú<module>   s   


ý