B
    18\]                 @   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   \/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/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   (   s    




zupload.finalize_optionsc             C   s>   | j jsd}t|x$| j jD ]\}}}| ||| qW 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"|	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 d |	  X | j
j}dd| | tj||f||t| d| | | | | | | | | | | | |  d}d}|dkrZt!" \}}}|rtd||f }n|dkrtdt!j!dd }||d< | jrtj|d t|d d
 f|d< | j#d | j$ %d}dt&|'d }d}d|%d }|d }t() }x|* D ]\}}d| }t+|t,s |g}xr|D ]j}t-|t.krR|d |d!  7 }|d }nt/|%d"}|0| |0|%d" |0d# |0| q&W qW |0| |1 }d$|| jf }| 2|t3j4 d%| t/t5||d&}t6| j||d'}yt7|}|8 } |j9}!W nf t:k
r: }" z|"j;} |"j9}!W d d }"~"X Y n8 t<k
rp }" z| 2t/|"t3j=  W d d }"~"X Y nX | d(kr| 2d)| |!f t3j4 | j>r| ?|}#d*@d+|#d+f}| 2|t3j4 n"d,| |!f }| 2|t3j= tA|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#   Z
md5_digestmetadata_versionsummary	home_pageauthorauthor_emaillicensedescriptionkeywordsplatformclassifiersdownload_urlprovidesrequires	obsoletesr   	bdist_rpmzbuilt for %s %s
bdist_dumbzbuilt for %s   )terse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)Br   r   AssertionErrorr   r   r
   r)   openreadcloser   metadataget_nameget_versionospathbasenamehashlibmd5	hexdigest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_obsoletesr7   distr   r   encoder   decodeioBytesIOitems
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fr.   metarE   rA   rc   r-   id	user_passauthboundarysep_boundaryend_boundarybodykeyvaluetitler!   rF   requestresultstatusreasonetextr   r   r   r    B   s    













zupload.upload_fileN)__name__
__module____qualname__r5   r	   user_optionsboolean_optionsr   r   r%   r    r   r   r   r   r      s   r   )__doc__rP   rf   r7   rS   base64r   urllib.requestr   r   r   urllib.parser   distutils.errorsr   r   distutils.corer	   distutils.spawnr
   	distutilsr   r   r   r   r   r   <module>   s   