
    gl(                     v   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  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j.                          yy# e$ r	 dxZxZZY Ww xY w)    )print_functionN)partial)
skipUnless)skipIf)greenlet)
getcurrent   )TestCase)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      _/var/www/api/v1/venv_getwork_v1/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&   sk    >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     /hq!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&   r/   letslets          r   _test_contextz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'H*c                 <    | j                  | j                  d       y )Nr   r   rA   r   s    r   &test_context_propagated_by_context_runz7ContextVarsTests.test_context_propagated_by_context_runn       $,,e4r   c                 <    | j                  | j                  d       y )Nr"   rC   rD   s    r   ,test_context_propagated_by_setting_attributez=ContextVarsTests.test_context_propagated_by_setting_attributeq   rF   r   c                 <    | j                  | j                  d        y r   rC   rD   s    r   test_context_not_propagatedz,ContextVarsTests.test_context_not_propagatedt   s    $,,d3r   c                 <    | j                  | j                  d       y )Nr2   rC   rD   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   r6   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   r6   r   r8   rN   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                  |      d        j                  t        j                  |      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    r8   r"   assertIsInstancer   r!   r   parentr6   )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AttributeErrorr8   r   r6   assertIsr!   r   r    gccollectsysgetrefcount)r   r[   rX   rY   rZ   s   `   @r   %test_context_assignment_while_runningz6ContextVarsTests.test_context_assignment_while_running   sl   

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


5q95q9/ VUs   G..G8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   rW   r6   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 )Nrf   )r   r8   ri   r6   r"   rh   )rZ   ctxdid_suspendrm   rj   should_exits    r   	thread_fnzLContextVarsTests.test_context_assignment_different_thread.<locals>.thread_fn   sS    /0BBMMM"IIKOOR IIKJr   T)r[   daemonrf   zrunning in a differentr8   r   )	threadingrg   r"   r   EventThreadstartrh   r\   
ValueErrorgetattrr8   r^   r!   joinr   )r   rt   rr   threadrZ   ro   rp   rm   rj   rk   rq   rl   s        @@@@@@@r   (test_context_assignment_different_threadz9ContextVarsTests.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+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\   	TypeErrorr8   )r   gs     r   "test_context_assignment_wrong_typez3ContextVarsTests.test_context_assignment_wrong_type  s7    J##I$\^AL^ ^ ^s   2;N)__name__
__module____qualname__r   r*   rA   rE   rH   rJ   rL   rQ   rS   rc   r|   r   r-   r   r   r   r   !   sC    3	;=z5547F:P@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)Nr8   )	r   r   r6   assertFalsehasattrassertRaisesr]   ry   r8   )r   rO   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_   ra   unittest	functoolsr   r   r   r   r    r
   contextvarsr   r   r   r   rg   ImportErrorr   r   r   mainr-   r   r   <module>r      s    % 	 
       /#&( d+F-GJ
 G4!;<z x z  =z z t34  5* zHMMO q  /*..G.j</s   (B* *B87B8