
    ~h                     ,    d dl mZ  G d d      ZddZy)    )defaultdictc                   "    e Zd ZdZd Zd Zd Zy)HookableNc                 ,    t        t              | _        y N)r   set_hooks)selfs    X/opt/mcp/mcp-sentiment/venv/lib/python3.12/site-packages/authlib/oauth2/rfc6749/hooks.py__init__zHookable.__init__   s    !#&    c                 @    | j                   |   j                  |       y r   )r	   add)r
   	hook_typehooks      r   register_hookzHookable.register_hook
   s    I""4(r   c                 D    | j                   |   D ]  } || g|i |  y r   )r	   )r
   r   argskwargsr   s        r   execute_hookzHookable.execute_hook   s,    KK	* 	(D'''	(r   )__name__
__module____qualname__r	   r   r   r    r   r   r   r      s    F')(r   r   Nc                 <    fd}t        |       r ||       S |S )z4Execute hooks before and after the decorated method.c                 h     xs d j                    xs d j                     fd}|S )Nbefore_after_c                 p     | j                   g|i |  | g|i |}| j                  |       |S r   )r   )r
   r   r   result
after_namebefore_namefuncs       r   wrapperz*hooked.<locals>.decorator.<locals>.wrapper   sF    Dk;D;F;$000Fj&1Mr   )r   )r#   r$   r!   r"   afterbefores   ` @@r   	decoratorzhooked.<locals>.decorator   s9    9'$-- 96t}}o6
	 r   )callable)r#   r&   r%   r'   s    `` r   hookedr)      s!    
 ~r   )NNN)collectionsr   r   r)   r   r   r   <module>r+      s    #( (r   