U
    -cD                     @   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 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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   H/tmp/pip-unpacked-wheel-izj_87as/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   0   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   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||d| | | | | | | | | | | | | d}d|d< t D ]D\}}|d krDq.z||  ||< W n t!k
rn   Y nX q.| jrt|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0|| j}| 1|t2j3 d | t-t4||d!}t5| j||d"}zt6|}|7 }|j8}W nf t9k
r: }  z| j:}| j8}W 5 d } ~ X Y n8 t;k
rp }  z| 1t-| t2j<  W 5 d } ~ X Y nX |d#kr| 1d$0||t2j3 | j=r| >|}!d%?d&|!d&f}| 1|t2j3 n"d'0||}| 1|t2j< t@|d S )(NzIncompatible url %s)httphttpszunsupported schema Zgpgz--detach-signz-az--local-userr   )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 {} to {}z multipart/form-data; boundary=%s)zContent-typezContent-lengthAuthorization)dataheaders   zServer response ({}): {}
zK---------------------------------------------------------------------------zUpload failed ({}): {})Ar   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formatannouncelogging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fr0   metarC   Zdigest_namedigest_cons	user_passauthboundaryZsep_boundaryZend_boundarybodykeyvaluetitler$   rD   requestresultstatusreasonetextr   r   r   r#   J   s    



&







 
zupload.upload_fileN)__name__
__module____qualname__r6   r
   user_optionsboolean_optionsr   r   r(   r#   r   r   r   r   r      s   
r   )__doc__rN   rd   hashlibro   base64r   urllib.requestr   r   r   urllib.parser   errorsr   r	   corer
   r   getattrr^   r   r   r   r   r   <module>   s   


