o
    E6d (                     @   s  d dl m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 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W n eyc   d Z ZZY nw eedudG dd deZeedudG dd deZ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   vC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\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expectZ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>4   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>6   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_context0   s>   





zContextVarsTests._test_contextc                 C      |  | jd d S )Nr   r   r9   r   r   r   r   &test_context_propagated_by_context_runl   r   z7ContextVarsTests.test_context_propagated_by_context_runc                 C   r:   )Nr   r;   r<   r   r   r   ,test_context_propagated_by_setting_attributeo   r   z=ContextVarsTests.test_context_propagated_by_setting_attributec                 C   s   |  | jd  d S r   r;   r<   r   r   r   test_context_not_propagatedr   r   z,ContextVarsTests.test_context_not_propagatedc                 C   r:   )Nr,   r;   r<   r   r   r   test_context_sharedu   r   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_ctxvarsx   s
   z#ContextVarsTests.test_break_ctxvarsc                 C   sL   t t j}t t j}t |_t |_|  |  |  |  d S r   )r   r   r3   r   r5   rA   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 s#w   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   rJ   rF   rG   r   rH   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   rE   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 )NrR   )r   r5   rU   r3   r   rT   )rI   )ctxdid_suspendrY   rV   should_exitr   r   	thread_fn   s   


zLContextVarsTests.test_context_assignment_different_thread.<locals>.thread_fnT)rJ   daemonrR   zrunning in a differentr5   r   )	threadingrS   r   r
   EventThreadstartrT   rK   
ValueErrorgetattrr5   rM   r   joinr   )r   r_   r]   threadrI   r   )rZ   r[   rY   rV   rW   r\   rX   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   rK   	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@   rC   rD   rQ   rg   rj   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 s#w   Y  | t d |_W d    n1 s;w   Y  |  | t t|d W d    n1 sYw   Y  | t d |_W d    ~d S 1 ssw   Y  ~d S )Nr5   )	r   r   r3   ZassertFalsehasattrassertRaisesrL   rd   r5   )r   rB   r   r   r   test_contextvars_errors  s$   
z*NoContextVarsTests.test_contextvars_errorsN)rk   rl   rm   rq   r   r   r   r   rn     s    rn   )
__future__r   rN   rO   	functoolsr   Zunittestr   r   r   r    r	   contextvarsr
   r   r   r   rS   ImportErrorr   rn   r   r   r   r   <module>   s0     }