a
    [gl(                     @   s"  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 zDd 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W n ey   d Z ZZY n0 eedudG dd deZeedudG dd deZedkre  dS )    )print_functionN)partial)
skipUnless)skipIf)greenlet)
getcurrent   )TestCase)Context)
ContextVar)copy_contextid)defaultvarzContextVar not supportedc                   @   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   m/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/greenlet/tests/test_contextvars.py_new_ctx_run#   s    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expectZctx_var_r   r   r   
_increment&   s    
zContextVarsTests._incrementc              	      sV  t d t j tdd tdD  fddtddD }|D ](}dkr`t |_qJd	krJt j|_qJtd
D ]*}t    d7  < |D ]}|  qq|dkrt	|D ]}|  qn|D ]}|  q|D ]4}
|j dkr|j qވ|j qވd	kr8dddddd nt td
g d S )Nr   c                 s   s   | ]}|d fV  qdS )r   Nr   .0ir   r   r   	<genexpr>6       z1ContextVarsTests._test_context.<locals>.<genexpr>   c              
      sX   g | ]P}t td kr$tt jjnj| dkr>|d ndv rJd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>8   s   z2ContextVarsTests._test_context.<locals>.<listcomp>r   r   r,   r   r      )r   r   r         )r   r   r   switchdictr   r   
gr_contextr   reversed
assertTrueZdeadr   ZassertIsNotNoner   values)r   r.   ZletsZletr(   r   r-   r   _test_context1   s8    




zContextVarsTests._test_contextc                 C   s   |  | jd d S )Nr   r   r9   r   r   r   r   &test_context_propagated_by_context_runn   s    z7ContextVarsTests.test_context_propagated_by_context_runc                 C   s   |  | jd d S )Nr   r:   r;   r   r   r   ,test_context_propagated_by_setting_attributeq   s    z=ContextVarsTests.test_context_propagated_by_setting_attributec                 C   s   |  | jd  d S r   r:   r;   r   r   r   test_context_not_propagatedt   s    z,ContextVarsTests.test_context_not_propagatedc                 C   s   |  | jd d S )Nr,   r:   r;   r   r   r   test_context_sharedw   s    z$ContextVarsTests.test_context_sharedc                 C   s@   t t j}t t j}|t j |t j |  d S r   )r   r   r   r3   r   r   let1Zlet2r   r   r   test_break_ctxvarsz   s
    z#ContextVarsTests.test_break_ctxvarsc                 C   sL   t t j}t t j}t |_t |_|  |  |  |  d S r   )r   r   r3   r   r5   r@   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                    s0  t d   fdd}t| td  `W d    n1 sF0    Y   j   \}}| j 	|t  d 	|t  d 	|
t jd | _    j| d  _    j| d  _    j d  t  	t|d 	t|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   r5   r   ZassertIsInstancer
   r   r   parentr3   )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AttributeErrorr5   r   r3   assertIsr   r   r   gcZcollectsysgetrefcount)r   rI   rE   rF   r   rG   r   %test_context_assignment_while_running   s0    
)"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 s0    Y  | t	d	 d |_W d    n1 s0    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   rD   r3   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 )NrQ   )r   r5   rT   r3   r   rS   )rH   )ctxdid_suspendrX   rU   should_exitr   r   	thread_fn   s    

zLContextVarsTests.test_context_assignment_different_thread.<locals>.thread_fnT)rI   daemonrQ   zrunning in a differentr5   r   )	threadingrR   r   r
   EventThreadstartrS   rJ   
ValueErrorgetattrr5   rL   r   joinr   )r   r^   r\   threadrH   r   )rY   rZ   rX   rU   rV   r[   rW   r   (test_context_assignment_different_thread   s@    

($


z9ContextVarsTests.test_context_assignment_different_threadc                 C   s<   t  }| td | |_W d    n1 s.0    Y  d S )Nz6greenlet context must be a contextvars.Context or None)r   rJ   	TypeErrorr5   )r   gr   r   r   "test_context_assignment_wrong_type  s
    z3ContextVarsTests.test_context_assignment_wrong_typeN)__name__
__module____qualname__r   r%   r9   r<   r=   r>   r?   rB   rC   rP   rf   ri   r   r   r   r   r   !   s   =

HBr   zContextVar supportedc                   @   s   e Zd Zdd ZdS )NoContextVarsTestsc                 C   s   t t j}| t|d | t t|d W d    n1 sF0    Y  | t d |_W d    n1 sv0    Y  |  | t t|d W d    n1 s0    Y  | t d |_W d    n1 s0    Y  ~d S )Nr5   )	r   r   r3   ZassertFalsehasattrassertRaisesrK   rc   r5   )r   rA   r   r   r   test_contextvars_errors!  s    ($($z*NoContextVarsTests.test_contextvars_errorsN)rj   rk   rl   rp   r   r   r   r   rm     s   rm   __main__)
__future__r   rM   rN   Zunittest	functoolsr   r   r   r   r    r	   contextvarsr
   r   r   r   rR   ImportErrorr   rm   rj   mainr   r   r   r   <module>   s2    ~
