U .‘cYã@s˜dZddlZddlZddlZddlZddlmZddlmZm Z m Z ddl m Z ddl mZmZddlmZddlmZdd lmZGd d „d eƒZdS) 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)Úlogc@sJeZdZdZejddgZejdgZdd„Zdd„Zd d „Z d d „Z d S)Úuploadzupload binary package to PyPI)ÚsignÚszsign files to upload using gpg)z identity=ÚizGPG identity used to sign filesr cCs,t |¡d|_d|_d|_d|_d|_dS)NÚrF)r Úinitialize_optionsÚusernameÚpasswordÚ show_responser Úidentity)Úself©rú=/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Ú repositoryÚrealm) 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)rÚmsgÚcommandÚ pyversionÚfilenamerrrÚrun:s z upload.runc Cs¨t|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¡| .|¡qèqÂ| .|¡| /¡}d||jf}| 0|t1j2¡d |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|t1j2¡n"d'||f}| 0|t1j;¡t?|ƒ‚dS)(NzIncompatible url %s)ZhttpZhttpszunsupported schema Zgpgz --detach-signz-az --local-useré)Údry_runÚrbZ file_uploadÚ1z1.0)z:actionZprotocol_versionÚnameÚversionÚcontentZfiletyper Z md5_digestZmetadata_versionZsummaryZ home_pageZauthorZ author_emailÚlicenseÚ descriptionÚkeywordsÚplatformZ classifiersZ download_urlZprovidesZrequiresZ obsoletesrZcommentz.ascZ gpg_signatureú:ÚasciizBasic z3--------------GHSKFJDLGDS7543FJKLFHRE75642756743254s --s-- z+ Content-Disposition: form-data; name="%s"z; filename="%s"rézutf-8s zSubmitting %s to %sz multipart/form-data; boundary=%s)z Content-typezContent-lengthZ Authorization)ÚdataÚheaderséÈzServer response (%s): %sÚ zK---------------------------------------------------------------------------zUpload failed (%s): %s)@rrÚAssertionErrorr rr r$ÚopenÚcloseÚreadrZmetadataZget_nameZ get_versionÚosÚpathÚbasenameÚhashlibZmd5Z hexdigestZget_descriptionZget_urlZ get_contactZget_contact_emailZ get_licenceZget_long_descriptionZ get_keywordsZ get_platformsZget_classifiersZget_download_urlZ get_providesZ get_requiresZ get_obsoletesrrÚencoderÚdecodeÚioÚBytesIOÚitemsÚ isinstanceÚlistÚtypeÚtupleÚstrÚwriteÚgetvalueZannouncer ÚINFOÚlenrrZgetcoderrÚcodeÚOSErrorZERRORrZ_read_pypi_responseÚjoinr) rrr r!ZschemaZnetlocZurlZparamsZqueryZ fragmentsZgpg_argsÚfr)Úmetar1Z user_passZauthÚboundaryZ sep_boundaryZ end_boundaryZbodyÚkeyÚvalueÚtitlerr2ZrequestÚresultZstatusÚreasonÚeÚtextrrrrBsÄÿ   ÿ    â!ÿ      ýÿ  ÿ  zupload.upload_fileN) Ú__name__Ú __module__Ú __qualname__r+r Z user_optionsZboolean_optionsrrr"rrrrrr sý r )Ú__doc__r9r?r-r<Úbase64rZurllib.requestrrrZ urllib.parserZdistutils.errorsrrZdistutils.corer Zdistutils.spawnr Z distutilsr r rrrrÚs