a XC?hÅã@s¼dZddlZddlZddlZddlmZddlmZddlm Z m Z ddl m Z ddl mZmZddlmZdd lmZdd lmZeed dƒeed dƒeed dƒdœZGdd„deƒZdS)zm distutils.command.upload Implements the Distutils 'upload' subcommand (upload package to a package index). éN)Ústandard_b64encode)Ú HTTPError)ÚurlopenÚRequest)Úurlparse)ÚDistutilsErrorÚDistutilsOptionError)Ú PyPIRCCommand)Úspawn)ÚlogZmd5Zsha256Zblake2b)Z md5_digestZ sha256_digestZblake2_256_digestc@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/python39/lib64/python3.9/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)rZconfigrrrr2s  ÿ    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ÚrunDs z upload.runc"Cs t|jƒ\}}}}}} |s"|s"| r0td|jƒ‚|dvrDtd|ƒ‚|jr|ddd|g} |jrnd|jg| dd…<t| |jd t|d ƒ} z|  ¡} W|   ¡n |   ¡0|j j } d d |   ¡|   ¡tj |¡| f||d |  ¡|  ¡|  ¡|  ¡|  ¡|  ¡|  ¡|  ¡|  ¡|  ¡|  ¡|  ¡|  ¡dœ}d|d<t ¡D]B\}}|durLq6z|| ƒ  ¡||<Wnt!ytYn0q6|jrÎt|dd ƒ,} tj |¡d|  ¡f|d<Wdƒn1sÄ0Y|j"d|j# $d¡}dt%|ƒ &d¡}d}d| $d¡}|d}t' (¡}| ¡D]”\}}d|}t)|t*ƒsB|g}|D]j}t+|ƒt,urr|d|d7}|d}nt-|ƒ $d¡}| .|¡| .| $d¡¡| .d¡| .|¡qFq | .|¡| /¡}d||jf}| 0|t1j2¡d |t-t3|ƒƒ|d!œ}t4|j||d"}zt5|ƒ}| 6¡}|j7}Wnjt8yX} z| j9}| j7}WYd} ~ nBd} ~ 0t:y} z | 0t-| ƒt1j;¡‚WYd} ~ n d} ~ 00|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 Zmetadata_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ÚreadÚcloserÚmetadataZget_nameZ get_versionÚosÚpathÚbasenameZget_descriptionZget_urlZ get_contactZget_contact_emailZ get_licenceZget_long_descriptionZ get_keywordsZ get_platformsZget_classifiersZget_download_urlZ get_providesZ get_requiresZ get_obsoletesÚ_FILE_CONTENT_DIGESTSÚitemsZ hexdigestÚ ValueErrorrrÚencoderÚdecodeÚioÚBytesIOÚ isinstanceÚlistÚtypeÚtupleÚstrÚwriteÚgetvalueZannouncer ÚINFOÚlenrrZgetcoderrÚcodeÚOSErrorZERRORrZ_read_pypi_responseÚjoinr)"rrr r!ZschemaZnetlocZurlÚparamsZqueryZ fragmentsZgpg_argsÚfr)Úmetar1Z digest_nameZ digest_consZ user_passZauthÚboundaryZ sep_boundaryZ end_boundaryÚbodyÚkeyÚvalueÚtitlerr2ZrequestÚresultZstatusÚreasonÚeÚtextrrrrLsÐÿ   ÿ  ã   ÿ(      ýÿ  ÿ  zupload.upload_fileN) Ú__name__Ú __module__Ú __qualname__r+r Z user_optionsZboolean_optionsrrr"rrrrrr sý r )Ú__doc__r:rBZhashlibÚbase64rZ urllib.errorrZurllib.requestrrZ urllib.parserZdistutils.errorsrrZdistutils.corer Zdistutils.spawnr Z distutilsr Úgetattrr=r rrrrÚs          ý