
    O&i                        d Z ddlZddl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
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 ddlmZmZ dd	lmZmZ dd
lmZ ddlmZ ddl m!Z! g dZ"d+dede#de$ddfdZ%d+dede#de$ddfdZ&de#de#ddfdZ'd,dede
de#de
ddf
dZ(de#de
fdZ) G d d           Z* G d! d"ej+                  Z, G d# d$          Z- ej.        d%          Z/d-d&e#d'ee#         dee#ddf         fd(Z0de#de#fd)Z1d* Z2dS ).zSphinx test suite utilities    N)StringIO)IOAnyDict	GeneratorListOptionalPattern)ElementTree)nodes)Node)
directivesroles)applicationlocale)ModuleAnalyzerpath)relpath)StructSphinxTestApp#SphinxTestAppWrapperForSkipBuildingregextextflagsreturnc                 Z    t          j        | ||          st          | d|          d S )Nz did not match researchAssertionErrorr   r   r   s      `/home/geonatureadmin/si_en_reseau/tutos/venv/lib/python3.11/site-packages/sphinx/testing/util.pyassert_re_searchr$      s>    9UD%(( DeeeTTBCCCD D    c                 Z    t          j        | ||          rt          | d|          d S )Nz did match r   r"   s      r#   assert_not_re_searchr'      s>    	ye$$ @%%%>???@ @r%   thingprefixc                 X    |                      |          st          | d|          d S )Nz does not start with )
startswithr!   )r(   r)   s     r#   assert_startswithr,   #   s>    F## LEEE66JKKKL Lr%    nodeclsxpathkwargsc                    |rt          |t                    rt          | |d         fd|i| |dd          rt          |d         t                    rt          | |d         fd|i| nt          | t          j                  sJ d|z              t          |           dk    sJ d|t          |           fz              t          | d         |dd          fd|dz   i| nt          |t                    rt          | t          t          j        f          sJ d|z              t          |           t          |          k    s*J d|t          |           t          |          fz              t          |          D ]#\  }}|d	|z  z   }t          | |         |fd|i| $nRt          |t                    r| |k    sJ d
|d|d|             n#t          | |          sJ d|d|d|             |rt          | t          j                  sJ d|z              |	                                D ]F\  }}|| v sJ d|d|d|             | |         |k    sJ d|d|d|d| |                     Ed S d S )Nr   r0      z%The node%s does not have any childrenz&The node%s has %d child nodes, not onez[0]z"The node%s does not have any itemsz%The node%s has %d child nodes, not %rz[%d]z	The node z is not z: zThe nodez is not subclass of z'The node%s does not have any attributesz does not have z attribute: [z	] is not )

isinstancelistassert_nodetupler   Elementlen	enumeratestritems)	r.   r/   r0   r1   inodeclsr   keyvalues	            r#   r7   r7   (   sV   
 Lc4   	Lc!f<<E<V<<<122w Qc!fe,, Qc!fDDEDVDDDD%dEM:: H H?%GH H Ht99>>>@E3t99CUU *>>QQRRPPPPPPU## 	LdT5=$9:: = =4u<= = =t99C(((75#d))SQTXX:VV )(('nn D D
7vz)DGWCCDCFCCCCD S!! 	L3;;;;uuuccc44 P;;;;dC(( L L L:?%%ddKL L L  P$.. 	> 	>5=	> 	> 	> !,,.. 	P 	PJC$;;;;?Duuccc44P ;;9%%%%27%%eeeT#YYO &%%%P P	P 	Pr%   r   c                     t          j        d          5  t          j        dt                     t	          j        |           cd d d            S # 1 swxY w Y   d S )NF)recordignore)category)warningscatch_warningsfilterwarningsDeprecationWarningr   parser   s    r#   etree_parserK   N   s    		 	.	.	. ' '3EFFFF &&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   /AAAc                       e Zd ZdeddfdZdS )r   r1   r   Nc                 :    | j                             |           d S N)__dict__update)selfr1   s     r#   __init__zStruct.__init__U   s    V$$$$$r%   )__name__
__module____qualname__r   rR    r%   r#   r   r   T   s6        % % % % % % % %r%   r   c                        e Zd ZU dZeed<   eed<   	 	 	 	 	 	 	 	 	 	 dded	ee         d
ee         de	dee
         dee         dee         deee                  dee         deddf fdZdde	ddfdZdefdZ xZS )r   z
    A subclass of :class:`Sphinx` that runs on the test root, with some
    better default values for the initialization parameters.
    _status_warninghtmlNFr   buildernamesrcdirbuilddirfreshenvconfoverridesstatuswarningtagsdocutilsconfparallelr   c                    |	|dz                       |	           ||dz  }|}|                    |          }|                    d           |                    d          }|                    d           |i }d}t          j        d d          | _        t          j                                        | _	        t          j                                        | _        d t          t          j                  D             | _        	 t#                                          ||||||||||||
           d S # t&          $ r |                                   w xY w)	Nzdocutils.conf_buildT)exist_okdoctreesFc                 <    h | ]}|                     d           |S )visit_)r+   ).0vs     r#   	<setcomp>z)SphinxTestApp.__init__.<locals>.<setcomp>   s8     #> #> #>&'ll8&<&<#>1 #> #> #>r%   )rd   )
write_textjoinpathmakedirssysr   _saved_pathr   _directivescopy_saved_directivesr   _roles_saved_rolesdirr   GenericNodeVisitor_saved_nodeclassessuperrR   	Exceptioncleanup)rQ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   confdiroutdir
doctreedirwarningiserror	__class__s                  r#   rR   zSphinxTestApp.__init__a   s    #o%11,???(H"";//&&&&&z22
T*** M8AAA;!+!7!<!<!>!>!L--//#> #>c%2J.K.K #> #> #>	GGVWfj(-%~th  P P P P P  	 	 	LLNNN	s   	-D8 8 Erh   c                 6   t           j                                         t          j                                         | j        t          j        d d <   t          j        	                    dd            | j
        t          _        | j        t          _        t!          t"          j                  D ]j}|                    d          rS|| j        vrJt+          t"          j        d|dd          z              t+          t"          j        d|dd          z              kd S )Nautodoc_fodderrj      depart_)r   cacheclearr   translatorsrr   rq   r   modulespopru   r   rs   rw   r   rv   rx   r   ry   r+   rz   delattr)rQ   rh   methods      r#   r}   zSphinxTestApp.cleanup   s    ""$$$  """&($///!%!7
(%233 	J 	JF  ** JT4440(VABBZ2GHHH0)fQRRj2HIII		J 	Jr%   c                 <    d| j         j        d| j        j        dS )N<z buildername=>)r   rS   buildername)rQ   s    r#   __repr__zSphinxTestApp.__repr__   s%     (,(?(?(?ARARARSSr%   )
rZ   NNFNNNNNr   )F)rS   rT   rU   __doc__r   __annotations__r<   r	   r   boolr   r   r   intrR   r}   r   __classcell__)r   s   @r#   r   r   Y   sh           "!%#'(,# $$(&** ** * 4.	*
 *  ~* * "* tCy!* sm* * 
* * * * * *XJ J J J J J JT# T T T T T T T Tr%   r   c                   F    e Zd ZdZdeddfdZdedefdZded	eddfd
Z	dS )r   z
    This class is a wrapper for SphinxTestApp to speed up the test by skipping
    `app.build` process if it is already built and there is even one output
    file.
    app_r   Nc                     || _         d S rN   )app)rQ   r   s     r#   rR   z,SphinxTestAppWrapperForSkipBuilding.__init__   s    r%   r   c                 ,    t          | j        |          S rN   )getattrr   )rQ   r   s     r#   __getattr__z/SphinxTestAppWrapperForSkipBuilding.__getattr__   s    tx&&&r%   argsr1   c                 j    | j         j                                        s | j         j        |i | d S d S rN   )r   r   listdirbuild)rQ   r   r1   s      r#   r   z)SphinxTestAppWrapperForSkipBuilding.build   sC    x&&(( 	,DHND+F+++++	, 	,r%   )
rS   rT   rU   r   r   rR   r<   r   r   r   rV   r%   r#   r   r      s         ] t    ' ' ' ' ' ',3 ,# ,$ , , , , , ,r%   r   zu(".*?")|u(\'.*?\')rootsuffixc              #      K   t          j        | d          D ]=\  }}}t          |          }fd|D             D ]}||z  }t          ||           V  >d S )NT)followlinksc                 B    g | ]}r|                               |S rV   )endswith)rk   fr   s     r#   
<listcomp>zfind_files.<locals>.<listcomp>   s/    GGG&GAJJv4F4FG!GGGr%   )oswalkr   r   )r   r   dirpath_dirsfilesr   fpaths    `     r#   
find_filesr      s      !#4!@!@!@ ' 'w--GGGGUGGG 	' 	'AaKE%&&&&&&	'' 'r%   c                 .    t          j        dd|           S )Nz.*?mr-   )r   sub)r   s    r#   strip_escseqr      s    6*b$'''r%   c                 F     t          j                    fd            }|S )zA
    A simple decorator that does nothing, for tests to use.
    c                       | i |S rN   rV   )r   r1   r   s     r#   wrapperz!simple_decorator.<locals>.wrapper   s    q$!&!!!r%   )	functoolswraps)r   r   s   ` r#   simple_decoratorr      s8     _Q" " " " "Nr%   )r   )Nr-   rN   )3r   r   r   r   rq   rF   ior   typingr   r   r   r   r   r	   r
   	xml.etreer   docutilsr   docutils.nodesr   docutils.parsers.rstr   r   sphinxr   r   sphinx.pycoder   sphinx.testing.pathr   sphinx.util.osutilr   __all__r<   r   r$   r'   r,   r7   rK   r   Sphinxr   r   compile_unicode_literals_rer   r   r   rV   r%   r#   <module>r      sb   ! !     				 				 



        D D D D D D D D D D D D D D D D D D ! ! ! ! ! !             2 2 2 2 2 2 2 2 & & & & & & & & ( ( ( ( ( ( $ $ $ $ $ $ & & & & & &  
D DG D3 Ds D4 D D D D
@ @ @s @3 @t @ @ @ @
LS L# L$ L L L L
#P #Pd #P #PC #P #PPT #P #P #P #PL'c 'c ' ' ' '% % % % % % % %
BT BT BT BT BTK& BT BT BTJ, , , , , , , ,( "rz"899 ' 'S '(3- '9S$PT_;U ' ' ' '(s (s ( ( ( (    r%   