
    Bi\%                         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  edd      Z edd      ZdZ G d de      Zedk(  r ej$                          yy)    N)Context)
ContextVar)copy_context)partial)
getcurrent)greenlet   )PY314)TestCaseid)defaultvarc                   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      e/home/ubuntu/crypto_trading_bot/.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>.   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$   r-   letslets          r   _test_contextzContextVarsTests._test_context)   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   r?   r   s    r   &test_context_propagated_by_context_runz7ContextVarsTests.test_context_propagated_by_context_runf       $,,e4r   c                 <    | j                  | j                  d       y )Nr    rA   rB   s    r   ,test_context_propagated_by_setting_attributez=ContextVarsTests.test_context_propagated_by_setting_attributei   rD   r   c                 <    | j                  | j                  d        y r   rA   rB   s    r   test_context_not_propagatedz,ContextVarsTests.test_context_not_propagatedl   s    $,,d3r   c                 <    | j                  | j                  d       y )Nr0   rA   rB   s    r   test_context_sharedz$ContextVarsTests.test_context_sharedo   s    $,,g6r   c                 $   t        t               j                        }t        t               j                        }|j                  t	               j                         |j                  t	               j                         |j                          y r   )r   r   r   r4   r   r   let1let2s      r   test_break_ctxvarsz#ContextVarsTests.test_break_ctxvarsr   sY    **+**+JL''(JL''( 	r   c                 4   t        t               j                        }t        t               j                        }t               |_        t               |_        |j                          |j                          |j                          |j                          y r   )r   r   r4   r   r6   rL   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   r6   r    assertIsInstancer   r   r   parentr4   )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AttributeErrorr6   r   r4   assertIsr   r   r   gccollectsysgetrefcountr
   )r   rY   rV   rW   rX   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   rU   r4   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 )Nrd   )r   r6   rg   r4   r    rf   )rX   ctxdid_suspendrk   rh   should_exits    r   	thread_fnzLContextVarsTests.test_context_assignment_different_thread.<locals>.thread_fn   sS    /0BBMMM"IIKOOR IIKJr   T)rY   daemonrd   zrunning in a differentr6   r   )	threadingre   r    r   EventThreadstartrf   rZ   
ValueErrorgetattrr6   r\   r   joinr   )r   rr   rp   threadrX   rm   rn   rk   rh   ri   ro   rj   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   rZ   	TypeErrorr6   )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(   r?   rC   rF   rH   rJ   rO   rQ   ra   rz   r~   r+   r   r   r   r      sD    3	;=z5547HNT@D r   r   __main__)r]   r_   unittestcontextvarsr   r   r   	functoolsr   r   r    r
   r   r   re   r   r   mainr+   r   r   <module>r      sn    	 
   " $      
D$	'
UD
)
| x | ~ zHMMO r   