o
    ^[2h                     @   s(   d dl mZ G dd dZdddZdS )    )defaultdictc                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )HookableNc                 C   s   t t| _d S N)r   set_hooks)self r   m/home/skpark/git/infrasmart_work/infrasmart/venv/lib/python3.10/site-packages/authlib/oauth2/rfc6749/hooks.py__init__   s   zHookable.__init__c                 C   s   | j | | d S r   )r   add)r   	hook_typehookr   r   r	   register_hook
   s   zHookable.register_hookc                 O   s*   | j | D ]}|| g|R i | qd S r   )r   )r   r   argskwargsr   r   r   r	   execute_hook   s   zHookable.execute_hook)__name__
__module____qualname__r   r
   r   r   r   r   r   r	   r      s
    r   Nc                    s"    fdd}t | r|| S |S )z4Execute hooks before and after the decorated method.c                    s4   pdj  pdj    fdd}|S )Nbefore_after_c                    s>   | j g|R i | | g|R i |}|   | |S r   )r   )r   r   r   result
after_namebefore_namefuncr   r	   wrapper   s   z*hooked.<locals>.decorator.<locals>.wrapper)r   )r   r   afterbeforer   r	   	decorator   s   zhooked.<locals>.decorator)callable)r   r   r   r    r   r   r	   hooked   s   r"   )NNN)collectionsr   r   r"   r   r   r   r	   <module>   s    