a "e;ã@sHddlZddlmZddlmZiZGdd„deƒZdd„Zdd „Z dS) éN)Ú HOOKS_DIRS)Ú load_sourcec@s eZdZdZdd„Zdd„ZdS)Ú HooksObserverzà Provides interface for calling user hooks When initializing, loads all hooks located in HOOKS_DIRS. Then it can called with application name as argument. Observer ensures calling all hooks defined for the application. cCs tƒdS©N)Ú_register_hooks)Úself©rú0/usr/lib/python3.9/site-packages/tracer/hooks.pyÚ__init__!szHooksObserver.__init__cCs"|tvr dSdd„t|DƒdS)NcSsg|] }|ƒ‘qSrr)Ú.0Úfrrr Ú (óz*HooksObserver.__call__..)Ú_hooks)rÚapprrr Ú__call__$szHooksObserver.__call__N)Ú__name__Ú __module__Ú __qualname__Ú__doc__r rrrrr rsrcs‡fdd„}|S)a Decorator for tracer hooks. Example:: from tracer import hooks @hooks.match("foo") def hook_app(): print("Hey, application foo was found") .. note:: You can match multiple applications by calling ``@hooks.match`` with list of them. cs>tˆƒtkrˆnˆgD]"}|tvr*gt|<t| |¡q|Sr)ÚtypeÚlistrÚappend)r r©Úappsrr Ú decorator;s zmatch..decoratorr)rrrrr Úmatch+s rc CsntD]d}t |¡D]T\}}}|D]D}tj |¡d}zt|tj ||¡ƒWq tybYq Yq 0q qqdS)Nr)rÚosÚwalkÚpathÚsplitextrÚjoinÚ Exception)Zhook_dirÚrootÚdirsÚfilesÚfnameÚmodnamerrr rDs r) rZ tracer.pathsrZtracer.resources.pycomprrÚobjectrrrrrrr Ús