3 (\@sddlZddlZddlZddlZddlmZddlmZddlm Z ddl m Z ddl mZddlmZmZddlmZdd lmZGd d d e j Z dS) N)standard_b64encode)log)upload)spawn)DistutilsError)urlopenRequest) HTTPError)urlparsec@s8eZdZdZddZddZddZdd Zd d Zd S) rza Override default upload behavior to obtain password in a variety of different ways. c Cs&ztjj|Wd|jdtjXdS)NzjWARNING: Uploading via this command is deprecated, use twine to upload instead (https://pypi.org/p/twine/))origrrunannouncerWARN)selfru/private/var/folders/pf/wv4htv3x0qs2c2mp0dnn0kchsvlck3/T/pip-install-rm6ck8ia/setuptools/setuptools/command/upload.pyr s z upload.runcCs8tjj||jptj|_|jp0|jp0|j|_dS)N) r rfinalize_optionsusernamegetpassgetuserpassword_load_password_from_keyring_prompt_for_password)rrrrr"s   zupload.finalize_optionsc Cst|j\}}}}}} |s"|s"| r0td|j|d,krDtd||jr|ddd|g} |jrnd|jg| d d <t| |jd t|d } | j} WdQRX|j j } d d | j | j t jj|| f||tj| jt| j| j| j| j| j| j| j| j| j| j| j| j| j | j!d}d|d<|jrdt jj|dt|dd jf|d<|j"d|j#j$d}dt%|j&d}d}d|j$d}|d}t'j(}x|j)D]\}}d|}t*|t+s|g}xr|D]j}t,|t-kr |d|d7}|d}nt|j$d}|j.||j.|j$d|j.d|j.|qWqW|j.||j/}d||jf}|j0|t1j2d |tt3||d!}t4|j||d"}yt5|}|j6}|j7}Wnft8k r}z|j9}|j7}WYdd}~Xn8t:k r*}z|j0t|t1j;WYdd}~XnX|d#kr|j0d$||ft1j2|j<rt=|d%d&d'|}|dk rd(j>d)d*|d)d*f}|j0|t1j2n"d+||f}|j0|t1j;t?|dS)-NzIncompatible url %shttphttpszunsupported schema Zgpgz --detach-signz-az --local-user)dry_runrbZ file_upload1)z:actionZprotocol_versionnameversioncontentZfiletype pyversionZ md5_digestmetadata_versionsummaryZ home_pageauthor author_emaillicense descriptionkeywordsplatform classifiers download_urlprovidesrequires obsoletescommentz.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-length Authorization)dataheaderszServer response (%s): %s_read_pypi_responsecSsdS)Nr)xrrrsz$upload.upload_file.. -KzUpload failed (%s): %s)rr)@r repositoryAssertionErrorsignidentityrropenread distributionmetadataget_name get_versionospathbasenamehashlibmd5 hexdigeststrZget_metadata_versionget_descriptionget_url get_contactget_contact_email get_licenceget_long_description get_keywords get_platformsget_classifiersget_download_url get_provides get_requires get_obsoletesrrencoderdecodeioBytesIOitems isinstancelisttypetuplewritegetvaluer rINFOlenrrgetcodemsgr codeOSErrorERROR show_responsegetattrjoinr) rcommandr"filenameZschemanetlocurlparamsqueryZ fragmentsZgpg_argsfr!metar6 user_passauthboundaryZ sep_boundaryZ end_boundarybodykeyvaluetitlerkr7requestresultstatusreasonetextrrr upload_file0s                   zupload.upload_filec Cs2ytd}|j|j|jStk r,YnXdS)zM Attempt to load password from keyring. Suppress Exceptions. keyringN) __import__Z get_passwordr?r Exception)rrrrrrs z"upload._load_password_from_keyringc Cs&ytjSttfk r YnXdS)zH Prompt for a password on the tty. Suppress Exceptions. N)rrKeyboardInterrupt)rrrrrszupload._prompt_for_passwordN) __name__ __module__ __qualname____doc__r rrrrrrrrrs  r)r_rIrLrbase64r distutilsrdistutils.commandrr distutils.spawnrdistutils.errorsrZ*setuptools.extern.six.moves.urllib.requestrrZ(setuptools.extern.six.moves.urllib.errorr Z(setuptools.extern.six.moves.urllib.parser rrrrs