
    Yh-)                     z   S SK Jr  S SKrS SKrS SKrS SKJr  S SKJr  S SKJr  S SK	J	r	  S SK	J
r
  SS	KJr  SS
KJr   S SKJr  S SKJr  S SKJr  \" SSS9r\" SSS9rSr\" \SLS5       " S S\5      5       r\" \SLS5       " S S\5      5       r\S:X  a  \R0                  " 5         gg! \ a	    S=r=rr NYf = f)    )print_functionN)partial)
skipUnless)skipIf)greenlet)
getcurrent   )TestCase)PY314)Context)
ContextVar)copy_contextid)defaultvarzContextVar not supportedc                   \    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)ContextVarsTests!   c                 6    [        5       R                  " U0 UD6$ N)r   run)selfargskwargss      Q/var/www/html/env/lib/python3.13/site-packages/greenlet/tests/test_contextvars.py_new_ctx_runContextVarsTests._new_ctx_run#   s    ~!!42622    c                    [         nUc   U R                  UR                  5       5        O U R                  UR                  5       U5        UR	                  U5        [        S5       H$  nX5R                  5       ==   S-  ss'   U" 5         M&     g )N   r	   )ID_VARassertIsNonegetassertEqualsetrange)r   greenlet_idcallbackcountsexpectctx_var_s          r   
_incrementContextVarsTests._increment&   si    >gkkm,W[[]F3K qA;;=!Q&!J r   c                    [         R                  S5        [        5       R                  n[	        S [        S5       5       5      n[        SS5       Vs/ s Hd  n[        [        US:X  a(  [        [        5       R                  U R                  5      OU R                  UUUUS:X  a  US-
  O	US;   a  SOS S95      PMf     nnU H;  nUS	:X  a  [        5       Ul        M  US:X  d  M"  [        5       R                  Ul        M=     [        S
5       H;  nU[         R                  5       ==   S-  ss'   U H  nUR                  5         M     M=     US:X  a#  [        U5       H  nUR                  5         M     OU H  nUR                  5         M     U H\  nU R                  UR                  5        US:X  a  U R!                  UR                  5        MA  U R#                  UR                  5        M^     US:X  a  U R%                  USSSSSS.5        g U R%                  [        UR'                  5       5      [        S
/5      5        g s  snf )Nr   c              3   (   #    U  H  oS 4v   M
     g7f)r   N ).0is     r   	<genexpr>1ContextVarsTests._test_context.<locals>.<genexpr>6   s     /h!fhs      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)   r3   letslets          r   _test_contextContextVarsTests._test_context1   s   

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

  
 5 ~

 & 

  COOCHH%
 u$!!#..1$$S^^4  7"VqQ1%CDS13s8<i
s   A+Ic                 <    U R                  U R                  S5        g )Nr   r   rF   r   s    r   &test_context_propagated_by_context_run7ContextVarsTests.test_context_propagated_by_context_runn       $,,e4r   c                 <    U R                  U R                  S5        g )Nr%   rI   rJ   s    r   ,test_context_propagated_by_setting_attribute=ContextVarsTests.test_context_propagated_by_setting_attributeq   rM   r   c                 <    U R                  U R                  S 5        g r   rI   rJ   s    r   test_context_not_propagated,ContextVarsTests.test_context_not_propagatedt   s    $,,d3r   c                 <    U R                  U R                  S5        g )Nr7   rI   rJ   s    r   test_context_shared$ContextVarsTests.test_context_sharedw   s    $,,g6r   c                 $   [        [        5       R                  5      n[        [        5       R                  5      nUR                  [	        5       R                  5        UR                  [	        5       R                  5        UR                  5         g r   )r   r   r   r;   r   r   let1let2s      r   test_break_ctxvars#ContextVarsTests.test_break_ctxvarsz   sY    **+**+JL''(JL''( 	r   c                 4   [        [        5       R                  5      n[        [        5       R                  5      n[        5       Ul        [        5       Ul        UR                  5         UR                  5         UR                  5         UR                  5         g r   )r   r   r;   r   r=   rX   s      r   9test_not_broken_if_using_attribute_instead_of_context_runJContextVarsTests.test_not_broken_if_using_attribute_instead_of_context_run   s\    
++,
++,&.&.r   c                 D  ^ ^ [         R                  S 5        UU 4S jn[        U5      mT R                  [        S5         T?S S S 5        T R                  TR
                  5        TR                  5       u  p#T R                  UTR
                  5        T R                  U[            S5        T R                  U[            S5        T R                  UR                  [         R                  5      S5        UTl        TR                  5         T R                  TR
                  U5        S Tl        TR                  5         T R                  TR
                  U5        S Tl        TR                  5         T R                  TR
                  5        S m[        R                  " 5         T R                  [        R                  " U5      [         (       d  SOS5        T R                  [        R                  " U5      [         (       d  S5        g S5        g ! , (       d  f       GN= f)Nc                    > TR                  [        R                  5       5        TR                  TR                  5        [        R	                  S5        TR                  TR                  [        5        TR                  [        R                  5       S5        TR                  TR                  [           S5        TR                  n S Tl        TR                  [        R                  5       5        TR                  TR                  5        [        R	                  S5        TR                  TR                  [        5        TR                  [        R                  5       S5        TR                  TR                  [           S5        TR                  n[        5       R                  R                  X45        TR                  [        R                  5       S5        UTl        TR                  [        R                  5       S5        [        5       R                  R                  5         TR                  [        R                  5       5        TR                  TR                  5        U Tl        TR                  [        R                  5       S5        [        5       R                  R                  5         TR                  [        R                  5       5        TR                  TR                  5        g )Nr	   r    )r"   r!   r#   r=   r%   assertIsInstancer   r$   r   parentr;   )old_contextnew_contextgrr   s     r   targetFContextVarsTests.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AttributeErrorr=   r"   r;   assertIsr$   r   r#   gccollectsysgetrefcountr   )r   rg   rd   re   rf   s   `   @r   %test_context_assignment_while_running6ContextVarsTests.test_context_assignment_while_running   s{   

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


 	5q1M5qM1M3 VUs    H
Hc                   ^^^^^	^
^ SS K n[        R                  S 5        [        5       mUR	                  5       m	UR	                  5       mUR	                  5       mUR	                  5       m
/ mUU	U4S jmUUUUU
4S jnUR                  USS9nUR                  5         T	R                  S5        TS   nU R                  [        S5         [        US5        S S S 5        U R                  [        S5         S Ul        S S S 5        TR                  5         TR                  S5        U R                  UR                  T5        U R                  UR                  [           S	5        S Ul        T
R                  5         UR                  S5        U R                  TUS /5        U R                  UR                  5        TUl        U R                  UR                  T5        TS S 2	 S nS ng ! , (       d  f       GN= f! , (       d  f       GN= f)
Nr   c                  &  > [         R                  S5        TR                  5         TR                  S5        [         R                  S5        [        5       R                  R                  5         T R                  [         R                  5       5        g )Nr	   
   r    )VAR_VARr%   waitr   rc   r;   appendr#   )holder
is_runningshould_suspends   r   greenlet_in_thread_fnXContextVarsTests.test_context_assignment_different_thread.<locals>.greenlet_in_thread_fn   sW    KKNNN#KKNL&&(MM'++-(r   c                     > [        T5      n TU l        TR                  U 5        U R                  5         TR	                  5         TR                  S5        U R                  5         A [        5         g )Nrt   )r   r=   rw   r;   r%   rv   )rf   ctxdid_suspendr{   rx   should_exits    r   	thread_fnLContextVarsTests.test_context_assignment_different_thread.<locals>.thread_fn   sS    /0BBMMM"IIKOOR IIKJr   T)rg   daemonrt   zrunning in a differentr=   r    )	threadingru   r%   r   EventThreadstartrv   ri   
ValueErrorgetattrr=   rk   r$   joinr"   )r   r   r   threadrf   r~   r   r{   rx   ry   r   rz   s        @@@@@@@r   (test_context_assignment_different_thread9ContextVarsTests.test_context_assignment_different_thread   s   Di__&
"*oo'oo'	)		 		 !!4!@AY ##J0HIB% J##J0HI BM J 	 	bmmS)w/3B"d, 	"--(bmmS) 1I7 JIIIs   G*6G<*
G9<
Hc                     [        5       nU R                  [        S5         Xl        S S S 5        g ! , (       d  f       g = f)Nz6greenlet context must be a contextvars.Context or None)r   ri   	TypeErrorr=   )r   gs     r   "test_context_assignment_wrong_type3ContextVarsTests.test_context_assignment_wrong_type  s5    J##I$\^L^ ^ ^s   1
?r1   N)__name__
__module____qualname____firstlineno__r   r-   rF   rK   rO   rR   rU   r[   r^   rp   r   r   __static_attributes__r1   r   r   r   r   !   sD    3	;=z5547HNT@D r   r   zContextVar supportedc                       \ rS rSrS rSrg)NoContextVarsTestsi!  c                 \   [        [        5       R                  5      nU R                  [	        US5      5        U R                  [        5         [        US5        S S S 5        U R                  [        5         S Ul        S S S 5        UR                  5         U R                  [        5         [        US5        S S S 5        U R                  [        5         S Ul        S S S 5        Ag ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NW= f! , (       d  f       Ag = f)Nr=   )	r   r   r;   assertFalsehasattrassertRaisesrj   r   r=   )r   rY   s     r   test_contextvars_errors*NoContextVarsTests.test_contextvars_errors#  s    
++,|45~.D,' / ~."DO / 	~.D,' / ~."DO /  /. /.
 /. /. s0   C)8C:-DD)
C7:
D
D
D+r1   N)r   r   r   r   r   r   r1   r   r   r   r   !  s    r   r   __main__)
__future__r   rl   rn   unittest	functoolsr   r   r   r   r    r
   r   contextvarsr   r   r   r!   ru   ImportErrorr   r   r   mainr1   r   r   <module>r      s    % 	 
        /#&( d+F-GJ
 G4!;<| x |  =| ~ t34  5* zMMO u  /*..G.j</s   "B+ +B:9B: