a
    xd                  	   @   s   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ddhd	d
ddddZG dd dZG dd dee	jZddddeddfddZedd ZedddZdS )z-Create Celery app instances used for testing.    N)contextmanager)deepcopy)symbol_by_name)Celery_stateFjsonTUTCz	memory://zcache+memory://)Zworker_hijack_root_loggerZworker_log_colorZaccept_contentZ
enable_utctimezone
broker_urlresult_backendZbroker_heartbeatc                   @   s   e Zd ZdZdd ZdS )TrapzTrap that pretends to be an app but raises an exception instead.

    This to protect from code that does not properly pass app instances,
    then falls back to the current_app.
    c                 C   s(   |dks|dkrd S t | tdd S )NZ_is_coroutine__func__zTest depends on current_app)printRuntimeError)selfname r   R/var/www/html/Ranjet/env/lib/python3.9/site-packages/celery/contrib/testing/app.py__getattr__   s    zTrap.__getattr__N)__name__
__module____qualname____doc__r   r   r   r   r   r      s   r   c                       s    e Zd ZdZ fddZ  ZS )UnitLoggingz)Sets up logging for the test application.c                    s   t  j|i | d| _d S )NT)super__init__Zalready_setup)r   argskwargs	__class__r   r   r   *   s    zUnitLogging.__init__)r   r   r   r   r   __classcell__r   r   r   r   r   '   s   r   c           
      K   s   ddl m} tttfi |pi }|dur8|dd |durL|dd |rTdn|}t| p`df||||d|}	|	| |	S )zApp used for testing.   )tasksNr
   r   zcelery.tests)set_as_currentlogbrokerbackend) r"   dictr   DEFAULT_TEST_CONFIGpopr   Zadd_defaults)
r   configZenable_loggingr#   r$   r&   r%   r   r"   Ztest_appr   r   r   TestApp/   s&    
r,   c                 #   s@   t   tj}t  G  fddd}| t_dV  |t_dS )zContextmanager that installs the trap app.

    The trap means that anything trying to use the current or default app
    will raise an exception.
    c                       s   e Zd Z ZdS )zset_trap.<locals>.NonTLSN)r   r   r   current_appr   Ztrapr   r   NonTLSO   s   r/   N)r   r   _tlsset_default_app)appZprev_tlsr/   r   r.   r   set_trapD   s    
r3   c                 c   s   t  }t j}tt j}tt j}|rXt|  dV  W d   q^1 sL0    Y  ndV  t 	| |t j
_| |ur|   |t _|t _dS )zWSetup default app for testing.

    Ensures state is clean after the test returns.
    N)r   Zget_current_appZdefault_appsetZ_on_app_finalizersweakrefWeakSetZ_appsr3   r1   r0   r-   close)r2   Zuse_trapZprev_current_appZprev_default_appZprev_finalizersZ	prev_appsr   r   r   setup_default_appW   s    

&
r8   )F)r   r5   
contextlibr   copyr   Zkombu.utils.importsr   Zceleryr   r   r)   r   Zlog_clsr   r,   r3   r8   r   r   r   r   <module>   s.   

