
    /~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mZ dd	lmZmZ  ee      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isolate_module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__     \/var/www/peopleoo.sandbox-dev.co.uk/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   r0   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_sectionH   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: )rL   r	   rE   )r$   rF   optionnamer#   values         r   _getzTomlConfigParser._getc   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.
        )rR   r)   r+   r   r,   environr$   rF   rO   rP   rQ   s        r   _get_singlezTomlConfigParser._get_singleo   s<     ii0eeS!(

;EU{r   c                8    | j                  |      \  }}|y||v S )NFrL   )r$   rF   rO   _r#   s        r   
has_optionzTomlConfigParser.has_optionz   s(    ##G,4<~r   c                .    | j                  |      \  }}|S r!   rX   r$   rF   rP   rY   s       r   rI   zTomlConfigParser.real_section   s    ##G,ar   c                @    | j                  |      \  }}t        |      S r!   )rL   boolr\   s       r   has_sectionzTomlConfigParser.has_section   s     ##G,aDzr   c                |    | j                  |      \  }}|t        d|      t        |j                               S )NrN   )rL   r	   listkeysr$   rF   rY   r#   s       r   optionszTomlConfigParser.options   s>    ##G,4<WK899DIIK  r   c                6    | j                  |      \  }}|xs i S r!   rX   rc   s       r   get_sectionzTomlConfigParser.get_section   s     ##G,4zrr   c                0    | j                  ||      \  }}|S r!   )rV   )r$   rF   rO   rY   rQ   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$   rF   rO   rQ   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)rV   rr   r^   __getitem__)r$   rF   rO   rP   rQ   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)rR   rr   ra   r   r,   rT   )r$   rF   rO   rP   valuesrQ   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!   )r{   )r$   rF   rO   rY   rz   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 rk   )r{   stripr6   compileerrorr	   )r$   rF   rO   rP   rz   rQ   rq   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)rV   rr   intrU   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)rV   r)   r   floatrr   rU   s        r   getfloatzTomlConfigParser.getfloat   sF    &&w7eeS!%LEfeUE9MMr   N)r"   r^   returnNone)r:   zIterable[str]r   	list[str])rF   r+   r   z+tuple[str | None, TConfigSectionOut | None])rF   r+   rO   r+   r   ztuple[str, TConfigValueOut])rF   r+   rO   r+   r   r   )rF   r+   rO   r+   r   r^   )rF   r+   r   z
str | None)rF   r+   r   r^   )rF   r+   r   r   )rF   r+   r   r   )rF   r+   rO   r+   rQ   r   rn   ztype[TWant]ro   zCallable[[Any], TWant] | Nonerp   r+   r   r   )rF   r+   rO   r+   r   ztuple[str, list[str]])rF   r+   rO   r+   r   r   )rF   r+   rO   r+   r   r   )rF   r+   rO   r+   r   r   )r   r   r   r   r%   r0   rL   rR   rV   rZ   rI   r_   rd   rf   rh   rr   rx   r{   r}   r   r   r   r   r   r   r   r   $   s    D'2"6
	!

 
 	

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