B YI~dÀ-ã@s`ddlZddlZddlZddlZddlmZddlmZddl Tddl m Z Gdd„deƒZ dS)éN)Úwarn)Ú PyPIRCCommand)Ú*)Úlogc@sŽeZdZdZejddgZejdddgZddd „fgZd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zddd„ZdS) Úregisterz7register the distribution with the Python package index)zlist-classifiersNz list the valid Trove classifiers)ÚstrictNzBWill stop the registering if the meta-data are not fully compliantÚverifyzlist-classifiersrÚcheckcCsdS)NT©)Úselfr r ú?/opt/alt/python37/lib64/python3.7/distutils/command/register.pyÚózregister.cCst |¡d|_d|_dS)Nr)rÚinitialize_optionsÚlist_classifiersr)r r r r rs zregister.initialize_optionscCs*t |¡d|jfddœ}||jjd<dS)Nr)ré)rÚrestructuredtextr )rÚfinalize_optionsrÚ distributionZcommand_options)r Z check_optionsr r r r$s zregister.finalize_optionscCsX| ¡| ¡x| ¡D]}| |¡qW|jr<| ¡n|jrL| ¡n| ¡dS)N) rÚ _set_configZget_sub_commandsZ run_commandZdry_runÚverify_metadatarÚ classifiersÚ send_metadata)r Zcmd_namer r r Úrun+s  z register.runcCs8tdtƒ|j d¡}| ¡|j|_d|_| ¡dS)Nzddistutils.command.register.check_metadata is deprecated, use the check command insteadr r)rÚPendingDeprecationWarningrZget_command_objZensure_finalizedrrr)r r r r r Úcheck_metadata:s zregister.check_metadatacCsz| ¡}|ikr@|d|_|d|_|d|_|d|_d|_n6|jd|jfkr^td|jƒ‚|jdkrp|j|_d|_dS) NÚusernameÚpasswordÚ repositoryÚrealmTZpypiz%s not found in .pypircF)Z _read_pypircrrrrÚ has_configZDEFAULT_REPOSITORYÚ ValueError)r Zconfigr r r rDs     zregister._set_configcCs*|jd}tj |¡}t | |¡¡dS)Nz?:action=list_classifiers)rÚurllibÚrequestZurlopenrÚinfoÚ_read_pypi_response)r ZurlZresponser r r rUs  zregister.classifierscCs&| | d¡¡\}}t d||¡dS)NrzServer response (%s): %s)Úpost_to_serverÚbuild_post_datarr$)r ÚcodeÚresultr r r r\szregister.verify_metadatac Cs|jrd}|j}|j}n d}d}}d ¡}x:||krf| dtj¡tƒ}|sTd}q.||kr.tdƒq.W|dkr|x|s‚tdƒ}qtWx|s–t   d¡}q†Wt j   ¡}t j  |j¡d }| |j|||¡| | d ¡|¡\}}| d ||ftj¡|d kr|jr||j_nj| d tj¡| d| ¡tj¡d}x&| ¡dkr\tdƒ}|s8d}q8W| ¡dkr| ||¡n„|dkr¬ddi} d| d<| d<| d<d| d<x| dsÊtdƒ| d<q°Wx‚| d| dkrNx| dsþt   d¡| d<qâWx| dst   d¡| d<qW| d| dkrÎd| d<d| d<tdƒqÎWx| dsltdƒ| d<qRW| | ¡\}}|d kr–t d ||¡nt d¡t d¡nT|d krdd!i} d| d<x| dsâtd"ƒ| d<qÈW| | ¡\}}t d ||¡dS)#NÚ1ÚxÚz1 2 3 4zâWe need to know who you are, so please choose either: 1. use your existing login, 2. register as a new user, 3. have the server generate a new password for you (and email it to you), or 4. quit Your selection [default 1]: z&Please choose one of the four options!z Username: z Password: rZsubmitzServer response (%s): %séÈzAI can store your PyPI login so future submissions will be faster.z (the login will be stored in %s)ÚXZynzSave your login (y/N)?ÚnÚyÚ2z:actionÚuserÚnamerZemailZconfirmz Confirm: z!Password and confirm don't match!z EMail: z"You will receive an email shortly.z7Follow the instructions in it to complete registration.Ú3Zpassword_resetzYour email address: )r rrÚsplitÚannouncerÚINFOÚinputÚprintÚgetpassr"r#ZHTTPPasswordMgrÚparseZurlparserZ add_passwordrr&r'rZ _get_rc_fileÚlowerZ _store_pypircr$) r ÚchoicerrÚchoicesÚauthZhostr(r)Údatar r r rcsŒ                     zregister.send_metadatacCs|jj}|d| ¡| ¡| ¡| ¡| ¡| ¡| ¡|  ¡|  ¡|  ¡|  ¡|  ¡| ¡| ¡| ¡dœ}|ds„|ds„|drŒd|d<|S)Nz1.0)z:actionÚmetadata_versionr3ÚversionZsummaryZ home_pageZauthorZ author_emailÚlicenseÚ descriptionÚkeywordsÚplatformrZ download_urlÚprovidesÚrequiresÚ obsoletesrGrHrIz1.1rA)rZmetadataZget_nameZ get_versionZget_descriptionZget_urlZ get_contactZget_contact_emailZ get_licenceZget_long_descriptionZ get_keywordsZ get_platformsZget_classifiersZget_download_urlZ get_providesZ get_requiresZ get_obsoletes)r ÚactionÚmetar@r r r r'Ýs* zregister.build_post_dataNc Csüd|kr$| d|d|jftj¡d}d|}|d}t ¡}xŽ| ¡D]‚\}}t|ƒtgƒtdƒfkrp|g}xZ|D]R}t|ƒ}|  |¡|  d|¡|  d¡|  |¡|rv|d d krv|  d ¡qvWqJW|  |¡|  d ¡|  ¡  d ¡}d |tt |ƒƒdœ} t j |j|| ¡} t j t jj|d¡} d}y|  | ¡} Wnxt jjk rˆ} z"|jrl| j ¡}| j| jf} Wdd} ~ XYnJt jjk rº} zdt| ƒf} Wdd} ~ XYnX|jrÎ| | ¡}d} |jrød  d|df¡}| |tj¡| S)Nr3zRegistering %s to %sz3--------------GHSKFJDLGDS7543FJKLFHRE75642756743254z --z--r z* Content-Disposition: form-data; name="%s"z éÿÿÿÿú Ú zutf-8z/multipart/form-data; boundary=%s; charset=utf-8)z Content-typezContent-length)Z password_mgrr,iô)r-ZOKzK---------------------------------------------------------------------------)r6rrr7ÚioÚStringIOÚitemsÚtypeÚstrÚwriteÚgetvalueÚencodeÚlenr"r#ZRequestZ build_openerZHTTPBasicAuthHandlerÚopenÚerrorZ HTTPErrorZ show_responseÚfpÚreadr(ÚmsgZURLErrorr%Újoin)r r@r?ÚboundaryZ sep_boundaryZ end_boundaryZbodyÚkeyÚvalueZheadersZreqÚopenerr)Úer\r r r r&ùsV         zregister.post_to_server)N)Ú__name__Ú __module__Ú __qualname__rDrZ user_optionsZboolean_optionsZ sub_commandsrrrrrrrrr'r&r r r r rs"  zr) r:rOZ urllib.parser"Zurllib.requestÚwarningsrZdistutils.corerZdistutils.errorsZ distutilsrrr r r r Ús