
    Bh                     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
mZ d dlmZ d dlmZ d dlmZmZ d d	lmZ  G d
 d      Z G d d      Z G d de      Z G d d      Z G d d      Z G d d      Z G d d      Zed        Zed        Zed        Z G d d      Zed        Z y)    N)contextmanager)StringIO)rmtree)_existsmkdtemptemplate)get_user_model)override_settings)activateget_language)apphook_poolc                       e Zd Zy)NULLN)__name__
__module____qualname__     T/home/dcms/DCMS/lib/python3.12/site-packages/cms/test_utils/util/context_managers.pyr   r      s    r   r   c                        e Zd ZddZd Zd Zy)StdOverrideNc                 8    || _         |xs
 t               | _        y N)stdr   buffer)selfr   r   s      r   __init__zStdOverride.__init__   s    *
r   c                 j    t        t        d| j                  z  | j                         | j                  S )Nstd%s)setattrsysr   r   r   s    r   	__enter__zStdOverride.__enter__   s%    Wtxx'5{{r   c           	      v    t        t        d| j                  z  t        t        d| j                  z               y )Nr   z	__std%s__)r    r!   r   getattrr   typevalue	tracebacks       r   __exit__zStdOverride.__exit__   s'    Wtxx'kDHH6L)MNr   )outNr   r   r   r   r#   r*   r   r   r   r   r      s    +Or   r   c                   $     e Zd ZdZd fd	Z xZS )StdoutOverridea  
    This overrides Python's the standard output and redirects it to a StringIO
    object, so that on can test the output of the program.

    example:
    lines = None
    with StdoutOverride() as buffer:
        # print stuff
        lines = buffer.getvalue()
    c                 &    t         |   d|       y )Nr+   )superr   )r   r   	__class__s     r   r   zStdoutOverride.__init__*   s    'r   r   )r   r   r   __doc__r   __classcell__)r1   s   @r   r.   r.      s    	( (r   r.   c                       e Zd Zd Zd Zd Zy)LanguageOverridec                     || _         y r   )newlang)r   languages     r   r   zLanguageOverride.__init__/   s	    r   c                 L    t               | _        t        | j                         y r   )r   oldlangr   r7   r"   s    r   r#   zLanguageOverride.__enter__2   s    #~r   c                 .    t        | j                         y r   )r   r:   r&   s       r   r*   zLanguageOverride.__exit__6   s    r   Nr,   r   r   r   r5   r5   .   s     r   r5   c                   0    e Zd ZdZdedfdZd Zd Zd Zy)TemporaryDirectorya+  Create and return a temporary directory.  This has the same
    behavior as mkdtemp but can be used as a context manager.  For
    example:

        with TemporaryDirectory() as tmpdir:
            ...

    Upon exiting the context, the directory and everything contained
    in it are removed.
     Nc                 (    t        |||      | _        y r   )r   name)r   suffixprefixdirs       r   r   zTemporaryDirectory.__init__F   s    FFC0	r   c                     | j                   S r   )r@   r"   s    r   r#   zTemporaryDirectory.__enter__I   s    yyr   c                 Z    t        | j                        rt        | j                         y y r   )r   r@   _rmtreer"   s    r   cleanupzTemporaryDirectory.cleanupL   s    499DII r   c                 $    | j                          y r   )rG   r   excr(   tbs       r   r*   zTemporaryDirectory.__exit__P   s    r   )	r   r   r   r2   r   r   r#   rG   r*   r   r   r   r=   r=   :   s$    	 !t 1r   r=   c                       e Zd Zd Zd Zd Zy)UserLoginContextc                      || _         || _        y r   )testcaseuser)r   rO   rP   s      r   r   zUserLoginContext.__init__U   s     	r   c                    | j                   j                  j                  t        | j                  t               j                        t        | j                  t               j                              }t        | j                   dd       | _        | j                  | j                   _        | j                   j                  |       y )N)usernamepasswordrP   )	rO   clientloginr%   rP   r	   USERNAME_FIELDold_user
assertTrue)r   loginoks     r   r#   zUserLoginContext.__enter__Y   s    --&&,,gdiiIYIhIh6i6=diiIYIhIh6i - kvt<!YY  )r   c                     | j                   | j                  _        | j                  j                  st        | j                  d       | j                  j                  j                          y )NrP   )rW   rO   rP   delattrrT   logoutrI   s       r   r*   zUserLoginContext.__exit__`   sC    !]]}}!!DMM6*##%r   Nr,   r   r   r   rM   rM   T   s    *&r   rM   c                   "    e Zd ZdZd Zd Zd Zy)ChangeModelz
    Changes attributes on a model while within the context.

    These changes *ARE* saved to the database for the context!
    c                      || _         || _        y r   )instance	overrides)r   r`   ra   s      r   r   zChangeModel.__init__m   s     "r   c                    i | _         | j                  j                         D ]D  \  }}t        | j                  |t
              | j                   |<   t        | j                  ||       F | j                  j                          y r   )oldra   itemsr%   r`   r   r    save)r   keyr(   s      r   r#   zChangeModel.__enter__q   se    ....0 	/JC#DMM3=DHHSMDMM3.	/ 	r   c                     | j                   j                         D ]G  }| j                  |   }|t        u rt	        | j
                  |       1t        | j
                  ||       I | j
                  j                          y r   )ra   keysrc   r   r[   r`   r    re   )r   rJ   r(   rK   rf   	old_values         r   r*   zChangeModel.__exit__x   sc    >>&&( 	7CID s+sI6	7 	r   N)r   r   r   r2   r   r#   r*   r   r   r   r^   r^   g   s    
#r   r^   c              #   H   K   | j                   }d| _         d  || _         y w)NT)disabled)loggerrc   s     r   disable_loggerrm      s      
//CFO	FOs    "c               '   d  K   t         j                  }t         j                  }t         j                  }t        j                          | D ]  }t        j
                  |        	 d  |t         _        |t         _        |t         _        y # |t         _        |t         _        |t         _        w xY wwr   )r   apphooksapps
discoveredclearregister)hooks	_apphooks_apps_discoveredhooks        r   ro   ro      s     %%IE))K $d#$. )!"- !*!"-s   A!B0$B
 ("B0
#B--B0c               '      K   t               }| D ]  }|j                  |        	 | | D ]  }|j                  |        y # | D ]  }|j                  |        w xY wwr   )SignalTesterconnect
disconnect)signalsenvsignals      r   signal_testerr      sl     
.C s#	 	#Fc"	#g 	#Fc"	#s   #A A A AA c                       e Zd Zd Zd Zy)rz   c                      d| _         g | _        y )Nr   )
call_countcallsr"   s    r   r   zSignalTester.__init__   s    
r   c                 h    | xj                   dz  c_         | j                  j                  ||f       y )N   )r   r   append)r   argskwargss      r   __call__zSignalTester.__call__   s&    1

4.)r   N)r   r   r   r   r   r   r   r   rz   rz      s    *r   rz   c              #   ~   K   ddl m} t        |       5   |        d  d d d         |        y # 1 sw Y   xY ww)Nr   )_clear_placeholder_conf_cache)CMS_PLACEHOLDER_CONF)cms.utils.placeholderr   r
   )r   r   s     r   override_placeholder_confr      s9     C 
0D	E %' "#	 s   =1=:=)!r!   
contextlibr   ior   shutilr   rF   tempfiler   r   r   django.contrib.authr	   django.test.utilsr
   django.utils.translationr   r   cms.apphook_poolr   r   r   r.   r5   r=   rM   r^   rm   ro   r   rz   r   r   r   r   <module>r      s    
 %  $ / / . / ; )	 	
O 
O([ (	 	 4& && 6   . . 
# 
#* * $ $r   