o
    g                     @  s   d Z ddlmZ ddlZddlZddlmZmZmZm	Z	m
Z
mZmZmZmZ ddlmZ ddlmZ ddlmZmZ ddlmZmZ ejd	krNddlZd
Zned\ZZG dd deZedZG dd dZdS )z*TOML configuration support for coverage.py    )annotationsN)	AnyCallableDictIterableListOptionalTupleTypeTypeVar)env)ConfigError)import_third_partysubstitute_variables)TConfigSectionOutTConfigValueOut)      r   alpha   Ttomlic                   @  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   S/var/www/html/bloggers_ems/venv/lib/python3.10/site-packages/coverage/tomlconfig.pyr      s    r   TWantc                   @  s   e Zd ZdZd@ddZdAddZdBddZdCddZdDddZdEddZ	dFddZ
dGddZdHd d!ZdId#d$ZdDd%d&ZdJd.d/ZdEd0d1ZdKd3d4ZdLd5d6ZdLd7d8ZdMd:d;ZdNd=d>Zd?S )OTomlConfigParserz:TOML file reading with the interface of HandyConfigParser.our_fileboolreturnNonec                 C  s   || _ i | _d S N)r    data)selfr    r   r   r   __init__)   s   
zTomlConfigParser.__init__	filenamesIterable[str]	List[str]c              
   C  s   t |tttjfsJ t|}zt|dd}| }W d    n1 s&w   Y  W n ty7   g  Y S w t	rYz
t
|| _W |gS  t
jyX } ztt||d }~ww tjd|tjd}| jsg|rpd}t||g S )Nzutf-8)encodingz^\[tool\.coverage(\.|]))flagsz?Can't read {!r} without TOML support. Install with [toml] extra)
isinstancebytesstrosPathLikefspathopenreadOSErrorhas_tomllibtomllibloadsr%   TOMLDecodeErrorr   research	MULTILINEr    r   format)r&   r(   filenamefp	toml_texterrhas_tomlmsgr   r   r   r4   -   s.   


zTomlConfigParser.readsectionr/   1Tuple[Optional[str], Optional[TConfigSectionOut]]c              	   C  sn   dg}|D ]/}|| }| d}z| j|d  }|dd D ]}|| }qW n	 ty/   Y qw  ||fS d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)splitr%   KeyError)r&   rD   prefixesprefixreal_sectionpartsr%   partr   r   r   _get_sectionF   s   

zTomlConfigParser._get_sectionoptionTuple[str, TConfigValueOut]c                 C  sh   |  |\}}|du rtd||dusJ z	|| }W ||fS  ty3   td|d|dw )z;Like .get, but returns the real section name and the value.NNo section: z
No option z in section: )rO   r   rI   )r&   rD   rP   namer%   valuer   r   r   _geta   s   
zTomlConfigParser._getr   c                 C  s.   |  ||\}}t|trt|tj}||fS )zGet a single-valued option.

        Performs environment substitution if the value is a string. Other types
        will be converted later as needed.
        )rU   r-   r/   r   r0   environr&   rD   rP   rS   rT   r   r   r   _get_singlem   s   
zTomlConfigParser._get_singlec                 C  s"   |  |\}}|d u rdS ||v S )NFrO   )r&   rD   rP   _r%   r   r   r   
has_optionx   s   zTomlConfigParser.has_optionOptional[str]c                 C  s   |  |\}}|S r$   rY   r&   rD   rS   rZ   r   r   r   rL   ~   s   zTomlConfigParser.real_sectionc                 C  s   |  |\}}t|S r$   )rO   r!   r]   r   r   r   has_section      zTomlConfigParser.has_sectionc                 C  s0   |  |\}}|d u rtd|t| S )NrR   )rO   r   listkeysr&   rD   rZ   r%   r   r   r   options   s   zTomlConfigParser.optionsr   c                 C  s   |  |\}}|p
i S r$   rY   rb   r   r   r   get_section   r_   zTomlConfigParser.get_sectionc                 C     |  ||\}}|S r$   )rX   )r&   rD   rP   rZ   rT   r   r   r   get      zTomlConfigParser.getrT   type_Type[TWant]	converter Optional[Callable[[Any], TWant]]	type_descr   c                 C  s   t ||r|S t |tr3|dur3z||W S  ty2 } ztd| d| d| d||d}~ww td| d| d| d|)zCheck that `value` has the type we want, converting if needed.

        Returns the resulting value of the desired type.
        NzOption []z couldn't convert to : z is not )r-   r/   	Exception
ValueError)r&   rD   rP   rT   rh   rj   rl   er   r   r   _check_type   s    

zTomlConfigParser._check_typec                 C  s0   |  ||\}}ddd}| |||t|jdS )NTF)truefalsez	a boolean)rX   rr   r!   __getitem__)r&   rD   rP   rS   rT   bool_stringsr   r   r   
getboolean   s   
zTomlConfigParser.getbooleanTuple[str, List[str]]c                 C  s:   |  ||\}}| |||tdd}dd |D }||fS )zJGet a list of strings, substituting environment variables in the elements.Nza listc                 S  s   g | ]}t |tjqS r   )r   r0   rV   ).0rT   r   r   r   
<listcomp>   s    z.TomlConfigParser._get_list.<locals>.<listcomp>)rU   rr   r`   )r&   rD   rP   rS   valuesr   r   r   	_get_list   s   zTomlConfigParser._get_listc                 C  re   r$   )r|   )r&   rD   rP   rZ   r{   r   r   r   getlist   rg   zTomlConfigParser.getlistc                 C  sp   |  ||\}}|D ]+}| }zt| W q
 tjy5 } ztd| d| d|d| |d }~ww |S )Nz	Invalid [z].z value rn   )r|   stripr:   compileerrorr   )r&   rD   rP   rS   r{   rT   rq   r   r   r   getregexlist   s   "zTomlConfigParser.getregexlistintc                 C  s$   |  ||\}}| |||ttdS )Nz
an integer)rX   rr   r   rW   r   r   r   getint   s   zTomlConfigParser.getintfloatc                 C  s6   |  ||\}}t|trt|}| |||ttdS )Nza float)rX   r-   r   r   rr   rW   r   r   r   getfloat   s   
zTomlConfigParser.getfloatN)r    r!   r"   r#   )r(   r)   r"   r*   )rD   r/   r"   rE   )rD   r/   rP   r/   r"   rQ   )rD   r/   rP   r/   r"   r   )rD   r/   rP   r/   r"   r!   )rD   r/   r"   r\   )rD   r/   r"   r!   )rD   r/   r"   r*   )rD   r/   r"   r   )rD   r/   rP   r/   rT   r   rh   ri   rj   rk   rl   r/   r"   r   )rD   r/   rP   r/   r"   rx   )rD   r/   rP   r/   r"   r*   )rD   r/   rP   r/   r"   r   )rD   r/   rP   r/   r"   r   )r   r   r   r   r'   r4   rO   rU   rX   r[   rL   r^   rc   rd   rf   rr   rw   r|   r}   r   r   r   r   r   r   r   r   "   s(    

















r   ) r   
__future__r   r0   r:   typingr   r   r   r   r   r   r	   r
   r   coverager   coverage.exceptionsr   coverage.miscr   r   coverage.typesr   r   	PYVERSIONr7   r6   ro   r   r   r   r   r   r   r   <module>   s    ,
