a
    If                     @   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 ddl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)	HTTPError)urlopenRequest)urlparse)DistutilsErrorDistutilsOptionError)PyPIRCCommand)spawn)logZmd5Zsha256Z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   )lib/python3.9/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   Z_read_pypircr   r   r   r   distribution)r   Zconfigr   r   r   r   2   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   Z
dist_filesr   upload_file)r   msgcommand	pyversionfilenamer   r   r   runD   s
    z
upload.runc           "      C   s
  t | j\}}}}}}	|s"|s"|	r0td| j |dvrDtd| | jr|ddd|g}
| jrnd| jg|
dd< t|
| jd	 t|d
}z| }W |	  n
|	  0 | j
j}dd| | tj||f||d| | | | | | | | | | | | | d}d|d< t D ]B\}}|d u rLq6z||  ||< W n t!yt   Y n0 q6| jrt|d d
,}tj|d | f|d< W d    n1 s0    Y  | j"d | j# $d}dt%|&d }d}d|$d }|d }t'( }| D ]\}}d| }t)|t*sB|g}|D ]j}t+|t,u rr|d|d  7 }|d }nt-|$d}|.| |.|$d |.d |.| qFq |.| |/ }d|| jf }| 0|t1j2 d | t-t3||d!}t4| j||d"}zt5|}|6 }|j7}W nj t8yX }  z| j9}| j7}W Y d } ~ nBd } ~ 0  t:y }  z | 0t-| t1j;  W Y d } ~ n
d } ~ 0 0 |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)ZhttpZ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metadata_versionZsummaryZ	home_pageZauthorZauthor_emaillicensedescriptionkeywordsplatformZclassifiersZdownload_urlZprovidesZrequiresZ	obsoletesr   Z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-lengthZAuthorization)dataheaders   zServer response (%s): %s
zK---------------------------------------------------------------------------zUpload failed (%s): %s)@r   r   AssertionErrorr   r   r
   r$   openreadcloser   metadataZget_nameZget_versionospathbasenameZ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_obsoletes_FILE_CONTENT_DIGESTSitemsZ	hexdigest
ValueErrorr   r   encoder   decodeioBytesIO
isinstancelisttypetuplestrwritegetvalueZannouncer   INFOlenr   r   Zgetcoder   r   codeOSErrorZERRORr   Z_read_pypi_responsejoinr   )"r   r   r    r!   ZschemaZnetlocZurlparamsZqueryZ	fragmentsZgpg_argsfr)   metar1   Zdigest_nameZdigest_consZ	user_passZauthboundaryZsep_boundaryZend_boundarybodykeyvaluetitler   r2   ZrequestresultZstatusreasonetextr   r   r   r   L   s    

 

(







zupload.upload_fileN)__name__
__module____qualname__r+   r	   Zuser_optionsZboolean_optionsr   r   r"   r   r   r   r   r   r      s   r   )__doc__r:   rB   Zhashlibbase64r   Zurllib.errorr   Zurllib.requestr   r   Zurllib.parser   Zdistutils.errorsr   r   Zdistutils.corer	   Zdistutils.spawnr
   Z	distutilsr   getattrr=   r   r   r   r   r   <module>   s    


