U
    Z+d                     @   sh  d Z ddlZddlZddlZddlZddlmZ ddlmZ dZ	da
dae Ze Zdadd Zd	d
 Zdd Zdd ZG dd dejZe Ze ZejZejZdd Zdd Zdd Zej !drdd Z"nej !drdd Z"neZ"dd Z#dd Z$ee"Z%ee#Z&d d! Z'd"d# Z(d$d% Z)d/d&d'Z*d0d(d)Z+d*d+ Z,d,d- Z-ej !d.r^e,  ne-  dS )1zInternal state.

This is an internal module containing thread state
like the ``current_app``, and ``current_task``.

This module shouldn't be used directly.
    N)Proxy)
LocalStack)set_default_appget_current_appget_current_taskget_current_worker_taskcurrent_appcurrent_taskconnect_on_app_finalizeFc                 C   s   t |  | S )z8Connect callback to be called when any app is finalized.)_on_app_finalizersadd)callback r   1/tmp/pip-unpacked-wheel-ucduq0nd/celery/_state.pyr
   +   s    
r
   c                 C   s   t t}|D ]}||  qd S N)setr   )app	callbacksr   r   r   r   _announce_app_finalized1   s    r   c                 C   s   | a d S r   _task_join_will_block)blocksr   r   r   _set_task_join_will_block7   s    r   c                   C   s   t S r   r   r   r   r   r   task_join_will_block<   s    r   c                   @   s   e Zd ZdZdS )_TLSN)__name__
__module____qualname__r   r   r   r   r   r   @   s   r   c                 C   s   | a dS )zSet default app.N)default_appr   r   r   r   r   V   s    r   c                  C   s>   t d kr4ddlm}  t| dg dtjdp,dd tjp<t S )Nr   CelerydefaultFZCELERY_LOADER)fixupsZset_as_currentloader)	r   Zcelery.app.baser!   r   osenvironget_tlsr   r    r   r   r   _get_current_app\   s      r)   c                 C   s
   | t _d S r   )r(   r   r   r   r   r   _set_current_appg   s    r*   ZC_STRICT_APPc                   C   s   t ddS )zReturn the current app.zUSES CURRENT APPN)RuntimeErrorr   r   r   r   r   l   s    r   Z
C_WARN_APPc                  C   s*   dd l } tdtjd | jtjd t S )Nr   z-- USES CURRENT_APP)file)	tracebackprintsysstderrprint_stackr)   )r-   r   r   r   r   p   s    c                   C   s   t jS )zCurrently executing task.)_task_stacktopr   r   r   r   r   y   s    r   c                  C   s$   t tjD ]} | jjs
|   S q
dS )zCurrently executing task, that was applied by the worker.

    This is used to differentiate between the actual task
    executed by the worker and any task that was called within
    a task (using ``task.__call__`` or ``task.apply``)
    N)reversedr2   stackrequestZcalled_directly)Ztaskr   r   r   r   ~   s    r   c                 C   s   t |  d S r   )_appsr   r   r   r   r   _register_app   s    r8   c                 C   s   t |  d S r   )r7   discardr   r   r   r   _deregister_app   s    r:   c                   C   s   t S r   )r7   r   r   r   r   _get_active_apps   s    r;   c                 C   s   | d krt  S | S r   )r   r   r   r   r   _app_or_default   s    r<   c                 C   s   ddl m} zddlm} W n tk
r4   d }Y nX | d krttdd r^td |  tjS |rn| j	dkrvt
dtd |  tS | S )	Nr   )r1   )current_processr   z-- RETURNING TO CURRENT APP --MainProcesszDEFAULT APPz-- RETURNING TO DEFAULT APP --)r-   r1   Zbilliard.processr=   ImportErrorgetattrr(   r.   r   _name	Exceptionr   )r   r1   r=   r   r   r   _app_or_default_trace   s     
rC   c                   C   s   t adS )z Enable tracing of app instances.N)rC   app_or_defaultr   r   r   r   enable_trace   s    rE   c                   C   s   t adS )z!Disable tracing of app instances.N)r<   rD   r   r   r   r   disable_trace   s    rF   ZCELERY_TRACE_APP)N)N).__doc__r%   r/   	threadingweakrefZcelery.localr   Zcelery.utils.threadsr   __all__r   rD   WeakSetr7   r   r   r   r
   r   r   r   localr   r(   r2   pushZpush_current_taskpopZpop_current_taskr   r)   r*   r&   r'   r   r   r   r   r	   r8   r:   r;   r<   rC   rE   rF   r   r   r   r   <module>   sV   



