o
    v&i                     @  s   d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	m
Z
 ddlmZmZ ddlmZ ddlmZmZmZ dd	lmZmZ eeZejd
krPd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)Iterable)AnyCallableTypeVar)configenv)ConfigError)import_third_partyisolate_module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   Y/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/coverage/tomlconfig.pyr      s    r   TWantc                   @  s   e Zd Z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dJd d!ZdKd#d$ZdFd%d&ZdLd.d/ZdGd0d1ZdMd2d3ZdNd5d6ZdOd7d8ZdOd9d:ZdPd<d=ZdQd?d@ZdAS )R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   r1   1   s.   


zTomlConfigParser.readsectionr,   +tuple[str | None, TConfigSectionOut | None]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#   rA   prefixesprefixreal_sectionpartsr"   partr   r   r   _get_sectionJ   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: )rL   r	   rF   )r#   rA   rM   namer"   valuer   r   r   _gete   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.
        )rR   r*   r,   r   r-   environr#   rA   rM   rP   rQ   r   r   r   _get_singleq   s   
zTomlConfigParser._get_singlec                 C  s"   |  |\}}|d u rdS ||v S )NFrL   )r#   rA   rM   _r"   r   r   r   
has_option|   s   zTomlConfigParser.has_option
str | Nonec                 C  s   |  |\}}|S r!   rV   r#   rA   rP   rW   r   r   r   rI      s   zTomlConfigParser.real_sectionc                 C  s   |  |\}}t|S r!   )rL   r   rZ   r   r   r   has_section      zTomlConfigParser.has_sectionc                 C  s0   |  |\}}|d u rtd|t| S )NrO   )rL   r	   listkeysr#   rA   rW   r"   r   r   r   options   s   zTomlConfigParser.optionsr   c                 C  s   |  |\}}|p
i S r!   rV   r_   r   r   r   get_section   r\   zTomlConfigParser.get_sectionc                 C     |  ||\}}|S r!   )rU   r#   rA   rM   rW   rQ   r   r   r   get      zTomlConfigParser.getrQ   type_type[TWant]	converterCallable[[Any], TWant] | None	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: z is not )r*   r,   	Exception
ValueError)r#   rA   rM   rQ   rf   rh   rj   er   r   r   _check_type   s    

zTomlConfigParser._check_typec                 C  s0   |  ||\}}ddd}| |||t|jdS )NTF)truefalsez	a boolean)rU   ro   r   __getitem__)r#   rA   rM   rP   rQ   bool_stringsr   r   r   
getboolean   s   
zTomlConfigParser.getbooleanc                 C  s   |  ||\}}t|S r!   )rU   r   process_file_valuerc   r   r   r   getfile   s   
zTomlConfigParser.getfile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   r-   rS   ).0rQ   r   r   r   
<listcomp>   s    z.TomlConfigParser._get_list.<locals>.<listcomp>)rR   ro   r]   r#   rA   rM   rP   valuesr   r   r   	_get_list   s   zTomlConfigParser._get_listc                 C  rb   r!   )r|   )r#   rA   rM   rW   r{   r   r   r   getlist   re   zTomlConfigParser.getlistc                 C  s   |  ||\}}t|||S r!   )r|   r   process_regexlistrz   r   r   r   getregexlist   s   zTomlConfigParser.getregexlistintc                 C  s$   |  ||\}}| |||ttdS )Nz
an integer)rU   ro   r   rT   r   r   r   getint   s   zTomlConfigParser.getintfloatc                 C  s6   |  ||\}}t|trt|}| |||ttdS )Nza float)rU   r*   r   r   ro   rT   r   r   r   getfloat   s   
zTomlConfigParser.getfloatN)r   r   r   r    )r%   r&   r   r'   )rA   r,   r   rB   )rA   r,   rM   r,   r   rN   )rA   r,   rM   r,   r   r   )rA   r,   rM   r,   r   r   )rA   r,   r   rY   )rA   r,   r   r   )rA   r,   r   r'   )rA   r,   r   r   )rA   r,   rM   r,   rQ   r   rf   rg   rh   ri   rj   r,   r   r   )rA   r,   rM   r,   r   r,   )rA   r,   rM   r,   r   rw   )rA   r,   rM   r,   r   r'   )rA   r,   rM   r,   r   r   )rA   r,   rM   r,   r   r   )r   r   r   r   r$   r1   rL   rR   rU   rX   rI   r[   r`   ra   rd   ro   rt   rv   r|   r}   r   r   r   r   r   r   r   r   &   s*    

















r   )r   
__future__r   r-   r7   collections.abcr   typingr   r   r   coverager   r   coverage.exceptionsr	   coverage.miscr
   r   r   coverage.typesr   r   	PYVERSIONr4   r3   rl   r   r   r   r   r   r   r   <module>   s$   
