o
    û°“i0  ã                   @   s8   d Z ddlmZmZmZmZmZ G dd„ dƒZeƒ ZdS )z.Handler registry for managing Custom handlers.é    )ÚAnyÚCallableÚDictÚListÚOptionalc                   @   sz  e Zd ZdZd*dd„Zdededef ddfd	d
„Zdededef ddfdd„Z	dededef ddfdd„Z
dedeedef  fdd„Zdedeedef  fdd„Zdedeedef  fdd„Zdedefdd„Zdedefdd„Zdedefdd„Zdeddfdd„Zdeddfdd„Zdeddfd d!„Zdee fd"d#„Zdee fd$d%„Zdee fd&d'„Zd*d(d)„ZdS )+ÚHandlerRegistryzDGeneral registry for managing handlers by name with proper priority.ÚreturnNc                 C   s   i | _ i | _i | _d S )N)Ú	_handlersÚ_framework_default_handlersÚ_decorator_handlers©Úself© r   úm/home/ubuntu/.local/lib/python3.10/site-packages/model_hosting_container_standards/common/handler/registry.pyÚ__init__	   s   
zHandlerRegistry.__init__ÚnameÚhandler.c                 C   ó   || j |< dS )zSet a handler by name.N©r	   )r   r   r   r   r   r   Úset_handler   ó   zHandlerRegistry.set_handlerÚhandler_typec                 C   r   )zÊSet a framework default handler.

        Args:
            handler_type: The type of handler (e.g., 'ping', 'invoke')
            handler: The handler function to register as framework default
        N©r
   ©r   r   r   r   r   r   Úset_framework_default   ó   	z%HandlerRegistry.set_framework_defaultc                 C   r   )zÂSet a decorator handler.

        Args:
            handler_type: The type of handler (e.g., 'ping', 'invoke')
            handler: The handler function to register as decorator handler
        N©r   r   r   r   r   Úset_decorator_handler   r   z%HandlerRegistry.set_decorator_handlerc                 C   ó   | j  |¡S )zGet a handler by name.)r	   Úget©r   r   r   r   r   Úget_handler(   s   zHandlerRegistry.get_handlerc                 C   r   )zÚGet a framework default handler.

        Args:
            handler_type: The type of handler (e.g., 'ping', 'invoke')

        Returns:
            The framework default handler function, or None if not found
        )r
   r   ©r   r   r   r   r   Úget_framework_default,   ó   	z%HandlerRegistry.get_framework_defaultc                 C   r   )zÊGet a decorator handler.

        Args:
            handler_type: The type of handler (e.g., 'ping', 'invoke')

        Returns:
            The decorator handler function, or None if not found
        )r   r   r"   r   r   r   Úget_decorator_handler7   r$   z%HandlerRegistry.get_decorator_handlerc                 C   ó
   || j v S )zõCheck if a framework default handler is registered.

        Args:
            handler_type: The type of handler (e.g., 'ping', 'invoke')

        Returns:
            True if the framework default handler is registered, False otherwise
        r   r"   r   r   r   Úhas_framework_defaultB   ó   
	z%HandlerRegistry.has_framework_defaultc                 C   r&   )zåCheck if a decorator handler is registered.

        Args:
            handler_type: The type of handler (e.g., 'ping', 'invoke')

        Returns:
            True if the decorator handler is registered, False otherwise
        r   r"   r   r   r   Úhas_decorator_handlerM   r(   z%HandlerRegistry.has_decorator_handlerc                 C   r&   )z)Check if a handler is registered by name.r   r    r   r   r   Úhas_handlerX   s   
zHandlerRegistry.has_handlerc                 C   ó   | j  |d¡ dS )zRemove a handler by name.N)r	   Úpopr    r   r   r   Úremove_handler\   ó   zHandlerRegistry.remove_handlerc                 C   r+   )z+Remove a framework default handler by type.N)r
   r,   r"   r   r   r   Úremove_framework_default`   r.   z(HandlerRegistry.remove_framework_defaultc                 C   r+   )z#Remove a decorator handler by type.N)r   r,   r"   r   r   r   Úremove_decorator_handlerd   r.   z(HandlerRegistry.remove_decorator_handlerc                 C   ó   t | j ¡ ƒS )z"List all registered handler names.)Úlistr	   Úkeysr   r   r   r   Úlist_handlersh   r   zHandlerRegistry.list_handlersc                 C   r1   )z4List all registered framework default handler types.)r2   r
   r3   r   r   r   r   Úlist_framework_defaultsl   r   z'HandlerRegistry.list_framework_defaultsc                 C   r1   )z,List all registered decorator handler types.)r2   r   r3   r   r   r   r   Úlist_decorator_handlersp   r   z'HandlerRegistry.list_decorator_handlersc                 C   s"   | j  ¡  | j ¡  | j ¡  dS )zClear all registered handlers.N)r	   Úclearr
   r   r   r   r   r   r7   t   s   

zHandlerRegistry.clear)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr   r   r   r   r   r   r!   r#   r%   Úboolr'   r)   r*   r-   r/   r0   r   r4   r5   r6   r7   r   r   r   r   r      s>    
ÿ
ÿ
þÿ
ÿ
þr   N)	r;   Útypingr   r   r   r   r   r   Úhandler_registryr   r   r   r   Ú<module>   s    
v