U
    ‰dÑ  ã                   @   sj   d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
 dZG dd	„ d	eƒZd
d„ Zddd„ZdS )zRegistry of available tasks.é    N)Úimport_module)Úget_current_app)Úadd_autoretry_behaviour)ÚInvalidTaskErrorÚNotRegistered)ÚTaskRegistryc                   @   sD   e Zd ZdZeZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dS )r   zMap of registered tasks.c                 C   s   |   |¡‚d S ©N)r   )ÚselfÚkey© r   ú7/tmp/pip-unpacked-wheel-mu1yl971/celery/app/registry.pyÚ__missing__   s    zTaskRegistry.__missing__c                 C   sH   |j dkrtd t|ƒj¡ƒ‚t |¡r.|ƒ p0|}t|ƒ || |j < dS )z¶Register a task in the task registry.

        The task will be automatically instantiated if not already an
        instance. Name must be configured prior to registration.
        Nz,Task class {!r} must specify .name attribute)Únamer   ÚformatÚtypeÚ__name__ÚinspectÚisclassr   )r	   Útaskr   r   r   Úregister   s    
ÿÿzTaskRegistry.registerc                 C   s:   z|   t|d|ƒ¡ W n tk
r4   |  |¡‚Y nX dS )a  Unregister task by name.

        Arguments:
            name (str): name of the task to unregister, or a
                :class:`celery.app.task.Task` with a valid `name` attribute.

        Raises:
            celery.exceptions.NotRegistered: if the task is not registered.
        r   N)ÚpopÚgetattrÚKeyErrorr   )r	   r   r   r   r   Ú
unregister"   s    
zTaskRegistry.unregisterc                 C   s
   |   d¡S )NÚregular©Úfilter_types©r	   r   r   r   r   2   s    zTaskRegistry.regularc                 C   s
   |   d¡S )NÚperiodicr   r   r   r   r   r   5   s    zTaskRegistry.periodicc                    s   ‡ fdd„|   ¡ D ƒS )Nc                    s&   i | ]\}}t |d dƒˆ kr||“qS )r   r   )r   )Ú.0r   r   ©r   r   r   Ú
<dictcomp>9   s    ÿ z-TaskRegistry.filter_types.<locals>.<dictcomp>)Úitems)r	   r   r   r    r   r   8   s    zTaskRegistry.filter_typesN)r   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r   r   r   r      s   r   c                 C   s   t ƒ j|  S r   )r   Útasks)r   r   r   r   Ú_unpickle_task=   s    r'   c                 C   s   |rt |ƒ tƒ j|  S r   )r   r   r&   )r   Úmoduler   r   r   Ú_unpickle_task_v2A   s    r)   )N)r%   r   Ú	importlibr   Zcelery._stater   Zcelery.app.autoretryr   Zcelery.exceptionsr   r   Ú__all__Údictr   r'   r)   r   r   r   r   Ú<module>   s   1