509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ct„j÷  ã               @   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Úsúsign files to upload using gpgú	identity=ÚiúGPG identity used to sign filesc             C   s,   t j| ƒ d| _d| _d| _d| _d | _d S )NÚ r   F)r	   Úinitialize_optionsÚusernameÚpasswordÚshow_responser   Úidentity)Úself© r   ú0/usr/lib64/python3.6/distutils/command/upload.pyr       s    
zupload.initialize_optionsc             C   sv   t j| ƒ | jr | j r tdƒ‚| jƒ }|i krX|d | _|d | _|d | _|d | _	| j rr| j
jrr| 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   Úconfigr   r   r   r   (   s    




zupload.finalize_optionsc             C   s>   | j jsd}t|ƒ‚x$| j jD ]\}}}| j|||ƒ qW 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 ƒ‚|d2krDtd| ƒ‚| jr|ddd|g}
| jrnd| jg|
d	d	…< t|
| jd
� t|dƒ}z|jƒ }W d |j	ƒ  X | j
j}dd|jƒ |jƒ tjj|ƒ|f||tj|ƒjƒ d|jƒ |jƒ |jƒ |jƒ |jƒ |jƒ |jƒ |jƒ |jƒ |jƒ |jƒ |jƒ |j ƒ dœ}ytj!|ƒjƒ }W nP t"k
�rŒ } z2d| }| j#|t$j%ƒ ddl&m'} |ƒ �s|‚ W Y d d }~X n
X ||d< d}|dk�rÆt(j)ƒ \}}}|�ràd||f }n|dk�ràdt(j(dd� }||d< | j�rtjj|ƒd t|d dƒjƒ f|d< | j*d | j+ j,dƒ}d t-|ƒj.dƒ }d!}d"|j,dƒ }|d# }t/j0ƒ }x¤|j1ƒ D ]˜\}}d$| }t2|t3ƒ�sŒ|g}xr|D ]j}t4|ƒt5k�r¾|d%|d  7 }|d }nt6|ƒj,d&ƒ}|j7|ƒ |j7|j,d&ƒƒ |j7d'ƒ |j7|ƒ �q’W �qjW |j7|ƒ |j8ƒ }d(|| jf }| j#|t$j%ƒ d)| t6t9|ƒƒ|d*œ} t:| j|| d+�}!yt;|!ƒ}"|"j<ƒ }#|"j=}$W nf t>k
�r¦ } z|j?}#|j=}$W Y d d }~X n8 t@k
�rÜ } z| j#t6|ƒt$jAƒ ‚ W Y d d }~X nX |#d,k�r8| j#d-|#|$f t$j%ƒ | jB�rZ| jC|"ƒ}%d.jDd/d0 |%d/d0 fƒ}| j#|t$j%ƒ n"d1|#|$f }| j#|t$jAƒ tE|ƒ‚d S )3Nz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$   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	bdist_rpmzbuilt for %s %sZ
bdist_dumbzbuilt for %sé   )ZterseÚ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Ú
ú-éK   zUpload failed (%s): %s)r'   r(   )Fr   r   ÚAssertionErrorr   r   r
   r*   ÚopenÚreadÚcloser   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_hashlibr4   r3   Údistr   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/   Úmetar9   ZdigestÚer"   r4   r6   rI   r.   ÚidZ	user_passZauthÚboundaryZsep_boundaryZend_boundaryZbodyÚkeyÚvalueÚtitler:   ZrequestÚresultZstatusÚreasonÚtextr   r   r   r!   B   sÔ    













zupload.upload_fileN)r   r   r   )r   r   r   )Ú__name__Ú
__module__Ú__qualname__r1   r	   Zuser_optionsZboolean_optionsr   r   r&   r!   r   r   r   r   r      s    r   )Ú__doc__rC   rL   r3   rF   Ú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   