
    +h-)                        d dl mZ d dl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 d dlmZ  edd      Z edd      ZdZ eedud       G d de             Z eedud       G d de             Zedk(  r ej0                          yy# e$ r	 dxZxZZY Ww xY w)    )print_functionN)partial)
skipUnless)skipIf)greenlet)
getcurrent   )TestCase)PY314)Context)
ContextVar)copy_contextid)defaultvarzContextVar not supportedc                   T    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y)ContextVarsTestsc                 6     t               j                  |i |S N)r   run)selfargskwargss      R/var/www/html/venv/lib/python3.12/site-packages/greenlet/tests/test_contextvars.py_new_ctx_runzContextVarsTests._new_ctx_run#   s    !|~!!42622    c                    t         }| | j                  |j                                n | j                  |j                         |       |j	                  |       t        d      D ]$  }||j                         xx   dz  cc<    |        & y )N   r	   )ID_VARassertIsNonegetassertEqualsetrange)r   greenlet_idcallbackcountsexpectctx_var_s          r   
_incrementzContextVarsTests._increment&   sp    >gkkm,W[[]F3K q 	A7;;=!Q&!J	r   c                 ^   t         j                  d       t               j                  }t	        d t        d      D              }t        dd      D cg c]b  }t        t        |dk(  r(t        t               j                  | j                        n| j                  ||||dk(  r|dz
  n|dv rdnd             d }}|D ]6  }|d	k(  rt               |_        |dk(  st               j                  |_        8 t        d
      D ]8  }|t         j                         xx   dz  cc<   |D ]  }|j                           : |dk(  r!t        |      D ]  }|j                           n|D ]  }|j                           |D ]Y  }| j                  |j                         |dk(  r| j!                  |j                         ?| j#                  |j                         [ |dk(  r| j%                  |dddddd       y | j%                  t        |j'                               t        d
g             y c c}w )Nr   c              3   $   K   | ]  }|d f 
 yw)r   N ).0is     r   	<genexpr>z1ContextVarsTests._test_context.<locals>.<genexpr>6   s     /q!f/s      r	   r   share)r#   r   )r%   r&   r'   r(   r#   r      )r   r	   r         )r   r#   r   switchdictr$   r   r   r   r   r+   
gr_contextr!   reversed
assertTruedeadr    assertIsNotNoner"   values)r   propagate_byr&   r'   r0   letslets          r   _test_contextzContextVarsTests._test_context1   s
   

1<&&/eAh//  1a[
  W "U*  N&&OO 15!)W4AE%7AT 
 
"  	9Cu$!-(!+!8!8		9 q 	A6::< A%  

	
 5 ~ 

  

  		5COOCHH%
 u$!!#..1$$S^^4		5 7"VqQ1%CDS13s8<i
s   A'H*c                 <    | j                  | j                  d       y )Nr   r   rB   r   s    r   &test_context_propagated_by_context_runz7ContextVarsTests.test_context_propagated_by_context_runn       $,,e4r   c                 <    | j                  | j                  d       y )Nr#   rD   rE   s    r   ,test_context_propagated_by_setting_attributez=ContextVarsTests.test_context_propagated_by_setting_attributeq   rG   r   c                 <    | j                  | j                  d        y r   rD   rE   s    r   test_context_not_propagatedz,ContextVarsTests.test_context_not_propagatedt   s    $,,d3r   c                 <    | j                  | j                  d       y )Nr3   rD   rE   s    r   test_context_sharedz$ContextVarsTests.test_context_sharedw   s    $,,g6r   c                 $   t        t               j                        }t        t               j                        }|j                  t	               j                         |j                  t	               j                         |j                          y r   )r   r   r   r7   r   r   let1let2s      r   test_break_ctxvarsz#ContextVarsTests.test_break_ctxvarsz   sY    **+**+JL''(JL''( 	r   c                 4   t        t               j                        }t        t               j                        }t               |_        t               |_        |j                          |j                          |j                          |j                          y r   )r   r   r7   r   r9   rO   s      r   9test_not_broken_if_using_attribute_instead_of_context_runzJContextVarsTests.test_not_broken_if_using_attribute_instead_of_context_run   s\    
++,
++,&.&.r   c                      t         j                  d         fd}t        |       j                  t        d      5  `d d d         j                  j
                         j                         \  }} j                  |j
                          j                  |t            d        j                  |t            d        j                  |j                  t         j                        d       |_        j                           j                  j
                  |       d _        j                           j                  j
                  |       d _        j                           j                  j
                         d t        j                           j                  t        j                  |      t         sdnd        j                  t        j                  |      t         sd       y d       y # 1 sw Y   xY w)Nc                     j                  t        j                                j                  j                         t        j	                  d       j                  j                  t               j                  t        j                         d       j                  j                  t           d       j                  } d _        j                  t        j                                j                  j                         t        j	                  d       j                  j                  t               j                  t        j                         d       j                  j                  t           d       j                  }t               j                  j                  | |f       j                  t        j                         d       |_        j                  t        j                         d       t               j                  j                          j                  t        j                                j                  j                         | _        j                  t        j                         d       t               j                  j                          j                  t        j                                j                  j                         y )Nr	   r   )r    r   r!   r9   r#   assertIsInstancer   r"   r   parentr7   )old_contextnew_contextgrr   s     r   targetzFContextVarsTests.test_context_assignment_while_running.<locals>.target   s   fjjl+bmm, JJqM!!"--9VZZ\1-R]]62A6 --K BMfjjl+bmm,JJqM!!"--9VZZ\1-R]]62A6--KL&&['AB VZZ\1-'BMVZZ\1-L&&(fjjl+bmm,'BMVZZ\1-L&&(fjjl+bmm,r   zcan't delete context attributer	   r   )r   r#   r   assertRaisesRegexAttributeErrorr9   r    r7   assertIsr"   r   r!   gccollectsysgetrefcountr   )r   r\   rY   rZ   r[   s   `   @r   %test_context_assignment_while_runningz6ContextVarsTests.test_context_assignment_while_running   s~   

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


 	5q1M5qM1M3	 	s   HHc                   	
 dd l }t        j                  d        t               |j	                         	|j	                         |j	                         |j	                         
g 	fd
fd}|j                  |d      }|j                          	j                  d       d   }| j                  t        d      5  t        |d       d d d        | j                  t        d      5  d |_        d d d        j                          j                  d       | j                  |j                         | j                  |j                  t           d	       d |_        
j                          |j                  d       | j                  |d g       | j                  |j                         |_        | j                  |j                         d d = d }d }y # 1 sw Y   xY w# 1 sw Y   xY w)
Nr   c                  &   t         j                  d       j                          j                  d       t         j                  d       t               j                  j                           j                  t         j                                y )Nr	   
   r   )VAR_VARr#   waitr   rX   r7   appendr!   )holder
is_runningshould_suspends   r   greenlet_in_thread_fnzXContextVarsTests.test_context_assignment_different_thread.<locals>.greenlet_in_thread_fn   sW    KKNNN#KKNL&&(MM'++-(r   c                      t              } | _        j                  |        | j                          j	                          j                  d       | j                          ~ t                y )Nrg   )r   r9   rj   r7   r#   ri   )r[   ctxdid_suspendrn   rk   should_exits    r   	thread_fnzLContextVarsTests.test_context_assignment_different_thread.<locals>.thread_fn   sS    /0BBMMM"IIKOOR IIKJr   T)r\   daemonrg   zrunning in a differentr9   r   )	threadingrh   r#   r   EventThreadstartri   r]   
ValueErrorgetattrr9   r_   r"   joinr    )r   ru   rs   threadr[   rp   rq   rn   rk   rl   rr   rm   s        @@@@@@@r   (test_context_assignment_different_threadz9ContextVarsTests.test_context_assignment_different_thread   s   Di__&
"*oo'oo'	)		 		 !!4!@AY ##J0HI 	&B%	&##J0HI 	! BM	! 	 	bmmS)w/3B"d, 	"--(bmmS) 1I7	& 	&	! 	!s   G+7G8+G58Hc                 |    t               }| j                  t        d      5  | |_        d d d        y # 1 sw Y   y xY w)Nz6greenlet context must be a contextvars.Context or None)r   r]   	TypeErrorr9   )r   gs     r   "test_context_assignment_wrong_typez3ContextVarsTests.test_context_assignment_wrong_type  s9    J##I$\^ 	 AL	  	  	 s   2;N)__name__
__module____qualname__r   r+   rB   rF   rI   rK   rM   rR   rT   rd   r}   r   r.   r   r   r   r   !   sD    3	;=z5547HNT@D r   r   zContextVar supportedc                       e Zd Zd Zy)NoContextVarsTestsc                 4   t        t               j                        }| j                  t	        |d             | j                  t              5  t        |d       d d d        | j                  t              5  d |_        d d d        |j                          | j                  t              5  t        |d       d d d        | j                  t              5  d |_        d d d        ~y # 1 sw Y   xY w# 1 sw Y   vxY w# 1 sw Y   HxY w# 1 sw Y   ~y xY w)Nr9   )	r   r   r7   assertFalsehasattrassertRaisesr^   rz   r9   )r   rP   s     r   test_contextvars_errorsz*NoContextVarsTests.test_contextvars_errors#  s    
++,|45~. 	(D,'	( ~. 	#"DO	# 	~. 	(D,'	( ~. 	#"DO	# 	( 	(	# 	#
	( 	(	# s0   C)8C5-DD)C25C>D
DN)r   r   r   r   r.   r   r   r   r   !  s    r   r   __main__)
__future__r   r`   rb   unittest	functoolsr   r   r   r   r    r
   r   contextvarsr   r   r   r   rh   ImportErrorr   r   r   mainr.   r   r   <module>r      s    % 	 
        /#&( d+F-GJ
 G4!;<| x |  =| ~ t34  5* zHMMO u  /*..G.j</s   (B0 0B>=B>