
    h(              	           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      Z G d d ee	j                              ZddddeddfdZed        Zedd       Zy)z-Create Celery app instances used for testing.    N)contextmanager)deepcopy)symbol_by_name)Celery_stateFjsonTUTCz	memory://zcache+memory://)worker_hijack_root_loggerworker_log_coloraccept_content
enable_utctimezone
broker_urlresult_backendbroker_heartbeatc                       e Zd ZdZd Zy)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                 D    |dk(  s|dk(  ry t        |       t        d      )N_is_coroutine__func__zTest depends on current_app)printRuntimeError)selfnames     V/var/www/Befach/backend/env/lib/python3.12/site-packages/celery/contrib/testing/app.py__getattr__zTrap.__getattr__   s)     ?"dj&8d899    N)__name__
__module____qualname____doc__r    r   r   r   r      s    :r   r   c                   "     e Zd ZdZ fdZ xZS )UnitLoggingz)Sets up logging for the test application.c                 2    t        |   |i | d| _        y )NT)super__init__already_setup)r   argskwargs	__class__s      r   r'   zUnitLogging.__init__*   s    $)&)!r   )r   r   r    r!   r'   __classcell__)r+   s   @r   r$   r$   '   s    3" "r   r$   c                     ddl m} t        t        t              fi |xs i }||j                  dd       ||j                  dd       |rdn|}t        | xs df||||d|}	|	j                  |       |	S )zApp used for testing.   )tasksNr   r   zcelery.tests)set_as_currentlogbrokerbackend) r/   dictr   DEFAULT_TEST_CONFIGpopr   add_defaults)
r   configenable_loggingr0   r1   r3   r2   r*   r/   test_apps
             r   TestAppr<   /   s     (./@6<R@F

<&

#T* $cC% H &!Or   c              #      K   t               t        j                  }t        j                          G fdd      } |       t        _        	 d |t        _        y# |t        _        w xY ww)zContextmanager that installs the trap app.

    The trap means that anything trying to use the current or default app
    will raise an exception.
    c                       e Zd ZW  Zy)set_trap.<locals>.NonTLSN)r   r   r    current_app)traps   r   NonTLSr?   O   s    r   rB   N)r   r   _tlsset_default_app)appprev_tlsrB   rA   s      @r   set_traprG   D   sP      6D{{H
4  (FKhs   AA0A  A0 A--A0c              #   ~  K   t        j                         }t         j                  }t        t         j                        }t        j                  t         j                        }	 |rt        |       5  d ddd       nd t        j                  |       |t         j                  _        | |ur| j                          |t         _        |t         _        y# 1 sw Y   ^xY w# t        j                  |       |t         j                  _        | |ur| j                          |t         _        |t         _        w xY ww)zWSetup default app for testing.

    Ensures state is clean after the test returns.
    N)r   get_current_appdefault_appset_on_app_finalizersweakrefWeakSet_appsrG   rD   rC   r@   close)rE   use_trapprev_current_appprev_default_appprev_finalizers	prev_appss         r   setup_default_apprV   Y   s      --/))&334O-I!#   /0"2&&IIK$3!  
 	/0"2&&IIK$3! s8   A!D=$C$ 1C6C$ AD=C!C$ $AD::D=)F)r!   rM   
contextlibr   copyr   kombu.utils.importsr   celeryr   r   r6   r   log_clsr$   r<   rG   rV   r"   r   r   <module>r\      s    3  %  . ! "'h'	 : : ".0 " d5T$*  ( ! !r   