3
LY                 @   s   d dl mZ d dlmZ d dlmZ d dlZd dlZd dlmZ d dl	m
Z
 ddd	d
gZdddZdddZG dd	 d	e
ZG dd
 d
eZdS )    )convert_path)log)DistutilsOptionErrorN)configparser)Commandconfig_fileedit_configoption_basesetoptlocalc             C   sh   | dkrdS | dkr,t jjt jjtjdS | dkrZt jdkrBdpDd}t jjtd	| S t	d
| dS )zGet the filename of the distutils, local, global, or per-user config

    `kind` must be one of "local", "global", or "user"
    r   z	setup.cfgglobalzdistutils.cfguserposix. z~/%spydistutils.cfgz7config_file() type must be 'local', 'global', or 'user'N)
ospathjoindirname	distutils__file__name
expanduserr   
ValueError)kinddot r   s/private/var/folders/7d/20zwc49s3kn54d3vgq8bd4640000gn/T/pip-build-an2lx5zf/setuptools/setuptools/command/setopt.pyr      s    Fc       	   	   C   s.  t jd|  tj }|j| g x|j D ]\}}|dkrTt jd||  |j| q*|j|svt jd||  |j	| x||j D ]p\}}|dkrt jd|||  |j
|| |j|st jd||  |j| qt jd||||  |j||| qW q*W t jd|  |s*t| d	}|j| W dQ R X dS )
aY  Edit a configuration file to include `settings`

    `settings` is a dictionary of dictionaries or ``None`` values, keyed by
    command/section name.  A ``None`` value means to delete the entire section,
    while a dictionary lists settings to be changed or deleted in that section.
    A setting of ``None`` means to delete that setting.
    zReading configuration from %sNzDeleting section [%s] from %szAdding new section [%s] to %szDeleting %s.%s from %sz#Deleting empty [%s] section from %szSetting %s.%s to %r in %sz
Writing %sw)r   debugr   RawConfigParserreaditemsinforemove_sectionhas_sectionadd_sectionremove_optionoptionssetopenwrite)	filenamesettingsdry_runoptssectionr(   optionvaluefr   r   r   r   !   s8    



c               @   s2   e Zd ZdZdddgZddgZdd Zdd ZdS )r	   z<Abstract base class for commands that mess with config filesglobal-configg0save options to the site-wide distutils.cfg fileuser-configu7save options to the current user's pydistutils.cfg file	filename=r3   -configuration file to use (default=setup.cfg)c             C   s   d | _ d | _d | _d S )N)global_configuser_configr,   )selfr   r   r   initialize_options\   s    zoption_base.initialize_optionsc             C   sv   g }| j r|jtd | jr,|jtd | jd k	rB|j| j |sT|jtd t|dkrjtd||\| _d S )Nr   r   r      z/Must specify only one configuration file option)r<   appendr   r=   r,   lenr   )r>   	filenamesr   r   r   finalize_optionsa   s    
zoption_base.finalize_optionsN)r4   r5   r6   )r7   r8   r9   )r:   r3   r;   )__name__
__module____qualname____doc__user_optionsboolean_optionsr?   rD   r   r   r   r   r	   L   s      c               @   sJ   e Zd ZdZdZddddgej Zejdg Zdd Zdd Z	dd Z
dS )r
   z#Save command-line options to a filez1set an option in setup.cfg or another config filecommand=ccommand to set an option foroption=ooption to set
set-value=svalue of the optionremoverremove (unset) the valuec             C   s&   t j|  d | _d | _d | _d | _d S )N)r	   r?   commandr1   	set_valuerT   )r>   r   r   r   r?      s
    
zsetopt.initialize_optionsc             C   sD   t j|  | jd ks| jd kr&td| jd kr@| j r@tdd S )Nz%Must specify --command *and* --optionz$Must specify --set-value or --remove)r	   rD   rW   r1   r   rX   rT   )r>   r   r   r   rD      s
    
zsetopt.finalize_optionsc             C   s*   t | j| j| jjdd| jii| j d S )N-_)r   r,   rW   r1   replacerX   r.   )r>   r   r   r   run   s    z
setopt.runN)rK   rL   rM   )rN   rO   rP   )rQ   rR   rS   )rT   rU   rV   )rE   rF   rG   rH   descriptionr	   rI   rJ   r?   rD   r\   r   r   r   r   r
   s   s   )r   )F)distutils.utilr   r   r   Zdistutils.errorsr   r   Zsetuptools.extern.six.movesr   
setuptoolsr   __all__r   r   r	   r
   r   r   r   r   <module>   s   

+'