B œq/e%)»ã@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/python37/lib64/python3.7/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|ƒ‚x$|jjD]\}}}| |||¡qWdS)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 |  ¡} Wd|   ¡X|j j } d d |   ¡|   ¡tj |¡| f||t | ¡ ¡d |  ¡|  ¡|  ¡|  ¡|  ¡|  ¡|  ¡|  ¡|  ¡|  ¡|  ¡|  ¡|   ¡dœ}d}|dkrZt! "¡\}}}|rtd||f}n|dkrtdt!j!dd}||d<|jrªtj |¡dt|dd ƒ ¡f|d<|j#d|j$ %d¡}dt&|ƒ 'd¡}d}d| %d¡}|d}t( )¡}x¤| *¡D]˜\}}d|}t+|t,ƒs |g}xr|D]j}t-|ƒt.krR|d |d!7}|d}nt/|ƒ %d"¡}| 0|¡| 0| %d"¡¡| 0d#¡| 0|¡q&WqþW| 0|¡| 1¡}d$||jf}| 2|t3j4¡d%|t/t5|ƒƒ|d&œ}t6|j||d'}yt7|ƒ}| 8¡} |j9}!Wnft:k r:}"z|"j;} |"j9}!Wdd}"~"XYn8træ| ?|¡}#d* @d+|#d+f¡}| 2|t3j4¡n"d,| |!f}| 2|t3j=¡tA|ƒ‚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 obsoletesrZ bdist_rpmzbuilt for %s %sZ bdist_dumbz built for %sé)ZterseÚcommentz.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)ÚdataÚheaderséÈzServer response (%s): %sÚ zK---------------------------------------------------------------------------zUpload failed (%s): %s)BrrÚAssertionErrorr rr r$ÚopenÚreadÚcloserZmetadataZget_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_obsoletesr-ÚdistrrÚ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)Úmetar2r/r>r(ÚidZ user_passZauthÚboundaryZ sep_boundaryZ end_boundaryZbodyÚkeyÚvalueÚtitlerr3ZrequestÚresultZstatusÚreasonÚeÚtextrrrrBs                      zupload.upload_fileN) Ú__name__Ú __module__Ú __qualname__r+r Z user_optionsZboolean_optionsrrr"rrrrrr s r )Ú__doc__r:rAr-r=Úbase64rZurllib.requestrrrZ urllib.parserZdistutils.errorsrrZdistutils.corer Zdistutils.spawnr Z distutilsr r rrrrÚs