3 \�-�@s`ddlZddlZddlZddlZddlmZddlmZddl Tddl m Z Gdd�de�Z dS)�N)�warn)� PyPIRCCommand)�*)�logc@s�eZdZdZejdd gZejdddgZdd d �fgZd d �Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zdd�Zd!dd�ZdS)"�registerz7register the distribution with the Python package index�list-classifiersN� list the valid Trove classifiers�strict�BWill stop the registering if the meta-data are not fully compliant�verify�checkcCsdS)NT�)�selfr r �2/usr/lib64/python3.6/distutils/command/register.py�szregister.cCstj|�d|_d|_dS)Nr)r�initialize_options�list_classifiersr )rr r rrs zregister.initialize_optionscCs*tj|�d|jfdd�}||jjd<dS)Nr�)r �restructuredtextr )rr)r�finalize_optionsr � distributionZcommand_options)rZ check_optionsr r rr$s zregister.finalize_optionscCsX|j�|j�x|j�D]}|j|�qW|jr<|j�n|jrL|j�n|j�dS)N) r� _set_configZget_sub_commandsZ run_commandZdry_run�verify_metadatar� classifiers� send_metadata)rZcmd_namer r r�run+s  z register.runcCs8tdt�|jjd�}|j�|j|_d|_|j�dS)Nzddistutils.command.register.check_metadata is deprecated, use the check command insteadr r)r�PendingDeprecationWarningrZget_command_objZensure_finalizedr rr)rr r r r�check_metadata:s zregister.check_metadatacCsz|j�}|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_pypircrrr r!� has_configZDEFAULT_REPOSITORY� ValueError)r�configr r rrDs     zregister._set_configcCs*|jd}tjj|�}tj|j|��dS)Nz?:action=list_classifiers)r �urllib�requestZurlopenr�info�_read_pypi_response)rZurlZresponser r rrUs  zregister.classifierscCs&|j|jd��\}}tjd||�dS)Nr zServer response (%s): %s)�post_to_server�build_post_datarr')r�code�resultr r rr\szregister.verify_metadatac Cs|jrd}|j}|j}n d}d}}dj�}x:||krf|jdtj�t�}|sTd}q.||kr.td�q.W|dk�r|x|s�td�}qtWx|s�t j d�}q�Wt j j �}t j j|j�d }|j|j|||�|j|jd �|�\}}|jd ||ftj�|d k�r|j�r||j_nj|jd tj�|jd|j�tj�d}x&|j�dk�r\td�}|�s8d}�q8W|j�dk�r|j||��n�|dk�r�ddi} d| d<| d<| d<d| d<x| d�s�td�| d<�q�Wx�| d| dk�rNx| d�s�t j d�| d<�q�Wx| d�st j d�| d<�qW| d| dk�r�d| d<d| d<td��q�Wx| d�sltd�| d<�qRW|j| �\}}|d k�r�tjd ||�ntjd�tjd�nT|d k�rdd!i} d| d<x| d�s�td"�| d<�q�W|j| �\}}tjd ||�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�parseZurlparser Z add_passwordr!r)r*rZ _get_rc_file�lowerZ _store_pypircr') rZchoicerr�choices�auth�hostr+r,�datar r rrcs�                     zregister.send_metadatacCs�|jj}|d|j�|j�|j�|j�|j�|j�|j�|j �|j �|j �|j �|j �|j�|j�|j�d�}|ds�|ds�|dr�d|d<|S)Nz1.0)z:action�metadata_versionr6�versionZsummaryZ home_pageZauthorZ author_email�license� description�keywords�platformrZ download_url�provides�requires� obsoletesrJrKrLz1.1rD)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�metarCr r rr*�s* zregister.build_post_datacCsd|kr$|jd|d|jftj�d}d|}|d}tj�}x�|j�D]�\}}t|�tg�tf�fkrp|g}xZ|D]R}t|�}|j |�|j d|�|j d�|j |�|rv|dd krv|j d �qvWqJW|j |�|j d �|j �j d �}d |tt |��d �} t jj|j|| �} t jjt jj|d��} d}y| j| �} Wnxt jjk �r�} z$|j�rl| jj�}| j| jf} WYdd} ~ XnJt jjk �r�} zdt| �f} WYdd} ~ XnX|j�r�|j| �}d} |j�rd jdd|ddf�}|j|tj�| S)Nr6zRegistering %s to %sz3--------------GHSKFJDLGDS7543FJKLFHRE75642756743254z --z--z* Content-Disposition: form-data; name="%s"z r� � zutf-8z/multipart/form-data; boundary=%s; charset=utf-8)z Content-typezContent-length)Z password_mgrr/i�r0�OK�-�K�����)r0rQ)r9r rr:�io�StringIO�items�type�str�write�getvalue�encode�lenr%r&ZRequestZ build_openerZHTTPBasicAuthHandler�open�errorZ HTTPErrorZ show_response�fp�readr+�msgZURLErrorr(�join)rrCrA�boundaryZ sep_boundaryZ end_boundaryZbody�key�valueZheadersZreq�openerr,�erbr r rr)�sV         zregister.post_to_server)rNr)r Nr )N)�__name__� __module__� __qualname__rGrZ user_optionsZboolean_optionsZ sub_commandsrrrrrrrrr*r)r r r rrs&  zr) r=rUZ urllib.parser%Zurllib.request�warningsrZdistutils.corerZdistutils.errorsZ distutilsrrr r r r�s