B
    `                 @   s   d Z ddlZddlZddlZddlmZ ddlmZmZ ddl	m
Z
mZ yddlZW n ek
rl   dZY nX G dd deZG dd	 d	ZdS )
z*TOML configuration support for coverage.py    N)env)configparser
path_types)CoverageExceptionsubstitute_variablesc               @   s   e Zd ZdZdS )TomlDecodeErrorz>An exception class that exists even when toml isn't installed.N)__name__
__module____qualname____doc__ r   r   [/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/coverage/tomlconfig.pyr      s   r   c               @   s   e Zd Z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 Zdd Zdd Zdd Zdd Zdd Zdd Zd S )!TomlConfigParserz:TOML file reading with the interface of HandyConfigParser.c             C   s   || _ d | _d S )N)our_filedata)selfr   r   r   r   __init__!   s    zTomlConfigParser.__init__c          
   C   s   t |tst|}tjdkr&t|}y&tj|dd}|	 }W d Q R X W n t
k
r`   g S X trt|tj}yt|| _W n. tjk
r } zt|j W d d }~X Y nX |gS tjd|tjd}| js|rd}t||g S d S )N)      zutf-8)encodingz^\[tool\.coverage\.)flagsz?Can't read {!r} without TOML support. Install with [toml] extra)
isinstancer   AssertionErrorr   Z	PYVERSIONosfspathioopenreadIOErrortomlr   environloadsr   r   argsresearch	MULTILINEr   r   format)r   	filenamesfilenamefpZ	toml_texterrZhas_tomlmsgr   r   r   r   %   s*    


zTomlConfigParser.readc          	   C   s   dg}| j r|d xl|D ]`}|| }|d}y0| j|d  }x|dd D ]}|| }qPW W n tk
rx   wY nX P qW dS ||fS )aC  Get a section from the data.

        Arguments:
            section (str): A section name, which can be dotted.

        Returns:
            name (str): the actual name of the section that was found, if any,
                or None.
            data (str): the dict of data in the section, or None if not found.

        ztool.coverage. .r      N)NN)r   appendsplitr   KeyError)r   sectionprefixesprefixZreal_sectionpartsr   partr   r   r   _get_sectionA   s    


zTomlConfigParser._get_sectionc             C   sR   |  |\}}|dkr t|y||| fS  tk
rL   t||Y nX dS )z;Like .get, but returns the real section name and the value.N)r7   r   NoSectionErrorr1   NoOptionError)r   r2   optionnamer   r   r   r   _get^   s    
zTomlConfigParser._getc             C   s"   |  |\}}|d krdS ||kS )NF)r7   )r   r2   r:   _r   r   r   r   
has_optionh   s    zTomlConfigParser.has_optionc             C   s   |  |\}}|S )N)r7   )r   r2   r;   r=   r   r   r   has_sectionn   s    zTomlConfigParser.has_sectionc             C   s,   |  |\}}|d kr t|t| S )N)r7   r   r8   listkeys)r   r2   r=   r   r   r   r   optionsr   s    
zTomlConfigParser.optionsc             C   s   |  |\}}|S )N)r7   )r   r2   r=   r   r   r   r   get_sectionx   s    zTomlConfigParser.get_sectionc             C   s   |  ||\}}|S )N)r<   )r   r2   r:   r=   valuer   r   r   get|   s    zTomlConfigParser.getc             C   s"   t ||std||||d S )Nz+Option {!r} in section {!r} is not {}: {!r})r   
ValueErrorr&   )r   r2   r:   rD   type_Z	type_descr   r   r   _check_type   s    
zTomlConfigParser._check_typec             C   s&   |  ||\}}| |||td |S )Nz	a boolean)r<   rH   bool)r   r2   r:   r;   rD   r   r   r   
getboolean   s    zTomlConfigParser.getbooleanc             C   s&   |  ||\}}| |||td |S )Nza list)r<   rH   r@   )r   r2   r:   r;   valuesr   r   r   getlist   s    zTomlConfigParser.getlistc             C   s   |  ||\}}| |||td x\|D ]T}| }yt| W q( tjk
rz } ztd||||f W d d }~X Y q(X q(W |S )Nza listzInvalid [%s].%s value %r: %s)r<   rH   r@   stripr#   compileerrorr   )r   r2   r:   r;   rK   rD   er   r   r   getregexlist   s    
(zTomlConfigParser.getregexlistc             C   s&   |  ||\}}| |||td |S )Nz
an integer)r<   rH   int)r   r2   r:   r;   rD   r   r   r   getint   s    zTomlConfigParser.getintc             C   s8   |  ||\}}t|tr"t|}| |||td |S )Nza float)r<   r   rR   floatrH   )r   r2   r:   r;   rD   r   r   r   getfloat   s
    
zTomlConfigParser.getfloatN)r   r	   r
   r   r   r   r7   r<   r>   r?   rB   rC   rE   rH   rJ   rL   rQ   rS   rU   r   r   r   r   r      s    
r   )r   r   r   r#   Zcoverager   Zcoverage.backwardr   r   Zcoverage.miscr   r   r   ImportError	Exceptionr   r   r   r   r   r   <module>   s   
