Yf@sdZddlZddlZddlZddlZddlmZddlmZm Z m Z ddl m Z ddl mZmZddlmZddlmZdd lmZGd d d eZdS) zm distutils.command.upload Implements the Distutils 'upload' subcommand (upload package to a package index). N)standard_b64encode)urlopenRequest HTTPError)urlparse)DistutilsErrorDistutilsOptionError) PyPIRCCommand)spawn)logc@sieZdZdZejddgZejdgZdd Zd d Zd d Z ddZ dS)uploadzupload binary package to PyPIsignssign files to upload using gpg identity=iGPG identity used to sign filescCs>tj|d|_d|_d|_d|_d|_dS)NrF)r initialize_optionsusernamepassword show_responser identity)selfr=/opt/alt/python35/lib64/python3.5/distutils/command/upload.pyr s      zupload.initialize_optionscCstj||jr,|j r,td|j}|ikrx|d|_|d|_|d|_|d|_ |j r|j jr|j j|_dS)Nz.Must use --sign for --identity to have meaningrr repositoryrealm) r finalize_optionsrr rZ _read_pypircrrrr distribution)rconfigrrrr(s        zupload.finalize_optionscCsU|jjsd}t|x0|jjD]"\}}}|j|||q+WdS)Nz'No dist file created in earlier command)rZ dist_filesr upload_file)rmsgcommand pyversionfilenamerrrrun:s   z upload.runc$4Cst|j\}}}}}} |s3|s3| rFtd|j|dIkrbtd||jrddd|g} |jrd|jg| d d |d?t/t5|d@|i}t6|jdA|dB|}y%t7|}|j8} |j9}!Wnwt:k r}"z|"j;} |"j9}!WYdd}"~"XnAt<k r}"z!|j2t/|"t3j=WYdd}"~"XnX| dCkr|j2dD| |!ft3j4|j>r|j?|}#dEj@dFdG|#dFdGf}|j2|t3j4n/dH| |!f}|j2|t3j=tA|dS)KNzIncompatible url %shttphttpszunsupported schema Zgpgz --detach-signz-az --local-userdry_runrbz:actionZ file_uploadZprotocol_version1nameversioncontentZfiletyper$Z md5_digestZmetadata_versionz1.0ZsummaryZ home_pageZauthorZ author_emaillicense descriptionkeywordsplatformZ classifiersZ download_urlZprovidesZrequiresZ obsoletesrZ bdist_rpmzbuilt for %s %sZ bdist_dumbz built for %sZtersecommentz.ascZ gpg_signature:asciizBasic z3--------------GHSKFJDLGDS7543FJKLFHRE75642756743254s --s-- z+ Content-Disposition: form-data; name="%s"z; filename="%s"rzutf-8s s s zSubmitting %s to %sz Content-typez multipart/form-data; boundary=%szContent-lengthZ AuthorizationdataheaderszServer response (%s): %s -KzUpload failed (%s): %s)r'r()BrrAssertionErrorr rr r*openreadcloserZmetadataZget_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_obsoletesr3distrrencoderdecodeioBytesIOitems isinstancelisttypetuplestrwritegetvalueZannouncer INFOlenrrZgetcoder"rcodeOSErrorZERRORrZ_read_pypi_responsejoinr)$rr#r$r%ZschemaZnetlocZurlZparamsZqueryZ fragmentsZgpg_argsfr/metar8r5rGr.idZ user_passZauthboundaryZ sep_boundaryZ end_boundaryZbodykeyvaluetitler"r9ZrequestresultZstatusreasonetextrrrr!As!                                                zupload.upload_fileN)r rr)rrr) __name__ __module__ __qualname__r1r Z user_optionsZboolean_optionsrrr&r!rrrrr s     r )__doc__rCrJr3rFbase64rZurllib.requestrrrZ urllib.parserZdistutils.errorsrrZdistutils.corer Zdistutils.spawnr Z distutilsr r rrrrs