U
    ËZjõ#  ã                   @   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 z(d dlmZ d dlm	Z	 d dlm
Z
 W n  ek
r„   d Z Z	Z
Y nX e  edk	d¡G d	d
„ d
e jƒƒZe  edk	d¡G dd„ de jƒƒZdS )é    N)Úpartial)Úgreenlet)Ú
getcurrent)ÚContext)Ú
ContextVar)Úcopy_contextzContextVar not supportedc                   @   sd   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S )ÚContextVarsTestsc                 O   s   t ƒ j||ŽS ©N)r   Úrun)ÚselfÚargsÚkwargs© r   úb/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/greenlet/tests/test_contextvars.pyÚ_new_ctx_run   s    zContextVarsTests._new_ctx_runc                 C   s^   |d kr|   | ¡ ¡ n|  | ¡ |¡ | |¡ tdƒD ]}|| ¡   d7  < |ƒ  q:d S )Né   é   )ÚassertIsNoneÚgetÚassertEqualÚsetÚrange)r   Úgreenlet_idÚctx_varÚcallbackÚcountsÚexpectÚ_r   r   r   Ú
_increment   s    
zContextVarsTests._incrementc              	      sV  t dd d�‰ˆ d¡ tƒ j‰ tdd„ tdƒD ƒƒ‰‡ ‡‡‡‡fdd„td	dƒD ƒ}|D ](}ˆd
krntƒ |_qXˆdkrXtƒ j|_qXtdƒD ]*}ˆˆ ¡   d	7  < |D ]}| ¡  q¦qŠˆdkrÖt	|ƒD ]}| ¡  qÆn|D ]}| ¡  qÚ|D ]&}ˆ 
|j¡ ˆ |jd kˆdk¡ qìˆdk�r8ˆ ˆd	d	d	d	ddœ¡ nˆ tˆ ¡ ƒtdgƒ¡ d S )NÚid©Údefaultr   c                 s   s   | ]}|d fV  qdS )r   Nr   ©Ú.0Úir   r   r   Ú	<genexpr>'   s     z1ContextVarsTests._test_context.<locals>.<genexpr>é   c                    sZ   g | ]R}t tˆd kr$ttƒ jˆjƒnˆj|ˆˆ ˆˆdkr@|d nˆdkrLdndd�ƒ‘qS )r
   Úsharer   )r   r
   r   N)r   r   r   r   r   )r   r   r   r
   r   r"   ©r   r   Úid_varÚpropagate_byr   r   r   Ú
<listcomp>)   s   òýþõz2ContextVarsTests._test_context.<locals>.<listcomp>r   r   r'   r   r
   é   )r   r   r   é   é   )r   r   r   ÚswitchÚdictr   r   Ú
gr_contextr   ÚreversedZ
assertTrueZdeadr   Úvalues)r   r*   ZletsZletr$   r   r(   r   Ú_test_context"   s6    
ñ


zContextVarsTests._test_contextc                 C   s   |   | jd¡ d S )Nr
   ©r   r4   ©r   r   r   r   Ú&test_context_propagated_by_context_run\   s    z7ContextVarsTests.test_context_propagated_by_context_runc                 C   s   |   | jd¡ d S )Nr   r5   r6   r   r   r   Ú,test_context_propagated_by_setting_attribute_   s    z=ContextVarsTests.test_context_propagated_by_setting_attributec                 C   s   |   | jd ¡ d S r	   r5   r6   r   r   r   Útest_context_not_propagatedb   s    z,ContextVarsTests.test_context_not_propagatedc                 C   s   |   | jd¡ d S )Nr'   r5   r6   r   r   r   Útest_context_sharede   s    z$ContextVarsTests.test_context_sharedc                 C   s@   t tƒ jƒ}t tƒ jƒ}| tƒ j¡ | tƒ j¡ | ¡  d S r	   )r   r   r
   r/   r   ©r   Úlet1Zlet2r   r   r   Útest_break_ctxvarsh   s
    z#ContextVarsTests.test_break_ctxvarsc                 C   sL   t tƒ jƒ}t tƒ jƒ}tƒ |_tƒ |_| ¡  | ¡  | ¡  | ¡  d S r	   )r   r   r/   r   r1   r;   r   r   r   Ú9test_not_broken_if_using_attribute_instead_of_context_runr   s    zJContextVarsTests.test_not_broken_if_using_attribute_instead_of_context_runc              	      s   t dd d�‰‡ ‡‡fdd„}t|ƒ‰ ˆ td¡�
 ˆ `W 5 Q R X ˆ ˆ j¡ ˆ  ¡ \}}ˆ |ˆ j¡ ˆ |ˆ d¡ ˆ |ˆ d¡ ˆ | 	ˆj
¡d¡ |ˆ _ˆ  ¡  ˆ ˆ j|¡ d ˆ _ˆ  ¡  ˆ ˆ j|¡ d ˆ _ˆ  ¡  ˆ ˆ j¡ d ‰ t ¡  ˆ t |¡d¡ ˆ t |¡d¡ d S )Nr   r    c                     sX  ˆ  ˆ ¡ ¡ ˆ  ˆ j¡ ˆ d¡ ˆ ˆ jt¡ ˆ ˆ ¡ d¡ ˆ ˆ jˆ d¡ ˆ j} d ˆ _ˆ  ˆ ¡ ¡ ˆ  ˆ j¡ ˆ d¡ ˆ ˆ jt¡ ˆ ˆ ¡ d¡ ˆ ˆ jˆ d¡ ˆ j}tƒ j 	| |f¡ ˆ ˆ ¡ d¡ |ˆ _ˆ ˆ ¡ d¡ tƒ j 	¡  ˆ  ˆ ¡ ¡ ˆ  ˆ j¡ | ˆ _ˆ ˆ ¡ d¡ tƒ j 	¡  ˆ  ˆ ¡ ¡ ˆ  ˆ j¡ d S ©Nr   r   )
r   r   r1   r   ZassertIsInstancer   r   r   Úparentr/   )Úold_contextÚnew_context©Úgrr)   r   r   r   Útarget   s6    

zFContextVarsTests.test_context_assignment_while_running.<locals>.targetzcan't delete attrr   r   )r   r   ÚassertRaisesRegexÚAttributeErrorr1   r   r/   ÚassertIsr   r
   r   ÚgcZcollectÚsysÚgetrefcount)r   rE   rA   rB   r   rC   r   Ú%test_context_assignment_while_running|   s0    )z6ContextVarsTests.test_context_assignment_while_runningc              	      sD  dd l }tƒ ‰ tdd d�‰| ¡ ‰| ¡ ‰| ¡ ‰| ¡ ‰g ‰‡‡‡‡fdd„‰‡ ‡‡‡‡fdd„}|j|dd	�}| ¡  ˆ ¡  ˆd }|  td
¡� t	|dƒ W 5 Q R X |  td
¡� d |_
W 5 Q R X ˆ ¡  ˆ ¡  |  |j
ˆ ¡ |  |j
ˆ d¡ d |_
ˆ ¡  | ¡  |  ˆ|d g¡ |  |j
¡ ˆ |_
|  |j
ˆ ¡ d S )Nr   Úvarr    c                      sB   ˆ  d¡ ˆ  ¡  ˆ ¡  ˆ  d¡ tƒ j ¡  ˆ  ˆ ¡ ¡ d S r?   )r   Úwaitr   r@   r/   Úappendr   r   )ÚholderÚ
is_runningÚshould_suspendrM   r   r   Úgreenlet_in_thread_fnÎ   s    

zXContextVarsTests.test_context_assignment_different_thread.<locals>.greenlet_in_thread_fnc                     s<   t ˆƒ} ˆ | _ˆ | ¡ |  ¡  ˆ ¡  ˆ ¡  |  ¡  d S r	   )r   r1   rO   r/   r   rN   )rD   )ÚctxÚdid_suspendrS   rP   Úshould_exitr   r   Ú	thread_fnÖ   s    
zLContextVarsTests.test_context_assignment_different_thread.<locals>.thread_fnT)rE   Údaemonzrunning in a differentr1   r   )Ú	threadingr   r   ÚEventÚThreadÚstartrN   rF   Ú
ValueErrorÚgetattrr1   r   rH   r   Újoinr   )r   rY   rW   ÚthreadrD   r   )rT   rU   rS   rP   rQ   rV   rR   rM   r   Ú(test_context_assignment_different_threadÃ   s:    	z9ContextVarsTests.test_context_assignment_different_threadN)Ú__name__Ú
__module__Ú__qualname__r   r   r4   r7   r8   r9   r:   r=   r>   rL   ra   r   r   r   r   r      s   
:

Gr   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 5 Q R X |  t¡� d |_W 5 Q R X | ¡  |  t¡� t|dƒ W 5 Q R X |  t¡� d |_W 5 Q R X d S )Nr1   )	r   r   r/   ZassertFalseÚhasattrZassertRaisesrG   r^   r1   )r   r<   r   r   r   Útest_contextvars_errorsÿ   s    z*NoContextVarsTests.test_contextvars_errorsN)rb   rc   rd   rg   r   r   r   r   re   ý   s   re   )ZunittestrI   rJ   Ú	functoolsr   r   r   Zcontextvarsr   r   r   ÚImportErrorZ
skipUnlessZTestCaser   ZskipIfre   r   r   r   r   Ú<module>   s     j