
    i                    |    d Z ddlmZ ddlZddlZddlmZ ddlm	Z	m
Z
 ddlZddlmZ e	rddlmZ  ee      Zd	dZy)
u&  
utils/event_hooks_loader.py — 훅 디렉토리 탐색 및 동적 로드

HOOK.yaml + handler.py 기반 훅을 파일시스템에서 발견하여
HookRegistry에 등록한다.

Usage:
    from utils.event_hooks_loader import discover_hooks

    discover_hooks(registry, "/path/to/hooks_dir")
    )annotationsN)Path)TYPE_CHECKINGAny)
get_logger)HookRegistryc                P   t        |      }|j                         st        j                  d|       yt	        |j                               D ]  }|j                         s|dz  }|dz  }|j                         s!t        j                  d|j                         P|j                         s!t        j                  d|j                         	 t        j                  |j                  d            xs i }|j                  d
d      }|s!t        j                  d|j                         |j                  d|j                        }		 d|j                   }
t        j                  j!                  |
|      }||j"                  t%        d|       t        j                  j'                  |      }|t(        j*                  |
<   |j"                  j-                  |       t/        |dd      }|t1        d|j                   d      | j3                  |||	       t        j5                  d|	|        y# t        $ r,}t        j                  d	|j                  |       Y d}~d}~ww xY w# t        $ r,}t        j                  d|j                  |       Y d}~Td}~ww xY w)u"  디렉토리를 순회하여 HOOK.yaml + handler.py 기반 훅을 동적으로 로드한다.

    각 서브디렉토리에서 다음을 기대한다:
      HOOK.yaml  — 최소 ``event`` 키 (와일드카드 포함 가능), 선택 ``name``
      handler.py — ``handle(ctx)`` 함수 정의

    오류(파일 없음, 파싱 실패, 임포트 실패 등)는 log 후 건너뜀.

    Args:
        registry: 핸들러를 등록할 HookRegistry 인스턴스
        hooks_dir: 훅 서브디렉토리들이 위치한 상위 디렉토리 경로
    z,discover_hooks: directory does not exist: %sNz	HOOK.yamlz
handler.pyz,discover_hooks: skipping '%s' (no HOOK.yaml)z-discover_hooks: skipping '%s' (no handler.py)zutf-8)encodingz5discover_hooks: failed to parse HOOK.yaml in '%s': %sevent z2discover_hooks: '%s' HOOK.yaml missing 'event' keyname_hook_zCannot load spec from handlezhandler.py in 'z' has no 'handle' function)r   z/discover_hooks: loaded hook '%s' for event '%s'z/discover_hooks: failed to load hook in '%s': %s)r   is_dirloggerdebugsortediterdirexistsr   yaml	safe_load	read_text	Exceptionwarningget	importlibutilspec_from_file_locationloaderImportErrormodule_from_specsysmodulesexec_modulegetattrAttributeErrorregisterinfo)registry	hooks_dirbasehook_dir	yaml_pathhandler_pathmetaexc
event_type	hook_namemodule_namespecmodule
handler_fns                 I/home/jay/workspace/.worktrees/task-2116-dev1/utils/event_hooks_loader.pydiscover_hooksr8      sB    	?D;;=CYO4<<>* )b {*	,.!LLGW""$LLH(--X	#'>>)2E2Ew2E2W#X#^\^D
 ((7B/
NNOQYQ^Q^_&(--8		b"8==/2K>>99+|TD|t{{2!$:<."IJJ^^44T:F'-CKK$KK##F+ 48J!$x}}oE_%`aaj*9EKKI9V`aO)b   	NNRT\TaTacfg	0  	bNNLhmm]`aa	bs1   )H8	C+I08	I-!I((I-0	J%9!J  J%)r)   z'HookRegistry'r*   strreturnNone)__doc__
__future__r   importlib.utilr   r"   pathlibr   typingr   r   r   utils.loggerr   utils.event_hooksr   __name__r   r8        r7   <module>rF      s7   
 #  
  %  #.	H	;brE   