o
    i\%                     @   s   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dZedddZdZG dd deZedkr\e  dS dS )    N)Context)
ContextVar)copy_context)partial)
getcurrent)greenlet   )PY314)TestCaseid)defaultvarc                   @   sl   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )ContextVarsTestsc                 O   s   t  j|i |S N)r   run)selfargskwargs r   _/var/www/html/arapca_proje/venv/lib/python3.10/site-packages/greenlet/tests/test_contextvars.py_new_ctx_run      zContextVarsTests._new_ctx_runc                 C   sb   t }|d u r| |  n| | | || tdD ]}||   d7  < |  qd S )N   r   )ID_VARassertIsNonegetassertEqualsetrange)r   greenlet_idcallbackcountsexpectctx_var_r   r   r   
_increment   s   
zContextVarsTests._incrementc              	      sT  t d t j tdd tdD  fddtddD }|D ]}dkr0t |_q%d	kr9t j|_q%td
D ]}t    d7  < |D ]}|  qLq>dkrdt	|D ]}|  q\n	|D ]}|  qf|D ]}
|j dkr|j qo|j qod	krdddddd d S t td
g d S )Nr   c                 s   s    | ]}|d fV  qdS )r   Nr   .0ir   r   r   	<genexpr>.   s    z1ContextVarsTests._test_context.<locals>.<genexpr>   c              
      sX   g | ](}t td krtt jjnj| dkr|d ndv r%dnddqS )r   sharer   )r   r   r   N)r   r    r!   r"   )r   r   r   r   r%   r&   r    r!   propagate_byr   r   r   
<listcomp>0   s     z2ContextVarsTests._test_context.<locals>.<listcomp>r   r   r+   r   r      )r   r   r         )r   r   r   switchdictr   r   
gr_contextr   reversed
assertTruedeadr   assertIsNotNoner   values)r   r-   letsletr(   r   r,   r   _test_context)   s>   





zContextVarsTests._test_contextc                 C      |  | jd d S )Nr   r   r<   r   r   r   r   &test_context_propagated_by_context_runf   r   z7ContextVarsTests.test_context_propagated_by_context_runc                 C   r=   )Nr   r>   r?   r   r   r   ,test_context_propagated_by_setting_attributei   r   z=ContextVarsTests.test_context_propagated_by_setting_attributec                 C   s   |  | jd  d S r   r>   r?   r   r   r   test_context_not_propagatedl   r   z,ContextVarsTests.test_context_not_propagatedc                 C   r=   )Nr+   r>   r?   r   r   r   test_context_sharedo   r   z$ContextVarsTests.test_context_sharedc                 C   s@   t t j}t t j}|t j |t j |  d S r   )r   r   r   r2   r   r   let1let2r   r   r   test_break_ctxvarsr   s
   z#ContextVarsTests.test_break_ctxvarsc                 C   sL   t t j}t t j}t |_t |_|  |  |  |  d S r   )r   r   r2   r   r4   rD   r   r   r   9test_not_broken_if_using_attribute_instead_of_context_run|   s   zJContextVarsTests.test_not_broken_if_using_attribute_instead_of_context_runc                    sF  t d   fdd}t| td
  `W d    n1 s#w   Y   j   \}}| j 	|t  d 	|t  d 	|
t jd | _    j| d  _    j| d  _    j d  t  	t|tsdnd 	t|tsd d S d d S )Nc                     sX   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   r4   r   assertIsInstancer   r   r   parentr2   )old_contextnew_contextgrr   r   r   target   s6   

zFContextVarsTests.test_context_assignment_while_running.<locals>.targetzcan't delete context attributer   r   )r   r   r   assertRaisesRegexAttributeErrorr4   r   r2   assertIsr   r   r   gccollectsysgetrefcountr	   )r   rO   rK   rL   r   rM   r   %test_context_assignment_while_running   s2   
)$z6ContextVarsTests.test_context_assignment_while_runningc                    s  dd l }td  t  | | | | g fdd fdd}|j|dd}|  d d }| t	d	 t
|d
 W d    n1 sZw   Y  | t	d	 d |_W d    n1 ssw   Y    d | |j  | |jt d d |_  |d | |d g | |j  |_| |j  d d = d }d }d S )Nr   c                      sD   t d   d t d t j   t   d S )Nr   
   r   )VAR_VARr   waitr   rJ   r2   appendr   r   )holder
is_runningshould_suspendr   r   greenlet_in_thread_fn   s   


zXContextVarsTests.test_context_assignment_different_thread.<locals>.greenlet_in_thread_fnc                     sF   t }  | _|  |     d |   ~ t   d S )NrX   )r   r4   r[   r2   r   rZ   )rN   )ctxdid_suspendr_   r\   should_exitr   r   	thread_fn   s   


zLContextVarsTests.test_context_assignment_different_thread.<locals>.thread_fnT)rO   daemonrX   zrunning in a differentr4   r   )	threadingrY   r   r   EventThreadstartrZ   rP   
ValueErrorgetattrr4   rR   r   joinr   )r   re   rc   threadrN   r   )r`   ra   r_   r\   r]   rb   r^   r   (test_context_assignment_different_thread   sD   




z9ContextVarsTests.test_context_assignment_different_threadc                 C   s>   t  }| td | |_W d    d S 1 sw   Y  d S )Nz6greenlet context must be a contextvars.Context or None)r   rP   	TypeErrorr4   )r   gr   r   r   "test_context_assignment_wrong_type  s   "z3ContextVarsTests.test_context_assignment_wrong_typeN)__name__
__module____qualname__r   r%   r<   r@   rA   rB   rC   rG   rH   rW   rm   rp   r   r   r   r   r      s    =

JBr   __main__)rS   rU   unittestcontextvarsr   r   r   	functoolsr   r   r    r	   r
   r   rY   r   rq   mainr   r   r   r   <module>   s(      