JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr i f@sdZddlZddlZddlZddlZddlZddlmZddlm Z m Z m Z ddl m Z ddlmZmZddlmZddlmZdd lmZejd krdd lmZndd lmZGd d d eZdS)z`distutils.command.upload Implements the Distutils 'upload' subcommand (upload package to PyPI).N)standard_b64encode)urlopenRequest HTTPError)urlparse)DistutilsErrorDistutilsOptionError) PyPIRCCommand)spawn)logz2.5)md5c@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_responseridentity)selfr=/opt/alt/python34/lib64/python3.4/distutils/command/upload.pyr#s      zupload.initialize_optionscCstj||jr/|j r/tdn|j}|ikr~|d|_|d|_|d|_|d|_ n|j r|j jr|j j|_ndS)Nz.Must use --sign for --identity to have meaningrr repositoryrealm) r finalize_optionsrrrZ _read_pypircrrrr distribution)rconfigrrrr+s       zupload.finalize_optionscCsR|jjstdnx0|jjD]"\}}}|j|||q(WdS)Nz'No dist file created in earlier command)r Z dist_filesr upload_file)rcommand pyversionfilenamerrrrun=s z upload.runc$Cst|j\}}}}}} |s3|s3| rItd|jn|dIkrhtd|n|jrddd|g} |jrd|jg| d d 6t,t2|d?6|d@6}t3|jdA|dB|}y%t4|}|j5}|j6} Wnwt7k r}!z!|j/t,|!t0j8WYdd}!~!Xn7t9k rM}!z|!j:}|!j6} WYdd}!~!XnX|dCkrz|j/dD|| ft0j1n/dE|| f}"|j/|"t0j8t;|"|j<r|j=|}#dFj>dGdH|#dGdHf}"|j/|"t0j1ndS)KNzIncompatible url %shttphttpszunsupported schema Zgpgz --detach-signz-az --local-userdry_runrbZ file_uploadz:action1Zprotcol_versionnameversioncontentZfiletyper$Z md5_digestz1.0Zmetadata_versionZsummaryZ 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 multipart/form-data; boundary=%sz Content-typezContent-lengthZ AuthorizationdataheaderszServer response (%s): %szUpload failed (%s): %s -K)r'r()?rrAssertionErrorrrr r*openreadcloser ZmetadataZget_nameZ get_versionospathbasenamer Z hexdigestZget_descriptionZget_urlZ get_contactZget_contact_emailZ get_licenceZget_long_descriptionZ get_keywordsZ get_platformsZget_classifiersZget_download_urlZ get_providesZ get_requiresZ get_obsoletesr3distrrencoderdecodeioBytesIOitemstypetuplestrwritegetvalueZannouncer INFOlenrrZgetcodemsgOSErrorZERRORrcoderrZ_read_pypi_responsejoin)$rr#r$r%ZschemaZnetlocZurlZparamsZqueryZ fragmentsZgpg_argsfr/metar8r5rFr.idZ user_passZauthboundaryZ sep_boundaryZ end_boundaryZbodykeyvaluetitler9ZrequestresultZstatusreasonerStextrrrr"Cs!                         #                        zupload.upload_fileN)zsignrr)rrr) __name__ __module__ __qualname__r1r Z user_optionsZboolean_optionsrrr&r"rrrrr s     r )__doc__sysrCrIZsocketr3base64rZurllib.requestrrrZ urllib.parserZdistutils.errorsrrZdistutils.corer Zdistutils.spawnr Z distutilsr r.r Zhashlibr rrrrs