o
    JAf                     @   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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)urlopenRequest	HTTPError)urlparse)DistutilsErrorDistutilsOptionError)PyPIRCCommand)spawn)log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   I/usr/lib/python3.10/site-packages/setuptools/_distutils/command/upload.pyr   (   s   

zupload.initialize_optionsc                 C   sz   t |  | jr| jstd|  }|i kr+|d | _|d | _|d | _|d | _	| js9| j
jr;| j
j| _d S d S 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   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   Z
dist_filesr   upload_file)r   msgcommand	pyversionfilenamer   r   r   run@   s   z
upload.runc           "   
   C   s>  t | j\}}}}}}	|s|s|	rtd| j |dvr"td| | jr>ddd|g}
| jr7d| jg|
dd< t|
| jd	 t|d
}z
| }W |	  n|	  w | j
j}i ddddd| d| dtj||fd|d|ddd| d| d| d| d| d| d| d| d| | | | | d}d |d!< t D ]\}}|d u rqz
||  ||< W q t!y   Y qw | jrt|d" d
}tj|d" | f|d#< W d    n	1 sw   Y  | j"d$ | j# $d%}d&t%|&d% }d'}d(|$d% }|d) }t'( }| D ]J\}}d*| }t)|t*s@|g}|D ]5}t+|t,u rX|d+|d,  7 }|d- }nt-|$d.}|.| |.|$d. |.d/ |.| qBq/|.| |/ }d0|| jf }| 0|t1j2 d1| t-t3||d2}t4| j||d3}zt5|}|6 }|j7}W n/ t8y }  z| j9}| j7}W Y d } ~ nd } ~ w t:y }  z
| 0t-| t1j;  d } ~ ww |d4kr| 0d5||f t1j2 | j<r| =|}!d6>d7|!d7f}| 0|t1j2 d S d S d8||f }| 0|t1j; t?|)9NzIncompatible url %s)httphttpszunsupported schema Zgpgz--detach-signz-az--local-user   )dry_runrbz:actionZfile_uploadZprotocol_version1nameversioncontentZfiletyper$   metadata_versionz1.0summaryZ	home_pageZauthorZauthor_emaillicensedescriptionkeywordsplatformZclassifiers)Zdownload_urlZprovidesrequiresZ	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 %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)@r   r   AssertionErrorr   r   r
   r*   openreadcloser   metadataget_nameget_versionospathbasename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items	hexdigest
ValueErrorr   r   encoder   decodeioBytesIO
isinstancelisttypetuplestrwritegetvalueZannouncer   INFOlenr   r   getcoder"   r   codeOSErrorERRORr   Z_read_pypi_responsejoinr   )"r   r#   r$   r%   Zschemanetlocurlparamsquery	fragmentsZgpg_argsfr/   metar<   Zdigest_namedigest_cons	user_passauthboundaryZsep_boundaryZend_boundarybodykeyvaluetitler"   r=   requestresultstatusreasonetextr   r   r   r!   J   s   

	









zupload.upload_fileN)__name__
__module____qualname__r3   r	   Zuser_optionsZboolean_optionsr   r   r&   r!   r   r   r   r   r      s    
r   )__doc__rG   rQ   hashlibbase64r   urllib.requestr   r   r   urllib.parser   Zdistutils.errorsr   r   Zdistutils.corer	   Zdistutils.spawnr
   	distutilsr   getattrrK   r   r   r   r   r   <module>   s     


