a DOg@sddlZddlZddlZddlmZddlmZddlmZm Z ddl m Z ddl m Z mZddlmZddlmZdd lmZeed deed deed dd ZGdddeZdS)N)standard_b64encode) HTTPError)urlopenRequest)urlparse)DistutilsErrorDistutilsOptionError) PyPIRCCommand)spawn)logZmd5Zsha256Zblake2b)Z md5_digestZ sha256_digestZblake2_256_digestc@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/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 repositoryrealm) 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)rmsgcommand pyversionfilenamerrrrunDs 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<tD]B\}}|durLq6z||  ||<Wnt!ytYn0q6|jrt|dd ,} tj|d| f|d<Wdn1s0Y|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|t1j2d |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|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 Zmetadata_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$openreadclosermetadataZget_nameZ get_versionospathbasenameZget_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_DIGESTSitemsZ hexdigest ValueErrorrrencoderdecodeioBytesIO isinstancelisttypetuplestrwritegetvalueZannouncer INFOlenrrZgetcoderrcodeOSErrorZERRORrZ_read_pypi_responsejoinr)"rrr r!ZschemaZnetlocZurlparamsZqueryZ fragmentsZgpg_argsfr)metar1Z digest_nameZ digest_consZ user_passZauthboundaryZ sep_boundaryZ end_boundarybodykeyvaluetitlerr2ZrequestresultZstatusreasonetextrrrrLs        (          zupload.upload_fileN) __name__ __module__ __qualname__r+r Z user_optionsZboolean_optionsrrr"rrrrrr s r )r:rBZhashlibbase64rZ urllib.errorrZurllib.requestrrZ urllib.parserZdistutils.errorsrrZdistutils.corer Zdistutils.spawnr Z distutilsr getattrr=r rrrrs