U ,aY@sddlZddlZddlZddlZddlmZddlmZmZm Z ddl m Z ddl m Z mZddlmZddlmZddlmZGd d d eZdS) N)standard_b64encode)urlopenRequest HTTPError)urlparse)DistutilsErrorDistutilsOptionError) PyPIRCCommand)spawn)logc@sJeZdZdZejddgZejdgZddZddZd d Z d d Z d S)uploadzupload binary package to PyPI)signszsign files to upload using gpg)z identity=izGPG identity used to sign filesr cCs,t|d|_d|_d|_d|_d|_dS)NrF)r initialize_optionsusernamepassword show_responser identity)selfr=/opt/alt/python38/lib64/python3.8/distutils/command/upload.pyr s  zupload.initialize_optionscCsrt||jr|jstd|}|ikrV|d|_|d|_|d|_|d|_ |jsn|j jrn|j j|_dS)Nz.Must use --sign for --identity to have meaningrr repositoryrealm) r finalize_optionsrr rZ _read_pypircrrrr distribution)rZconfigrrrr(s      zupload.finalize_optionscCs:|jjsd}t||jjD]\}}}||||qdS)NzHMust create and upload files in one command (e.g. setup.py sdist upload))rZ dist_filesr upload_file)rmsgcommand pyversionfilenamerrrrun:s z upload.runc Cst|j\}}}}}} |s"|s"| r0td|j|dkrDtd||jr|ddd|g} |jrnd|jg| dd<t| |jd t|d } z | } W5| X|j j } d d | | tj|| f||t| d | | | | | | | | | | | | | d}d|d<|jrpt|dd "} tj|d| f|d<W5QRX|j!d|j"#d}dt$|%d}d}d|#d}|d}t&'}|(D]\}}d|}t)|t*s|g}|D]j}t+|t,kr|d|d7}|d}nt-|#d}|.||.|#d|.d|.|qq|.||/}d||jf}|0|t1j2d |t-t3||d!}t4|j||d"}zt5|}|6}|j7}Wnft8k r}z|j9}|j7}W5d}~XYn8t:k r.}z|0t-|t1j;W5d}~XYnX|d#kr|0d$||ft1j2|j<r|=|}d%>d&|d&f}|0|t1j2n"d'||f}|0|t1j;t?|dS)(NzIncompatible url %s)ZhttpZhttpszunsupported schema Zgpgz --detach-signz-az --local-user)dry_runrbZ file_upload1z1.0)z:actionZprotocol_versionnameversioncontentZfiletyper Z md5_digestZmetadata_versionZsummaryZ home_pageZauthorZ author_emaillicense descriptionkeywordsplatformZ classifiersZ download_urlZprovidesZrequiresZ obsoletesrZcommentz.ascZ gpg_signature:asciizBasic z3--------------GHSKFJDLGDS7543FJKLFHRE75642756743254s --s-- z+ Content-Disposition: form-data; name="%s"z; filename="%s"rzutf-8s zSubmitting %s to %sz multipart/form-data; boundary=%s)z Content-typezContent-lengthZ Authorization)dataheaderszServer response (%s): %s zK---------------------------------------------------------------------------zUpload failed (%s): %s)@rrAssertionErrorr rr r$openclosereadrZmetadataZget_nameZ get_versionospathbasenamehashlibZmd5Z hexdigestZget_descriptionZget_urlZ get_contactZget_contact_emailZ get_licenceZget_long_descriptionZ get_keywordsZ get_platformsZget_classifiersZget_download_urlZ get_providesZ get_requiresZ get_obsoletesrrencoderdecodeioBytesIOitems isinstancelisttypetuplestrwritegetvalueZannouncer INFOlenrrZgetcoderrcodeOSErrorZERRORrZ_read_pypi_responsejoinr) rrr r!ZschemaZnetlocZurlZparamsZqueryZ fragmentsZgpg_argsfr)metar1Z user_passZauthboundaryZ sep_boundaryZ end_boundaryZbodykeyvaluetitlerr2ZrequestresultZstatusreasonetextrrrrBs       !          zupload.upload_fileN) __name__ __module__ __qualname__r+r Z user_optionsZboolean_optionsrrr"rrrrrr s r )r9r?r-r<base64rZurllib.requestrrrZ urllib.parserZdistutils.errorsrrZdistutils.corer Zdistutils.spawnr Z distutilsr r rrrrs