o $a@sdZddlmZddlmZddlmZmZmZm Z m Z m Z m Z m Z ddlmZmZddlmZddlmZddlmZerDdd lmZeeZGd d d e Zd d ddddddddddddddZGdddZdS)z sphinx.events ~~~~~~~~~~~~~ Sphinx core events. Gracefully adapted from the TextPress system by Armin. :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. ) defaultdict) attrgetter) TYPE_CHECKINGAnyCallableDictList NamedTupleTupleType)ExtensionError SphinxError)__)logging) safe_getattr)Sphinxc@s&eZdZUeed<eed<eed<dS) EventListeneridhandlerpriorityN)__name__ __module__ __qualname__int__annotations__rrr//usr/lib/python3/dist-packages/sphinx/events.pyrs  rconfigzenv, added, changed, removedenvz env, docnamez env, docnameszdocname, source textz the doctree before being pickledz&env, read docnames, other env instancezenv, node, contnodez domain, nodezdoctree, docname exception)zbuilder-initedz config-initedzenv-get-outdatedzenv-get-updatedz env-purge-doczenv-before-read-docszenv-check-consistencyz source-readz doctree-readzenv-merge-infozmissing-referencezwarn-missing-referencezdoctree-resolvedz env-updatedzbuild-finishedc @seZdZdZdddZdeddfd d Zded ed edefd dZ deddfddZ dddede de e edfdefddZdddede de e edfde fddZdS) EventManagerzEvent manager for Sphinx.apprreturnNcCs$||_t|_tt|_d|_dS)Nr)r" core_eventscopyeventsrlist listenersnext_listener_id)selfr"rrr__init__:s   zEventManager.__init__namecCs(||jvr ttd|d|j|<dS)zRegister a custom Sphinx event.zEvent %r already presentrN)r&r r)r*r,rrradd@s zEventManager.addcallbackrcCsJ||jvr ttd||j}|jd7_|j|t||||S)z$Connect a handler to specific event.zUnknown event name: %s)r&r rr)r(appendr)r*r,r.r listener_idrrrconnectFs zEventManager.connectr1cCs:|jD]}|ddD] }|j|kr||q qdS)zDisconnect a handler.N)r(valuesrremove)r*r1r(listenerrrr disconnectPs  zEventManager.disconnectr)allowed_exceptionsargsr7.c Gsztd|t|ddWn tyYnwg}t|j|tdd}|D]A}z||j|j g|RWq(|yAt yHtyi}zt |jdd}t t d|j|f||d|d}~ww|S) zEmit a Sphinx event.z[app] emitting event: %r%sNdr)keyrz*Handler %r for event %r threw an exception)modname)loggerdebugrepr Exceptionsortedr(rr0rr"r rr r) r*r,r7r8resultsr(r5excr;rrremitWs4   zEventManager.emitcGs2|j|g|Rd|iD] }|dur|Sq dS)zEmit a Sphinx event and returns first result. This returns the result of the first handler that doesn't return ``None``. r7N)rC)r*r,r7r8resultrrremit_firstresultqs zEventManager.emit_firstresult)r"rr#N)rrr__doc__r+strr-rrr2r6rr r r?rrCrErrrrr!7s$   r!N)rF collectionsroperatorrtypingrrrrrr r r sphinx.errorsr r sphinx.localer sphinx.utilrsphinx.util.inspectrsphinx.applicationr getLoggerrr<rr$r!rrrrs: (