o
    *‘si  ã                   @   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   ú‰C:\Users\PC\students\dividedattentionclub\pushnotificationexperiment\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 rÈq¿z
||ƒ  ¡ ||< W q¿ t!yÛ   Y q¿w | 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_pageÚ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__r4   r	   Zuser_optionsZboolean_optionsr   r   r&   r!   r   r   r   r   r      s    þ
r   )Ú__doc__rH   rR   ÚhashlibÚbase64r   Úurllib.requestr   r   r   Úurllib.parser   Zdistutils.errorsr   r   Zdistutils.corer	   Zdistutils.spawnr
   Ú	distutilsr   ÚgetattrrL   r   r   r   r   r   Ú<module>   s     


ý