3
;p_                 @   s<   d Z ddlZddlmZ ddlmZ dZG dd deZdS )zdistutils.pypirc

Provides the PyPIRCCommand class, the base class for the command classes
that uses .pypirc in the distutils.command package.
    N)RawConfigParser)CommandzE[distutils]
index-servers =
    pypi

[pypi]
username:%s
password:%s
c               @   sh   e Zd ZdZdZdZdZdZddde fdgZdgZ	d
d Z
dd Zdd Zdd Zdd Zdd ZdS )PyPIRCCommandz;Base command that knows how to handle the .pypirc file
    zhttps://upload.pypi.org/legacy/pypiNzrepository=rzurl of repository [default: %s]show-response&display full response text from serverc             C   s   t jjt jjddS )zReturns rc file path.~z.pypirc)ospathjoin
expanduser)self r   D/tmp/pip-install-ofl94hr3/setuptools/setuptools/_distutils/config.py_get_rc_file&   s    zPyPIRCCommand._get_rc_filec             C   sH   | j  }tjtj|tjtjB dd}|jt||f  W dQ R X dS )zCreates a default .pypirc file.i  wN)r   r
   fdopenopenO_CREATO_WRONLYwriteDEFAULT_PYPIRC)r   usernamepasswordrcfr   r   r   _store_pypirc*   s     zPyPIRCCommand._store_pypircc             C   s  | j  }tjj|r| jd|  | jp.| j}t }|j| |j	 }d|krF|j
dd}dd |jdD }|g krd|krdg}ni S x|D ]}d|i}|j
|d	|d	< xHd
| jfd| jfdfD ].\}	}
|j||	r|j
||	||	< q|
||	< qW |dkr"|| jdfkr"| j|d
< |S |d |ks<|d
 |kr|S qW nRd|krd}|j|d
rp|j
|d
}n| j}|j
|d	|j
|d||| jdS i S )zReads the .pypirc file.zUsing PyPI login from %s	distutilszindex-serversc             S   s    g | ]}|j  d kr|j  qS ) )strip).0serverr   r   r   
<listcomp>=   s    z.PyPIRCCommand._read_pypirc.<locals>.<listcomp>
r   r"   r   
repositoryrealmr   Nzserver-login)r   r   r%   r"   r&   )r   N)r   r
   r   existsannouncer%   DEFAULT_REPOSITORYr   readsectionsgetsplitDEFAULT_REALM
has_option)r   r   r%   configr+   index_servers_serversr"   currentkeydefaultr   r   r   _read_pypirc0   sV    









zPyPIRCCommand._read_pypircc             C   s8   ddl }|jdd}|j|d jdd}|j j|S )z%Read and decode a PyPI HTTP response.r   Nzcontent-typez
text/plain   charsetascii)cgi	getheaderparse_headerr,   r*   decode)r   responser:   content_typeencodingr   r   r   _read_pypi_responsep   s    z!PyPIRCCommand._read_pypi_responsec             C   s   d| _ d| _d| _dS )zInitialize options.Nr   )r%   r&   show_response)r   r   r   r   initialize_optionsw   s    z PyPIRCCommand.initialize_optionsc             C   s(   | j dkr| j| _ | jdkr$| j| _dS )zFinalizes options.N)r%   r)   r&   r.   )r   r   r   r   finalize_options}   s    

zPyPIRCCommand.finalize_options)r   Nr   )__name__
__module____qualname____doc__r)   r.   r%   r&   user_optionsboolean_optionsr   r   r6   rA   rC   rD   r   r   r   r   r      s"    @r   )rH   r
   configparserr   distutils.cmdr   r   r   r   r   r   r   <module>   s
   
