
    x8'h                        d Z ddlmZ ddlZddlZddlmZmZmZ ddl	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\  rddlZdZn ed      \  ZZ G d de      Z ed      Z G d d      Zy)z*TOML configuration support for coverage.py    )annotationsN)AnyCallableTypeVar)Iterable)env)ConfigError)import_third_partysubstitute_variables)TConfigSectionOutTConfigValueOut)      r   alpha   Ttomlic                      e Zd ZdZy)TomlDecodeErrorz>An exception class that exists even when toml isn't installed.N)__name__
__module____qualname____doc__     O/var/www/html/trade_iq/venv/lib/python3.12/site-packages/coverage/tomlconfig.pyr   r      s    Hr   r   TWantc                      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!dZd"dZd#dZy)$TomlConfigParserz:TOML file reading with the interface of HandyConfigParser.c                     || _         i | _        y N)our_filedata)selfr!   s     r   __init__zTomlConfigParser.__init__*   s     $&	r   c                N   t        |t        t        t        j                  f      sJ t        j
                  |      }	 t        |d      5 }|j                         }d d d        t        r	 t        j                        | _        |gS t        j                   dt        j"                        }| j$                  s|rd}t'        |j)                  |            g S # 1 sw Y   xY w# t        $ r g cY S w xY w# t        j                  $ r}t        t        |            |d }~ww xY w)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#   	filenamesfilenamefp	toml_texterrhas_tomlmsgs           r   r/   zTomlConfigParser.read.   s     )eS"++%>???99Y'	h1 &RGGI	& 9#MM)4	 :yy!;Ybll[H}}W!#**X"677I!& & 	I	
 ** 9%c#h/S89sA   C& CC& +C7 C#C& &C43C47D$
DD$c                    dg}|D ]?  }||z   }|j                  d      }	 | j                  |d      }|dd D ]  }||   }	 	  ||fS  y# t        $ r Y Nw xY w)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#   sectionprefixesprefixreal_sectionpartsr"   parts           r   _get_sectionzTomlConfigParser._get_sectionG   s     %% 	F!G+L &&s+Eyyq*!!"I &D:D&  T!!	 	  s   !A			AAc                    | j                  |      \  }}|t        d|      |J 	 ||   }||fS # t        $ r t        d|d|      dw xY w)z;Like .get, but returns the real section name and the value.NNo section: z
No option z in section: )rK   r	   rD   )r#   rE   optionnamer"   values         r   _getzTomlConfigParser._getb   s    &&w/
d<WK899	VLE U{  	V
6*M$JKQUU	Vs	   3 Ac                    | j                  ||      \  }}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.
        )rQ   r(   r*   r   r+   environr#   rE   rN   rO   rP   s        r   _get_singlezTomlConfigParser._get_singlen   s<     ii0eeS!(

;EU{r   c                8    | j                  |      \  }}|y||v S )NFrK   )r#   rE   rN   _r"   s        r   
has_optionzTomlConfigParser.has_optiony   s(    ##G,4<~r   c                .    | j                  |      \  }}|S r    rW   r#   rE   rO   rX   s       r   rH   zTomlConfigParser.real_section   s    ##G,ar   c                @    | j                  |      \  }}t        |      S r    )rK   boolr[   s       r   has_sectionzTomlConfigParser.has_section   s     ##G,aDzr   c                |    | j                  |      \  }}|t        d|      t        |j                               S )NrM   )rK   r	   listkeysr#   rE   rX   r"   s       r   optionszTomlConfigParser.options   s>    ##G,4<WK899DIIK  r   c                6    | j                  |      \  }}|xs i S r    rW   rb   s       r   get_sectionzTomlConfigParser.get_section   s     ##G,4zrr   c                0    | j                  ||      \  }}|S r    )rU   )r#   rE   rN   rX   rP   s        r   getzTomlConfigParser.get   s    ##GV45r   c                    t        ||      r|S t        |t              r|		  ||      S t        d| d| d| d|      # t        $ r}t        d| d| d| d|      |d}~ww xY w)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#   rE   rN   rP   type_	converter	type_desces           r   _check_typezTomlConfigParser._check_type   s     eU#LeS!i&; ''
 wiq2eYG
 	
	   wiq0Ei[PRSXR[\s   A 	A'
A""A'c                ~    | j                  ||      \  }}ddd}| j                  |||t        |j                  d      S )NTF)truefalsez	a boolean)rU   rq   r]   __getitem__)r#   rE   rN   rO   rP   bool_stringss         r   
getbooleanzTomlConfigParser.getboolean   sD    &&w7e $u5feT<;S;SU`aar   c                    | j                  ||      \  }}| j                  |||t        dd      }|D cg c]  }t        |t        j
                         }}||fS c c}w )zJGet a list of strings, substituting environment variables in the elements.Nza list)rQ   rq   r`   r   r+   rS   )r#   rE   rN   rO   valuesrP   s         r   	_get_listzTomlConfigParser._get_list   s_    yy&1f!!$dHMGMNe&ubjj9NNV| Os   !Ac                0    | j                  ||      \  }}|S r    )rz   )r#   rE   rN   rX   ry   s        r   getlistzTomlConfigParser.getlist   s    NN7F3	6r   c                    | j                  ||      \  }}|D ](  }|j                         }	 t        j                  |       * |S # t        j                  $ r}t        d| d| d|d|       |d }~ww xY w)Nz	Invalid [z].z value rj   )rz   stripr5   compileerrorr	   )r#   rE   rN   rO   ry   rP   rp   s          r   getregexlistzTomlConfigParser.getregexlist   s    ~~gv6f 	\EKKME\

5!	\  88 \!IdV2fXWUIRPQs"STZ[[\s   AA5A00A5c                h    | j                  ||      \  }}| j                  |||t        t        d      S )Nz
an integer)rU   rq   intrT   s        r   getintzTomlConfigParser.getint   s3    &&w7efeS#|LLr   c                    | j                  ||      \  }}t        |t              rt        |      }| j	                  |||t        t        d      S )Nza float)rU   r(   r   floatrq   rT   s        r   getfloatzTomlConfigParser.getfloat   sF    &&w7eeS!%LEfeUE9MMr   N)r!   r]   returnNone)r9   zIterable[str]r   	list[str])rE   r*   r   z+tuple[str | None, TConfigSectionOut | None])rE   r*   rN   r*   r   ztuple[str, TConfigValueOut])rE   r*   rN   r*   r   r   )rE   r*   rN   r*   r   r]   )rE   r*   r   z
str | None)rE   r*   r   r]   )rE   r*   r   r   )rE   r*   r   r   )rE   r*   rN   r*   rP   r   rm   ztype[TWant]rn   zCallable[[Any], TWant] | Nonero   r*   r   r   )rE   r*   rN   r*   r   ztuple[str, list[str]])rE   r*   rN   r*   r   r   )rE   r*   rN   r*   r   r   )rE   r*   rN   r*   r   r   )r   r   r   r   r$   r/   rK   rQ   rU   rY   rH   r^   rc   re   rg   rq   rw   rz   r|   r   r   r   r   r   r   r   r   #   s    D'2"6
	!

 
 	

 
 1
 
 

4b
MNr   r   )r   
__future__r   r+   r5   typingr   r   r   collections.abcr   coverager   coverage.exceptionsr	   coverage.miscr
   r   coverage.typesr   r   	PYVERSIONr2   r1   rk   r   r   r   r   r   r   <module>r      sv    1 " 	 	 ) ) $  + B = ==**K .g6G[	i 	
 	nN nNr   