
    ~TiB6                       d 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 ddlmZmZ ddlmZ dd	lmZ dd
lmZ erXddlmZmZmZmZ ddlmZ ddlmZmZ ddlm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4  ejj                  e6      Z7 G d de	      Z8i dddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d,d.d,d/d0d1d2d3d4d5d6d7d8Z9 G d9 d:      Z:y;)<zLSphinx core events.

Gracefully adapted from the TextPress system by Armin.
    )annotations)defaultdict)
attrgetter)TYPE_CHECKING
NamedTupleoverload)_deprecation_warning)ExtensionErrorSphinxError)__)logging)safe_getattr)CallableIterableSequenceSet)Path)AnyLiteral)nodes)addnodes)Sphinx)Builder)Config)Domain)BuildEnvironment)&_AutodocBeforeProcessSignatureListener_AutodocProcessBasesListener _AutodocProcessDocstringListener _AutodocProcessSignatureListener_AutodocSkipMemberListener)	todo_nodec                  ,    e Zd ZU ded<   ded<   ded<   y)EventListenerintidCallable[..., Any]handlerpriorityN)__name__
__module____qualname____annotations__     @/home/agent/.local/lib/python3.12/site-packages/sphinx/events.pyr$   r$   ,   s    GMr/   r$   zconfig-initedconfigzbuilder-inited zenv-get-outdatedzenv, added, changed, removedzenv-before-read-docszenv, docnameszenv-purge-doczenv, docnamezsource-readzdocname, source textzinclude-readz*relative path, parent docname, source textzdoctree-readz the doctree before being pickledzenv-merge-infoz&env, read docnames, other env instancezenv-updatedenvzenv-get-updatedzenv-check-consistencyzwrite-startedbuilderzdoctree-resolvedzdoctree, docnamezmissing-referencezenv, node, contnodezwarn-missing-referencezdomain, nodezbuild-finished	exceptionc                  v   e Zd ZdZd*dZd+dZed,d       Ze	 	 	 	 	 	 	 	 d-d       Z	e	 	 	 	 	 	 	 	 d.d       Z	e	 	 	 	 	 	 	 	 d/d       Z	e	 	 	 	 	 	 	 	 d0d       Z	e	 	 	 	 	 	 	 	 d1d	       Z	e	 	 	 	 	 	 	 	 d2d
       Z	e	 	 	 	 	 	 	 	 d3d       Z	e	 	 	 	 	 	 	 	 d4d       Z	e	 	 	 	 	 	 	 	 d5d       Z	e	 	 	 	 	 	 	 	 d6d       Z	e	 	 	 	 	 	 	 	 d7d       Z	e	 	 	 	 	 	 	 	 d8d       Z	e	 	 	 	 	 	 	 	 d9d       Z	e	 	 	 	 	 	 	 	 d:d       Z	e	 	 	 	 	 	 	 	 d;d       Z	e	 	 	 	 	 	 	 	 d<d       Z	e	 	 	 	 	 	 	 	 d=d       Z	e	 	 	 	 	 	 	 	 d>d       Z	e	 	 	 	 	 	 	 	 d?d       Z	e	 	 	 	 	 	 	 	 d@d       Z	e	 	 	 	 	 	 	 	 dAd       Z	e	 	 	 	 	 	 	 	 dBd       Z	e	 	 	 	 	 	 	 	 dCd       Z	e	 	 	 	 	 	 	 	 dDd       Z	e	 	 	 	 	 	 	 	 dEd       Z	e	 	 	 	 	 	 	 	 dFd       Z	e	 	 	 	 	 	 	 	 dGd       Z	e	 	 	 	 	 	 	 	 dHd        Z	e	 	 	 	 	 	 	 	 dId!       Z	e	 	 	 	 	 	 	 	 dJd"       Z	dJd#Z	dKd$Z
d%d&	 	 	 	 	 	 	 dLd'Zd%d&	 	 	 	 	 	 	 dMd(Zy))NEventManagerzEvent manager for Sphinx.c                    || _         t        j                         | _        t	        t
              | _        d| _        |j                  | _	        y )Nr   )
_appcore_eventscopyeventsr   list	listenersnext_listener_idpdb_reraise_errors)selfapps     r0   __init__zEventManager.__init__K   s;    	!&&(9DT9J ! &)WWr/   c                p    || j                   v rt        d      }t        ||z        d| j                   |<   y)zRegister a custom Sphinx event called *name*.

        This is needed to be able to emit the event.

        :param name: The name of the event.
        zEvent %r already presentr2   N)r<   r   r
   )rB   namemsgs      r0   addzEventManager.addT   s8     4;;/0C t,,Dr/   c                >    t        t        dd       | j                  S )NzEventManager.app)   r   )remove)r	   r*   r9   )rB   s    r0   rC   zEventManager.app`   s    X'9'Jyyr/   c                     y Nr.   rB   rF   callbackr)   s       r0   connectzEventManager.connectg        r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connecto   rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connectw        r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect   rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect   rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect   rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect   rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect   rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect   rT   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect   rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect   rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect   rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect   rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect   rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect        r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect   rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect   rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect   rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect   rT   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect
  rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect  rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect  rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect&  rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect.  rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect6  rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connect>  rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connectF  rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connectN  ra   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connectY  rQ   r/   c                     y rM   r.   rN   s       r0   rP   zEventManager.connectc  rQ   r/   c                    || j                   vrt        d      }t        ||z        | j                  }| xj                  dz  c_        | j                  |   j                  t        |||             |S )a  Connect a handler to specific event.

        Register *callback* to be called when the *name* event is emitted.

        See :ref:`event callbacks <events>` for details on available core events
        and the arguments of their corresponding callback functions.

        :param name:
            The name of the target event.
        :param callback:
            Callback function for the event.
        :param priority:
            The priority of the callback.
            The callbacks will be invoked in ascending order of *priority*.
        :return:
            A listener ID, for use with the :meth:`disconnect` method.

        .. versionchanged:: 3.0

           Support *priority*
        zUnknown event name: %s   )r<   r   r
   r?   r>   appendr$   )rB   rF   rO   r)   rG   listener_ids         r0   rP   zEventManager.connectk  sl    , t{{"-.C t,,++"t##M+x$RSr/   c                    | j                   j                         D ]8  }|j                         D ]#  }|j                  |k(  s|j	                  |       % : y)zDisconnect the handler given by *listener_id*.

        :param listener_id:
            A listener_id previously returned by :meth:`connect`.
        N)r>   valuesr;   r&   rK   )rB   rt   r>   listeners       r0   
disconnectzEventManager.disconnect  sP     ..0 	/I%NN, /;;+-$$X./	/r/   r.   )allowed_exceptionsc                  	 t        |      }t        j                  d||       g }t	        | j
                  |   t        d            }|D ]/  }	 |j                   |j                  | j                  g|        1 |S # t        $ r Y fw xY w# |$ r  t        $ r  t        $ rR}| j                  r t        |j                  dd      }	t        d      }
t        |
|j                  |fz  ||	      |d}~ww xY w)af  Emit a Sphinx event.

        This emits the *name* event and passes *args* to the handler functions.
        Return the return values of all handlers as a list.
        Do not emit core Sphinx events in extensions!

        :param name:
            The name of the event that will be emitted.
        :param args:
            The arguments for the event, to be passed to the handler functions.
        :param allowed_exceptions:
            The list of exceptions that are allowed in the handlers.

        .. versionchanged:: 3.1

           Added *allowed_exceptions* to specify path-through exceptions
        z[app] emitting event: %r%sr)   )keyr+   Nz*Handler %r for event %r threw an exception)modname)reprloggerdebug	Exceptionsortedr>   r   rs   r(   r9   r   rA   r   r   r
   )rB   rF   ry   args	repr_argsresultsr>   rw   excr|   rG   s              r0   emitzEventManager.emit  s   2	HT
I LL5tYG4>>$/Z
5KL	! 	H/x//		ADAB	$ 3  		 &   	''&x'7'7tLEF$8++T22# 		s*   A? ,B?	B
BC7%AC22C7c               F     | j                   |g|d|iD ]  }||c S  y)a]  Emit a Sphinx event and return the first result.

        This emits the *name* event and passes *args* to the handler functions.
        The first non-None result is returned.

        :param name:
            The name of the event that will be emitted.
        :param args:
            The arguments for the event, to be passed to the handler functions.
        :param allowed_exceptions:
            The list of exceptions that are allowed in the handlers.

        .. versionadded:: 0.5
        .. versionchanged:: 3.1

           Added *allowed_exceptions* to specify path-through exceptions
        ry   N)r   )rB   rF   ry   r   results        r0   emit_firstresultzEventManager.emit_firstresult  s9    .  diiStS@RS 	F!	 r/   N)rC   r   returnNone)rF   strr   r   )r   r   )rF   zLiteral['config-inited']rO   z Callable[[Sphinx, Config], None]r)   r%   r   r%   )rF   zLiteral['builder-inited']rO   zCallable[[Sphinx], None]r)   r%   r   r%   )rF   zLiteral['env-get-outdated']rO   zQCallable[[Sphinx, BuildEnvironment, Set[str], Set[str], Set[str]], Sequence[str]]r)   r%   r   r%   )rF   zLiteral['env-before-read-docs']rO   z5Callable[[Sphinx, BuildEnvironment, list[str]], None]r)   r%   r   r%   )rF   zLiteral['env-purge-doc']rO   z/Callable[[Sphinx, BuildEnvironment, str], None]r)   r%   r   r%   )rF   zLiteral['source-read']rO   z(Callable[[Sphinx, str, list[str]], None]r)   r%   r   r%   )rF   zLiteral['include-read']rO   z.Callable[[Sphinx, Path, str, list[str]], None]r)   r%   r   r%   )rF   zLiteral['doctree-read']rO   z(Callable[[Sphinx, nodes.document], None]r)   r%   r   r%   )rF   zLiteral['env-merge-info']rO   zFCallable[[Sphinx, BuildEnvironment, Set[str], BuildEnvironment], None]r)   r%   r   r%   )rF   zLiteral['env-updated']rO   z)Callable[[Sphinx, BuildEnvironment], str]r)   r%   r   r%   )rF   zLiteral['env-get-updated']rO   z3Callable[[Sphinx, BuildEnvironment], Iterable[str]]r)   r%   r   r%   )rF   z Literal['env-check-consistency']rO   z*Callable[[Sphinx, BuildEnvironment], None]r)   r%   r   r%   )rF   zLiteral['write-started']rO   z!Callable[[Sphinx, Builder], None]r)   r%   r   r%   )rF   zLiteral['doctree-resolved']rO   z-Callable[[Sphinx, nodes.document, str], None]r)   r%   r   r%   )rF   zLiteral['missing-reference']rO   zfCallable[[Sphinx, BuildEnvironment, addnodes.pending_xref, nodes.TextElement], nodes.reference | None]r)   r%   r   r%   )rF   z!Literal['warn-missing-reference']rO   z>Callable[[Sphinx, Domain, addnodes.pending_xref], bool | None]r)   r%   r   r%   )rF   zLiteral['build-finished']rO   z*Callable[[Sphinx, Exception | None], None]r)   r%   r   r%   )rF   zLiteral['html-collect-pages']rO   z=Callable[[Sphinx], Iterable[tuple[str, dict[str, Any], str]]]r)   r%   r   r%   )rF   zLiteral['html-page-context']rO   zHCallable[[Sphinx, str, str, dict[str, Any], nodes.document], str | None]r)   r%   r   r%   )rF   z Literal['linkcheck-process-uri']rO   z#Callable[[Sphinx, str], str | None]r)   r%   r   r%   )rF   z'Literal['object-description-transform']rO   z9Callable[[Sphinx, str, str, addnodes.desc_content], None]r)   r%   r   r%   )rF   z$Literal['autodoc-process-docstring']rO   r   r)   r%   r   r%   )rF   z+Literal['autodoc-before-process-signature']rO   r   r)   r%   r   r%   )rF   z$Literal['autodoc-process-signature']rO   r    r)   r%   r   r%   )rF   z Literal['autodoc-process-bases']rO   r   r)   r%   r   r%   )rF   zLiteral['autodoc-skip-member']rO   r!   r)   r%   r   r%   )rF   zLiteral['todo-defined']rO   z#Callable[[Sphinx, todo_node], None]r)   r%   r   r%   )rF   zLiteral['viewcode-find-source']rO   zaCallable[[Sphinx, str], tuple[str, dict[str, tuple[Literal['class', 'def', 'other'], int, int]]]]r)   r%   r   r%   )rF   z#Literal['viewcode-follow-imported']rO   z(Callable[[Sphinx, str, str], str | None]r)   r%   r   r%   )rF   r   rO   r'   r)   r%   r   r%   )rt   r%   r   r   )rF   r   r   r   ry   tuple[type[Exception], ...]r   z	list[Any])rF   r   r   r   ry   r   r   r   )r*   r+   r,   __doc__rD   rH   propertyrC   r   rP   rx   r   r   r.   r/   r0   r7   r7   H   sb   #-
   & 3 	
 
  ' + 	
 
  )
  
  - H 	
 
  & B 	
 
  $ ; 	
 
  % A 	
 
  % ; 	
 
  '
  
  $ < 	
 
  ( F 	
 
  . = 	
 
  & 4 	
 
  ) @ 	
 
  *
  
  / Q 	
 
  ' = 	
 
  + P 	
 
  *
  
  . 6 	
 
  5 L 	
 
  2 3 	
 
  9 9 	
 
  2 3 	
 
  . / 	
 
  , - 	
 
  % 6 	
 
  -
  
  1 ; 	
 
   % 	
 
 >	/ ;=	44 4 8	4
 
4t ;=	  8	
 
r/   r7   N);r   
__future__r   collectionsr   operatorr   typingr   r   r   sphinx.deprecationr	   sphinx.errorsr
   r   sphinx.localer   sphinx.utilr   sphinx.util.inspectr   collections.abcr   r   r   r   pathlibr   r   r   docutilsr   sphinxr   sphinx.applicationr   sphinx.buildersr   sphinx.configr   sphinx.domainsr   sphinx.environmentr   #sphinx.ext.autodoc._event_listenersr   r   r   r    r!   sphinx.ext.todor"   	getLoggerr*   r~   r$   r:   r7   r.   r/   r0   <module>r      s_  
 # #  6 6 3 5   ,AA#)'$%3  * 
		8	$J Xb 6 O	
 ^ ) @ 6 > 5 u U Y * .  n!" k#*] ]r/   