3
#+]                 @   s   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
 d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ G d
d de
j	Z	dS )    N)standard_b64encode)log)upload)spawn)DistutilsError)urlopenRequest)	HTTPError)urlparsec               @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )r   za
    Override default upload behavior to obtain password
    in a variety of different ways.
    c             C   s&   zt jj|  W d | jdtj X d S )NzjWARNING: Uploading via this command is deprecated, use twine to upload instead (https://pypi.org/p/twine/))origr   runannouncer   WARN)self r   A/tmp/pip-install-652y2hkr/setuptools/setuptools/command/upload.pyr      s
    z
upload.runc             C   s8   t jj|  | jptj | _| jp0| j p0| j | _d S )N)	r   r   finalize_optionsusernamegetpassgetuserpassword_load_password_from_keyring_prompt_for_password)r   r   r   r   r   "   s    
zupload.finalize_optionsc              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}|j }W d Q R X | j	j
}dd|j |j tjj||f||tj|j t|j |j |j |j |j |j |j |j |j |j |j |j |j  |j! d}d|d< | jrdtjj|d t|d dj f|d< | j"d | j# j$d}dt%|j&d }d}d|j$d }|d }t'j( }x|j) D ]\}}d| }t*|t+s|g}xr|D ]j}t,|t-kr|d|d  7 }|d }nt|j$d}|j.| |j.|j$d |j.d |j.| qW qW |j.| |j/ }d|| jf }| j0|t1j2 d | tt3||d!}t4| j||d"}yt5|}|j6 }|j7}W nf t8k
r } z|j9}|j7}W Y d d }~X n8 t:k
r* } z| j0t|t1j;  W Y d d }~X nX |d#kr| j0d$||f t1j2 | j<rt=| d%d&d' |}|d k	rd(j>d)d* |d)d* f}| j0|t1j2 n"d+||f }| j0|t1j; t?|d S )-NzIncompatible url %shttphttpszunsupported schema Zgpgz--detach-signz-az--local-user   )dry_runrbZfile_upload1)z:actionZprotocol_versionnameversioncontentZfiletype	pyversionZ
md5_digestmetadata_versionsummaryZ	home_pageauthorauthor_emaillicensedescriptionkeywordsplatformclassifiersdownload_urlprovidesrequires	obsoletes 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_read_pypi_responsec             S   s   d S )Nr   )xr   r   r   <lambda>   s    z$upload.upload_file.<locals>.<lambda>
-K   zUpload failed (%s): %s)r   r   )@r
   
repositoryAssertionErrorsignidentityr   r   openreaddistributionmetadataget_nameget_versionospathbasenamehashlibmd5	hexdigeststrZget_metadata_version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_obsoletesr   r   encoder   decodeioBytesIOitems
isinstancelisttypetuplewritegetvaluer   r   INFOlenr   r   getcodemsgr	   codeOSErrorERRORshow_responsegetattrjoinr   ) r   commandr"   filenameZschemanetlocurlparamsqueryZ	fragmentsZgpg_argsfr!   metar6   	user_passauthboundaryZsep_boundaryZend_boundarybodykeyvaluetitlerk   r7   requestresultstatusreasonetextr   r   r   upload_file0   s    










zupload.upload_filec             C   s2   yt d}|j| j| jS  tk
r,   Y nX dS )zM
        Attempt to load password from keyring. Suppress Exceptions.
        keyringN)
__import__Zget_passwordr?   r   	Exception)r   r   r   r   r   r      s
    z"upload._load_password_from_keyringc             C   s&   yt j  S  ttfk
r    Y nX dS )zH
        Prompt for a password on the tty. Suppress Exceptions.
        N)r   r   KeyboardInterrupt)r   r   r   r   r      s    zupload._prompt_for_passwordN)	__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r   r      s   
 
r   )r_   rI   rL   r   base64r   	distutilsr   distutils.commandr   r   distutils.spawnr   distutils.errorsr   Z*setuptools.extern.six.moves.urllib.requestr   r   Z(setuptools.extern.six.moves.urllib.errorr	   Z(setuptools.extern.six.moves.urllib.parser
   r   r   r   r   <module>   s   