
    Rc (                     t   d dl mZ d dl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	 d dl	m
Z
 dd	lmZ 	 d d
lmZ d dlmZ d dlmZ  edd          Z edd          ZdZn# e$ r	 dxZxZZY nw xY w eedud           G d de                      Z eedud           G d de                      ZdS )    )print_functionN)partial)
skipUnless)skipIf)greenlet)
getcurrent   )TestCase)Context)
ContextVar)copy_contextid)defaultvarzContextVar not supportedc                   V    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd ZdS )ContextVarsTestsc                 4     t                      j        |i |S N)r   run)selfargskwargss      ?lib/python3.11/site-packages/greenlet/tests/test_contextvars.py_new_ctx_runzContextVarsTests._new_ctx_run"   s    !|~~!426222    c                 ^   t           }|(|                     |                                           n(|                     |                                |           |                    |           t          d          D ].}||                                xx         dz  cc<    |             /d S )N   r	   )ID_VARassertIsNonegetassertEqualsetrange)r   greenlet_idcallbackcountsexpectctx_var_s          r   
_incrementzContextVarsTests._increment%   s     	4gkkmm,,,,W[[]]F333K   q 	 	A7;;==!!!Q&!!!HJJJJ	 	r   c           	          t                               d           t                      j        t	          d t          d          D                        fdt          dd          D             }|D ]:}dk    rt                      |_        dk    rt                      j        |_        ;t          d          D ]B}t                                           xx         dz  cc<   |D ]}|                                 Cd	k    r't          |          D ]}|                                 n|D ]}|                                 |D ]W} 
                    |j                   d	k    r                     |j                   =                     |j                   Xdk    r                     ddddd
d           d S                      t                                                    t          dg                     d S )Nr   c              3      K   | ]}|d fV  	dS )r   N ).0is     r   	<genexpr>z1ContextVarsTests._test_context.<locals>.<genexpr>4   s&      //q!f//////r      c                     g | ]e}t          t          d k    r&t          t                      j        j                  nj        |dk    r|dz
  ndv rdnd                    fS )r   sharer	   )r"   r   r   N)r$   r%   r&   r'   )r   r   r   r   r*   )r.   r/   r%   r&   propagate_byr   s     r   
<listcomp>z2ContextVarsTests._test_context.<locals>.<listcomp>6   s     
 
 
  W "U*@ NN&O   15!)W4 BAEE%7AAAT    
 
 
r   r	   r"   r3   r   r      )r   r	   r         )r   r"   r   switchdictr#   r   
gr_contextr    reversed
assertTruedeadr   assertIsNotNoner!   values)r   r4   letsletr/   r%   r&   s   ``   @@r   _test_contextzContextVarsTests._test_context0   sP   

1<<&//eAhh/////
 
 
 
 
 
 
 1a[[
 
 
"  	9 	9Cu$ 9!-( 9!+!8q 	 	A6::<<   A%     

 5  	~~  

   

 		5 		5COOCH%%%
 u$ 5!!#.1111$$S^4444 7" 	=VqQ1%C%CDDDDDS113s88<<<<<r   c                 <    |                      | j        d           d S )Nr   r   rC   r   s    r   &test_context_propagated_by_context_runz7ContextVarsTests.test_context_propagated_by_context_runl   !    $,e44444r   c                 <    |                      | j        d           d S )Nr"   rE   rF   s    r   ,test_context_propagated_by_setting_attributez=ContextVarsTests.test_context_propagated_by_setting_attributeo   rH   r   c                 <    |                      | j        d            d S r   rE   rF   s    r   test_context_not_propagatedz,ContextVarsTests.test_context_not_propagatedr   s!    $,d33333r   c                 <    |                      | j        d           d S )Nr3   rE   rF   s    r   test_context_sharedz$ContextVarsTests.test_context_sharedu   s!    $,g66666r   c                 F   t          t                      j                  }t          t                      j                  }|                    t	                      j                   |                    t	                      j                   |                                 d S r   )r   r   r   r9   r   r   let1let2s      r   test_break_ctxvarsz#ContextVarsTests.test_break_ctxvarsx   so    *++*++JLL'(((JLL'((( 	r   c                 r   t          t                      j                  }t          t                      j                  }t                      |_        t                      |_        |                                 |                                 |                                 |                                 d S r   )r   r   r9   r   r;   rP   s      r   9test_not_broken_if_using_attribute_instead_of_context_runzJContextVarsTests.test_not_broken_if_using_attribute_instead_of_context_run   sx    
+,,
+,,&..&..r   c                 `    t                               d             fd}t          |                               t          d          5  `d d d            n# 1 swxY w Y                        j                                                   \  }}                     |j                    	                    |t                    d            	                    |t                    d            	                    |
                    t           j                  d           |_                                                              j        |           d _                                                              j        |           d _                                                              j                   d t          j                      	                    t          j        |          d            	                    t          j        |          d           d S )Nc                                          t                                                                          j                   t                              d                               j        t                                         t                                          d                               j        t                   d           j        } d _                             t                                                                          j                   t                              d                               j        t                                         t                                          d                               j        t                   d           j        }t                      j	        
                    | |f                               t                                          d           |_                            t                                          d           t                      j	        
                                                      t                                                                          j                   | _                            t                                          d           t                      j	        
                                                      t                                                                          j                   d S )Nr	   r   )r   r   r    r;   r"   assertIsInstancer   r!   r   parentr9   )old_contextnew_contextgrr   s     r   targetzFContextVarsTests.test_context_assignment_while_running.<locals>.target   sj   fjjll+++bm,,, JJqMMM!!"-999VZZ\\1---R]62A666 -K BMfjjll+++bm,,,JJqMMM!!"-999VZZ\\1---R]62A666-KLL&&['ABBB VZZ\\1---'BMVZZ\\1---LL&&(((fjjll+++bm,,,'BMVZZ\\1---LL&&(((fjjll+++bm,,,,,r   zcan't delete context attributer	   r   )r   r"   r   assertRaisesRegexAttributeErrorr;   r   r9   assertIsr!   r   r    gccollectsysgetrefcount)r   r]   rZ   r[   r\   s   `   @r   %test_context_assignment_while_runningz6ContextVarsTests.test_context_assignment_while_running   s%   

4'	- '	- '	- '	- '	- '	-R f##N4TUU 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	"-(((#%99;; [k2=111V,a000V,a00044a888#
		bm[111
		bm[111
		"-((( 

55q99955q99999s   AA #A c                   	
 dd l }t                              d            t                      |                                	|                                |                                |                                
g 	fd
fd}|                    |d          }|                                 	                    d           d         }|                     t          d          5  t          |d           d d d            n# 1 swxY w Y   |                     t          d          5  d |_        d d d            n# 1 swxY w Y                                                        d           |                     |j                   |                     |j        t                   d	           d |_        
                                 |                    d           |                     |d g           |                     |j                   |_        |                     |j                   d d = d }d }d S )
Nr   c                  d   t                               d                                                                d           t                               d           t                      j                                                              t                                                      d S )Nr	   
   r   )VAR_VARr"   waitr   rY   r9   appendr    )holder
is_runningshould_suspends   r   greenlet_in_thread_fnzXContextVarsTests.test_context_assignment_different_thread.<locals>.greenlet_in_thread_fn   s~    KKNNNNN###KKNNNLL&&(((MM'++--(((((r   c                     t                    } | _                            |            |                                                                                       d           |                                  ~ t                       d S )Nrh   )r   r;   rk   r9   r"   rj   )r\   ctxdid_suspendro   rl   should_exits    r   	thread_fnzLContextVarsTests.test_context_assignment_different_thread.<locals>.thread_fn   sx    /00BBMMM"IIKKKOOR   IIKKKJJJJJr   T)r]   daemonrh   zrunning in a differentr;   r   )	threadingri   r"   r   EventThreadstartrj   r^   
ValueErrorgetattrr;   r`   r!   joinr   )r   rv   rt   threadr\   rq   rr   ro   rl   rm   rs   rn   s        @@@@@@@r   (test_context_assignment_different_threadz9ContextVarsTests.test_context_assignment_different_thread   s   Dii__&&
"**oo''oo''	) 	) 	) 	) 	) 	) 	)		 		 		 		 		 		 		 		 		 !!4!@@AY ##J0HII 	& 	&B%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&##J0HII 	! 	! BM	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	 	bmS)))w/333B"d,,, 	"-(((bmS))) 111Is$   9DDD<EEEc                     t                      }|                     t          d          5  | |_        d d d            d S # 1 swxY w Y   d S )Nz6greenlet context must be a contextvars.Context or None)r   r^   	TypeErrorr;   )r   gs     r   "test_context_assignment_wrong_typez3ContextVarsTests.test_context_assignment_wrong_type  s    JJ##I$\^ ^ 	  	 AL	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   ?AAN)__name__
__module____qualname__r   r*   rC   rG   rJ   rL   rN   rS   rU   re   r~   r   r-   r   r   r   r       s        3 3 3	 	 	:= := :=x5 5 55 5 54 4 47 7 7    F: F: F:P@ @ @D         r   r   zContextVar supportedc                       e Zd Zd ZdS )NoContextVarsTestsc                    t          t                      j                  }|                     t	          |d                     |                     t                    5  t          |d           d d d            n# 1 swxY w Y   |                     t                    5  d |_        d d d            n# 1 swxY w Y   |                                 |                     t                    5  t          |d           d d d            n# 1 swxY w Y   |                     t                    5  d |_        d d d            n# 1 swxY w Y   ~d S )Nr;   )	r   r   r9   assertFalsehasattrassertRaisesr_   r{   r;   )r   rQ   s     r   test_contextvars_errorsz*NoContextVarsTests.test_contextvars_errors  s"   
+,,|44555~.. 	( 	(D,'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( ~.. 	# 	#"DO	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	~.. 	( 	(D,'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( ~.. 	# 	#"DO	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# DDsH   A;;A?A? B44B8;B8-D

DD/EE
EN)r   r   r   r   r-   r   r   r   r     s#            r   r   )
__future__r   ra   rc   	functoolsr   unittestr   r   r   r    r
   contextvarsr   r   r   r   ri   ImportErrorr   r   r-   r   r   <module>r      s   % % % % % % 				 



                                    /######&&&&&&(((((( Zd+++Fj---GJJ / / /*..G.j<<</ G4!;<<y  y  y  y  y x y  y  =<y x t344       54  s   .A# #A10A1