o
    Ni@/                     @  s  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mZ ddlmZ ddlmZ dd	lmZ erd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, ddl-m.Z. e/e0Z1G dd de	Z2i 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.d/d0d1d2d3d4d5d6d7Z3G d8d9 d9Z4d:S );zLSphinx core events.

Gracefully adapted from the TextPress system by Armin.
    )annotations)defaultdict)
attrgetter)TYPE_CHECKING
NamedTupleoverload)ExtensionErrorSphinxError)__)logging)safe_getattr)CallableIterableSequenceSet)Path)AnyLiteral)nodes)addnodes)Sphinx)Builder)Config)Domain)BuildEnvironment) _AutodocProcessDocstringListener)	todo_nodec                   @  s&   e Zd ZU ded< ded< ded< dS )EventListenerintidr   handlerpriorityN)__name__
__module____qualname____annotations__ r&   r&   A/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/events.pyr   %   s   
 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                   @  s  e Zd ZdZdzddZd{d
dZed|ddZed}ddZed~ddZedddZedddZedd!dZedd$dZedd'dZedd*dZedd-dZedd0dZedd3dZedd6dZedd9dZedd<dZedd?dZeddBdZeddEdZeddHdZeddKdZeddNdZeddQdZeddTdZeddWdZeddZdZedd]dZedd`dZeddcdZeddfdZeddhdZddjdZddldmZdndoddudvZ	dndoddwdxZ
dyS )EventManagerzEvent manager for Sphinx.appr   returnNonec                 C  s$   || _ t | _tt| _d| _d S )Nr   )r.   core_eventscopyeventsr   list	listenersnext_listener_id)selfr.   r&   r&   r'   __init__D   s   


zEventManager.__init__namestrc                 C  s(   || j v rttd| d| j |< dS )zRegister a custom Sphinx event.zEvent %r already presentr)   N)r3   r   r
   )r7   r9   r&   r&   r'   addJ   s   
zEventManager.addLiteral['config-inited']callback Callable[[Sphinx, Config], None]r!   r   c                 C     d S Nr&   r7   r9   r=   r!   r&   r&   r'   connectR      zEventManager.connectLiteral['builder-inited']Callable[[Sphinx], None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB   Z   rC   Literal['env-get-outdated']QCallable[[Sphinx, BuildEnvironment, Set[str], Set[str], Set[str]], Sequence[str]]c                 C  r?   r@   r&   rA   r&   r&   r'   rB   b      Literal['env-before-read-docs']5Callable[[Sphinx, BuildEnvironment, list[str]], None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB   l   rC   Literal['env-purge-doc']/Callable[[Sphinx, BuildEnvironment, str], None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB   t   rC   Literal['source-read'](Callable[[Sphinx, str, list[str]], None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB   |   rC   Literal['include-read'].Callable[[Sphinx, Path, str, list[str]], None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB      rC   Literal['doctree-read'](Callable[[Sphinx, nodes.document], None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB      rC   Literal['env-merge-info']GCallable[[Sphinx, BuildEnvironment, list[str], BuildEnvironment], None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB      rH   Literal['env-updated'])Callable[[Sphinx, BuildEnvironment], str]c                 C  r?   r@   r&   rA   r&   r&   r'   rB      rC   Literal['env-get-updated']3Callable[[Sphinx, BuildEnvironment], Iterable[str]]c                 C  r?   r@   r&   rA   r&   r&   r'   rB      rC    Literal['env-check-consistency']*Callable[[Sphinx, BuildEnvironment], None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB      rC   Literal['write-started']!Callable[[Sphinx, Builder], None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB      rC   Literal['doctree-resolved']-Callable[[Sphinx, nodes.document, str], None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB      rC   Literal['missing-reference']fCallable[[Sphinx, BuildEnvironment, addnodes.pending_xref, nodes.TextElement], nodes.reference | None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB         	!Literal['warn-missing-reference']>Callable[[Sphinx, Domain, addnodes.pending_xref], bool | None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB      rC   Literal['build-finished']*Callable[[Sphinx, Exception | None], None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB      rC   Literal['html-collect-pages']=Callable[[Sphinx], Iterable[tuple[str, dict[str, Any], str]]]c                 C  r?   r@   r&   rA   r&   r&   r'   rB      rC   Literal['html-page-context']HCallable[[Sphinx, str, str, dict[str, Any], nodes.document], str | None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB      rH    Literal['linkcheck-process-uri']#Callable[[Sphinx, str], str | None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB      rC   'Literal['object-description-transform']9Callable[[Sphinx, str, str, addnodes.desc_content], None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB      rC   $Literal['autodoc-process-docstring']r   c                 C  r?   r@   r&   rA   r&   r&   r'   rB   	  rC   +Literal['autodoc-before-process-signature']#Callable[[Sphinx, Any, bool], None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB     rC   $Literal['autodoc-process-signature']Callable[[Sphinx, Literal['module', 'class', 'exception', 'function', 'method', 'attribute'], str, Any, dict[str, bool], str | None, str | None], tuple[str | None, str | None] | None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB     s    Literal['autodoc-process-bases']>Callable[[Sphinx, str, Any, dict[str, bool], list[str]], None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB   .  rC   Literal['autodoc-skip-member']Callable[[Sphinx, Literal['module', 'class', 'exception', 'function', 'method', 'attribute'], str, Any, bool, dict[str, bool]], bool]c                 C  r?   r@   r&   rA   r&   r&   r'   rB   6  s   Literal['todo-defined']#Callable[[Sphinx, todo_node], None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB   J  rC   Literal['viewcode-find-source']aCallable[[Sphinx, str], tuple[str, dict[str, tuple[Literal['class', 'def', 'other'], int, int]]]]c                 C  r?   r@   r&   rA   r&   r&   r'   rB   R  ra   #Literal['viewcode-follow-imported'](Callable[[Sphinx, str, str], str | None]c                 C  r?   r@   r&   rA   r&   r&   r'   rB   ]  rC   Callable[..., Any]c                 C  r?   r@   r&   rA   r&   r&   r'   rB   g  rC   r   c                 C  sJ   || j vrttd| | j}|  jd7  _| j| t||| |S )z$Connect a handler to specific event.zUnknown event name: %s   )r3   r   r
   r6   r5   appendr   )r7   r9   r=   r!   listener_idr&   r&   r'   rB   o  s   
r   c                 C  s6   | j  D ]}| D ]}|j|kr|| qqdS )zDisconnect a handler.N)r5   valuesr2   r   remove)r7   r   r5   listenerr&   r&   r'   
disconnecty  s   

zEventManager.disconnectr&   )allowed_exceptionsargsr   r   tuple[type[Exception], ...]r4   c          
      G  s   zt |}W n	 ty   Y nw td|| g }t| j| tdd}|D ]F}z||j| j	g|R   W q& |y?     t
yF     tyl } z| j	jrR t|jdd}	ttd|j|f ||	d|d}~ww |S )zEmit a Sphinx event.z[app] emitting event: %r%sr!   )keyr#   Nz*Handler %r for event %r threw an exception)modname)repr	Exceptionloggerdebugsortedr5   r   r   r    r.   r	   pdbr   r   r
   )
r7   r9   r   r   	repr_argsresultsr5   r   excr   r&   r&   r'   emit  s>   	zEventManager.emitc                G  s2   | j |g|R d|iD ]
}|dur|  S qdS )zEmit a Sphinx event and returns first result.

        This returns the result of the first handler that doesn't return ``None``.
        r   N)r   )r7   r9   r   r   resultr&   r&   r'   emit_firstresult  s
   
zEventManager.emit_firstresultN)r.   r   r/   r0   )r9   r:   r/   r0   )r9   r<   r=   r>   r!   r   r/   r   )r9   rD   r=   rE   r!   r   r/   r   )r9   rF   r=   rG   r!   r   r/   r   )r9   rI   r=   rJ   r!   r   r/   r   )r9   rK   r=   rL   r!   r   r/   r   )r9   rM   r=   rN   r!   r   r/   r   )r9   rO   r=   rP   r!   r   r/   r   )r9   rQ   r=   rR   r!   r   r/   r   )r9   rS   r=   rT   r!   r   r/   r   )r9   rU   r=   rV   r!   r   r/   r   )r9   rW   r=   rX   r!   r   r/   r   )r9   rY   r=   rZ   r!   r   r/   r   )r9   r[   r=   r\   r!   r   r/   r   )r9   r]   r=   r^   r!   r   r/   r   )r9   r_   r=   r`   r!   r   r/   r   )r9   rb   r=   rc   r!   r   r/   r   )r9   rd   r=   re   r!   r   r/   r   )r9   rf   r=   rg   r!   r   r/   r   )r9   rh   r=   ri   r!   r   r/   r   )r9   rj   r=   rk   r!   r   r/   r   )r9   rl   r=   rm   r!   r   r/   r   )r9   rn   r=   r   r!   r   r/   r   )r9   ro   r=   rp   r!   r   r/   r   )r9   rq   r=   rr   r!   r   r/   r   )r9   rs   r=   rt   r!   r   r/   r   )r9   ru   r=   rv   r!   r   r/   r   )r9   rw   r=   rx   r!   r   r/   r   )r9   ry   r=   rz   r!   r   r/   r   )r9   r{   r=   r|   r!   r   r/   r   )r9   r:   r=   r}   r!   r   r/   r   )r9   r:   r=   r   r!   r   r/   r   )r   r   r/   r0   )r9   r:   r   r   r   r   r/   r4   )r9   r:   r   r   r   r   r/   r   )r"   r#   r$   __doc__r8   r;   r   rB   r   r   r   r&   r&   r&   r'   r-   A   s    

		
				
	


+r-   N)5r   
__future__r   collectionsr   operatorr   typingr   r   r   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.autodocr   sphinx.ext.todor   	getLoggerr"   r   r   r1   r-   r&   r&   r&   r'   <module>   sx    
	
