a
    6Ih-                     @   sd   d Z ddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
T ddlmZ G dd de	ZdS )	zhdistutils.command.register

Implements the Distutils 'register' command (register with the repository).
    N)warn)PyPIRCCommand)*)logc                   @   s   e Zd ZdZejddg Zejg d Zddd fgZdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdddZdS )registerz7register the distribution with the Python package index)list-classifiersNz list the valid Trove classifiers)strictNzBWill stop the registering if the meta-data are not fully compliant)verifyr   r   checkc                 C   s   dS )NT selfr   r   `/var/www/html/venv_bot_3.9/lib/python3.9/site-packages/setuptools/_distutils/command/register.py<lambda>       zregister.<lambda>c                 C   s   t |  d| _d| _d S )Nr   )r   initialize_optionslist_classifiersr   r   r   r   r   r      s    
zregister.initialize_optionsc                 C   s*   t |  d| jfdd}|| jjd< d S )Nr   )r      )r   restructuredtextr
   )r   finalize_optionsr   distributioncommand_options)r   Zcheck_optionsr   r   r   r   $   s
    
zregister.finalize_optionsc                 C   sT   |    |   |  D ]}| | q| jr8|   n| jrH|   n|   d S )N)	r   _set_configget_sub_commandsrun_commanddry_runverify_metadatar   classifierssend_metadata)r   cmd_namer   r   r   run+   s    

zregister.runc                 C   s8   t dt | jd}|  | j|_d|_|  dS )zDeprecated API.zddistutils.command.register.check_metadata is deprecated,               use the check command insteadr
   r   N)r   PendingDeprecationWarningr   get_command_objensure_finalizedr   r   r    )r   r
   r   r   r   check_metadata:   s    zregister.check_metadatac                 C   sz   |   }|i kr@|d | _|d | _|d | _|d | _d| _n6| jd| jfvr^td| j | jdkrp| j| _d| _d	S )
z: Reads the configuration file and set attributes.
        usernamepassword
repositoryrealmTpypiz%s not found in .pypircFN)_read_pypircr%   r&   r'   r(   
has_configDEFAULT_REPOSITORY
ValueError)r   configr   r   r   r   D   s    




zregister._set_configc                 C   s*   | j d }tj|}t| | dS )z8 Fetch the list of classifiers from the server.
        z?:action=list_classifiersN)r'   urllibrequesturlopenr   info_read_pypi_response)r   urlresponser   r   r   r   U   s    
zregister.classifiersc                 C   s&   |  | d\}}td|| dS )zF Send the metadata to the package index server to be checked.
        r	   Server response (%s): %sN)post_to_serverbuild_post_datar   r2   )r   coderesultr   r   r   r   \   s    zregister.verify_metadatac           
      C   s  | j rd}| j}| j}nd}d }}d }||vrd| dtj t }|sRd}q,||vr,td q,|dkrl|s|td}qn|st		d}q|t
j }t
j| jd	 }|| j||| | | d
|\}}| d||f tj |dkr| j r|| j_nf| dtj | d|   tj d}| dvrNtd}|s*d}q*| dkr| || nl|dkrddi}	d |	d<  |	d< |	d< d|	d< |	d std|	d< q|	d |	d kr0|	d st		d|	d< q|	d st		d|	d< q|	d |	d krd|	d< d|	d< td q|	d sJtd|	d< q0| |	\}}|dkrrtd|| ntd td  nP|d!krdd"i}	d|	d< |	d std#|	d< q| |	\}}td|| dS )$a_   Send the metadata to the package index server.

            Well, do the following:
            1. figure who the user is, and then
            2. send the data as a Basic auth'ed POST.

            First we try to read the username/password from $HOME/.pypirc,
            which is a ConfigParser-formatted file with a section
            [distutils] containing username and password entries (both
            in clear text). Eg:

                [distutils]
                index-servers =
                    pypi

                [pypi]
                username: fred
                password: sekrit

            Otherwise, to figure who the user is, we offer the user three
            choices:

             1. use existing login,
             2. register as a new user, or
             3. set the password to a random string and email the user.

        1x z1 2 3 4zWe 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: r   submitr6      zAI can store your PyPI login so future submissions will be faster.z (the login will be stored in %s)XZynzSave your login (y/N)?ny2:actionusernamer&   emailNZconfirmz
 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.3Zpassword_resetzYour email address: )r+   r%   r&   splitannouncer   INFOinputprintgetpassr/   r0   HTTPPasswordMgrparseurlparser'   add_passwordr(   r7   r8   r   _get_rc_filelower_store_pypircr2   )
r   choicer%   r&   choicesauthhostr9   r:   datar   r   r   r   c   s    














zregister.send_metadatac                 C   s   | j j}|d| | | | | | | |	 |
 | | | | | | d}|d s|d s|d rd|d< |S )Nz1.0)rD   metadata_versionrF   versionsummaryZ	home_pageauthorauthor_emaillicensedescriptionkeywordsplatformr   download_urlprovidesrequires	obsoletesre   rf   rg   z1.1r[   )r   metadataget_nameget_versionget_descriptionget_urlget_contactget_contact_emailget_licenceget_long_descriptionget_keywordsget_platformsget_classifiersget_download_urlget_providesget_requiresget_obsoletes)r   actionmetarZ   r   r   r   r8      s,    zregister.build_post_dataNc              
   C   s  d|v r$|  d|d | jf tj d}d| }|d }t }| D ]~\}}t|tg tdfvrn|g}|D ]R}t|}|	| |	d|  |	d |	| |rr|d	 d
krr|	d qrqH|	| |	d |
 d}d| tt|d}	tj| j||	}
tjtjj|d}d}z||
}W n| tjjy } z*| jrb|j }|j|jf}W Y d}~nTd}~0  tjjy } zdt|f}W Y d}~n d}~0 0 | jr| |}d}| jrdd|df}|  |tj |S )zC Post a query to the server, and return a string response.
        rF   zRegistering %s to %sz3--------------GHSKFJDLGDS7543FJKLFHRE75642756743254z
--z--r   z*
Content-Disposition: form-data; name="%s"z


zutf-8z/multipart/form-data; boundary=%s; charset=utf-8)zContent-typezContent-length)password_mgrr=   Ni  )r?   OKzK---------------------------------------------------------------------------)rJ   r'   r   rK   ioStringIOitemstypestrwritegetvalueencodelenr/   r0   Requestbuild_openerHTTPBasicAuthHandleropenerror	HTTPErrorshow_responsefpreadr9   msgURLErrorr3   join)r   rZ   rX   boundaryZsep_boundaryZend_boundarybodykeyvalueheadersreqopenerr:   er   r   r   r   r7      s^    






 "
zregister.post_to_server)N)__name__
__module____qualname__ra   r   user_optionsboolean_optionssub_commandsr   r   r    r$   r   r   r   r   r8   r7   r   r   r   r   r      s"   
zr   )__doc__rN   r   urllib.parser/   urllib.requestwarningsr   distutils.corer   distutils.errors	distutilsr   r   r   r   r   r   <module>   s   