o
    wvXj$  ã                	   @   sÄ   d Z ddlmZm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eƒ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.é    )Úabsolute_importÚunicode_literalsN)Ú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                   @   s   e Zd ZdZdd„ ZdS )ÚTrapz·Trap 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ƒ‚)NÚ_is_coroutineÚ__func__zTest depends on current_app)ÚprintÚRuntimeError)ÚselfÚname© r   úW/var/www/html/myproject/venv/lib/python3.10/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 t| ƒj|i |¤Ž d| _d S )NT)Úsuperr!   Ú__init__Ú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r| dd¡ |dur&| dd¡ |r*dn|}t| p0d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   Úadd_defaults)
r   ÚconfigÚenable_loggingr,   r-   r/   r.   r&   r+   Útest_appr   r   r   ÚTestApp1   s&   ÿûú
r8   c                 #   sD   � t ƒ ‰ tj}t ˆ ¡ G ‡ fdd„dtƒ}|ƒ t_dV  |t_dS )z—Contextmanager 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   ©Útrapr   r   ÚNonTLSQ   s    r<   N)r   r   Ú_tlsÚset_default_appÚobject)ÚappÚprev_tlsr<   r   r:   r   Úset_trapF   s   €

rB   c                 c   s’   � t  ¡ }t j}tt jƒ}t t j¡}|r-t| ƒ� dV  W d  ƒ n1 s'w   Y  ndV  t  	|¡ |t j
_| |urA|  ¡  |t _|t _dS )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Ú_appsrB   r>   r=   r9   Úclose)r@   Úuse_trapÚprev_current_appÚprev_default_appÚprev_finalizersÚ	prev_appsr   r   r   Úsetup_default_appY   s"   €

ÿ€

rP   )F)r    Ú
__future__r   r   rG   Ú
contextlibr   Úcopyr   Úkombu.utils.importsr   Úceleryr   r   r2   r?   r   Úlog_clsr!   r8   rB   rP   r   r   r   r   Ú<module>   s2    ø
ÿ
