o
    tPf-                     @   s  d dl mZ d dlmZ d dlmZ e  d dlmZ d dlm	Z	 d dl
mZ zd dlmZ W n ey?   d dlmZ Y nw G dd	 d	eZG d
d deZG dd deZg Zg ZG dd deZG dd deZG dd deZG dd deZG dd deeZG dd deZG dd deZG dd dejZG dd dejZe d G d!d" d"ejZ!e"d#G d$d% d%ejZ#e$d&kre%  dS dS )'    N)copy)monkey)localThread)	interface)Mappingc                   @   s   e Zd ZdZdd ZdS )ReadPropertyz!A property that can be overriddenc                 C   s   |d urdS | S N*    )selfinstklassr   r   Y/var/www/html/humari/django-venv/lib/python3.10/site-packages/gevent/tests/test__local.py__get__      zReadProperty.__get__N)__name__
__module____qualname____doc__r   r   r   r   r   r	      s    r	   c                       s2   e Zd ZddgZdZdZe Z fddZ  Z	S )Ainitializedobj MyPathc                    s(   t t|   t| ds|| _d| _d S )Nr   r   )superr   __init__hasattrr   path)r   r   	__class__r   r   r   #   s   

z
A.__init__)
r   r   r   	__slots__r   	type_pathr	   read_propertyr   __classcell__r   r   r    r   r      s    r   c                   @      e Zd ZdS )ObjNr   r   r   r   r   r   r   r'   *       r'   c                   @      e Zd Zdd ZdS )Sentinelc                 C   s   t t|  d S N)deleted_sentinelsappendidr   r   r   r   __del__2   s   zSentinel.__del__N)r   r   r   r1   r   r   r   r   r+   1   s    r+   c                   @   s$   e Zd ZdZdd Zedd ZdS )MyLocalr   c                 C   s&   t |  t | _tt| j d S r,   )r   r   r+   sentinelcreated_sentinelsr.   r/   r0   r   r   r   r   :   s   
zMyLocal.__init__c                 C      | S r,   r   r0   r   r   r   desc?      zMyLocal.descN)r   r   r   
CLASS_PROPr   propertyr6   r   r   r   r   r2   6   s
    r2   c                   @   r&   )MyLocalSubclassNr(   r   r   r   r   r:   C   r)   r:   c                       s   e Zd Z fddZ  ZS )WithGetattrc                    s   |dkrdS t t| |S )Nfoor   )r   r;   __getattr__r   namer    r   r   r=   H   s   zWithGetattr.__getattr__)r   r   r   r=   r%   r   r   r    r   r;   F   s    r;   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )LocalWithABCc                 C   s
   | j | S r,   )dr>   r   r   r   __getitem__O      
zLocalWithABC.__getitem__c                 C   
   t | jS r,   )iterrA   r0   r   r   r   __iter__R   rC   zLocalWithABC.__iter__c                 C   rD   r,   )lenrA   r0   r   r   r   __len__U   rC   zLocalWithABC.__len__N)r   r   r   rB   rF   rH   r   r   r   r   r@   M   s    r@   c                   @      e Zd Zedd ZdS )LocalWithStaticMethodc                   C   s   dS r
   r   r   r   r   r   a_staticmethodZ   r7   z$LocalWithStaticMethod.a_staticmethodN)r   r   r   staticmethodrK   r   r   r   r   rJ   X       rJ   c                   @   rI   )LocalWithClassMethodc                 C   r5   r,   r   )clsr   r   r   a_classmethod`   r7   z"LocalWithClassMethod.a_classmethodN)r   r   r   classmethodrP   r   r   r   r   rN   ^   rM   rN   c                   @   s   e Zd Zdd Ze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efddZdd Zdd Zeddd Zejd d! Zd"d# Zd$d% Zd&d' Zd(S ))TestGeventLocalc                 C   s   t d d = td d = d S r,   )r-   r4   r0   r   r   r   setUpj   s   
zTestGeventLocal.setUpc                 C   sp   |  td td W d    n1 sw   Y  |  td tdd W d    d S 1 s1w   Y  d S )Nz*Initialization arguments are not supportedr<   )kw)assertRaisesRegex	TypeErrorr   r0   r   r   r   $test_create_local_subclass_init_argsp   s   
"z4TestGeventLocal.test_create_local_subclass_init_argsc                 C   s   t  }d|_| |jd d S N   )r   attrassertEqualr   lr   r   r   test_local_opts_not_subclassedz   s   z.TestGeventLocal.test_local_opts_not_subclassedc                 C   sj   t  }| t d|_W d    n1 sw   Y  | t |`W d    d S 1 s.w   Y  d S rX   )r   assertRaisesAttributeError__dict__r\   r   r   r   test_cannot_set_delete_dict   s   "z+TestGeventLocal.test_cannot_set_delete_dictc                    sf   t   t t d W d    n1 sw   Y   fdd}t|d}|  |  d S )Nthingc                      s:    t t d W d    d S 1 sw   Y  d S )Nrc   )r_   r`   delattrr   r]   r   r   r   	del_local   s   "z;TestGeventLocal.test_delete_with_no_dict.<locals>.del_localtarget)r   r_   r`   rd   r   startjoin)r   rf   tr   re   r   test_delete_with_no_dict   s   
z(TestGeventLocal.test_delete_with_no_dictc                    s@  t t  d _ jd  fdd}t|d}|  |   jd d jd<  jd  `t	 d 
d j  ` jd t
  `W d    n1 sbw   Y   jd d _ jd t jt  jd	 d
 j d _ jd 
d
 j d S )NrY   c                      s     jd d _d S )NrY      )r[   r   r   ar   r   r   demonstrate_slots_shared   s   
zOTestGeventLocal.test_slot_and_type_attributes.<locals>.demonstrate_slots_sharedrg   rm   r   r   r   r   r#   Local)r   r'   r   r[   r   ri   rj   ra   assertFalser   assertInr   r_   r`   r$   assertIsInstancer	   r#   assertNotIn)r   rp   greenletr   rn   r   test_slot_and_type_attributes   s6   


z-TestGeventLocal.test_slot_and_type_attributesc                    s   t t  | t t d W d    n1 sw   Y   fdd}t|d}|  |  | t t d W d    d S 1 sHw   Y  d S )N	fizz_buzzc                      s
   d _ d S rX   )rx   r   ro   r   r   set_fizz_buzz   rC   z;TestGeventLocal.test_attribute_error.<locals>.set_fizz_buzzrg   )r   r'   r_   r`   getattrr   ri   rj   )r   rz   rv   r   ry   r   test_attribute_error   s   

"z$TestGeventLocal.test_attribute_errorc                 C   s,   t  }| d|j d|_| d|j d S )Nr   baz)r;   r[   r<   )r   getterr   r   r   test_getattr_called   s   z#TestGeventLocal.test_getattr_calledc                 C   sz   t t }d|_d|j_t|}| |j|jd | |j|jd d|_| |j|jd d|j_| |j|jd d S )N123test+The values in the two objects must be equalzThe values must be equal321/The values in the two objects must be differentworks)r   r'   r   r   echor   r[   assertNotEqualr   ro   br   r   r   	test_copy   s   
zTestGeventLocal.test_copyc                 C   s<   t  }t|dd t|}| |jd | |j|j d S )Nrc   r   )r   setattrr   r[   rc   assertIsNotra   r   r   r   r   test_copy_no_subclass   s
   z%TestGeventLocal.test_copy_no_subclassc                 C   sN   t i }d|_t ddi}d|_| |j|jd d|_| |j|jd d S )Nr   onerm   r   r   r   )r   r   r[   r   r   r   r   r   test_objects   s   zTestGeventLocal.test_objectsc                 C   s^   | }|  d|j d|_|  d|j |  |jd d |`|  d|j | ||j d S )Nr   rY   r8   )r[   r8   ra   assertIsr6   )r   kindmylocalr   r   r   test_class_attr  s   zTestGeventLocal.test_class_attrc                 C   s   | j td d S )N)r   )r   r:   r0   r   r   r   test_class_attr_subclass  r   z(TestGeventLocal.test_class_attr_subclassc                    s   dd l }t d _t  td d = td d = fdd  fddtdD }|D ]}|  q+|	  | 
ttt| |D ]}| rJJ qB|	  t  | 
ttt| d S )Nr   c                      s   t  d d S )Nr3   )r{   r   )my_localr   r   demonstrate_my_local  s   zkTestGeventLocal.test_locals_collected_when_greenlet_dead_but_still_referenced.<locals>.demonstrate_my_localc                    s   g | ]}t  d qS )rg   r   ).0_)r   r   r   
<listcomp>$  s    zaTestGeventLocal.test_locals_collected_when_greenlet_dead_but_still_referenced.<locals>.<listcomp>   )geventr2   r3   	greentestgc_collect_if_neededr4   r-   rangeri   sleepr[   rG   is_alive)r   r   	greenletsrk   gr   )r   r   r   =test_locals_collected_when_greenlet_dead_but_still_referenced  s"   


zMTestGeventLocal.test_locals_collected_when_greenlet_dead_but_still_referencedz6GC makes this non-deterministic, especially on Windowsc                    s`   dd l }dd l  d d  fdd}|||     tt d S )Nr     c                     sf   t dD ]} t }|j d }q     tt  tt 	
  d S )Nr   )r   r2   assertIsNotNoner3   collectr[   rG   r4   r-   rr   	has_links)r   xcountgcrunning_greenletr   r   r   r   @  s   znTestGeventLocal.test_locals_collected_when_unreferenced_even_in_running_greenlet.<locals>.demonstrate_my_local)	r   r   r   spawnr   rj   r[   rG   r-   )r   r   r   r   r   r   @test_locals_collected_when_unreferenced_even_in_running_greenlet3  s   
zPTestGeventLocal.test_locals_collected_when_unreferenced_even_in_running_greenletc                    sp   dd l }ddlm  G  fddd|j}| }|  |  | |j| | |j	t
|jfddifg d S )Nr   all_local_dicts_for_greenletc                       s    e Zd ZdZdZ fddZdS )zATestGeventLocal.test_local_dicts_for_greenlet.<locals>.MyGreenletNc                    s$   t  }d|_t|| _ | | _d S r
   )r   r<   r/   id_xresultsr   r   r   r   r   _run`  s   
zFTestGeventLocal.test_local_dicts_for_greenlet.<locals>.MyGreenlet._run)r   r   r   r   r   r   r   r   r   r   
MyGreenlet]  s    r   r<   r   )r   gevent.localr   Greenletri   rj   
assertTrue
successfulr[   r   r   r   )r   r   r   r   r   r   r   test_local_dicts_for_greenletX  s   	z-TestGeventLocal.test_local_dicts_for_greenletc                 C   sJ   t  }ddi|_| ddi|j | d|j | dgt|  d S )Nro   rY   )r@   rA   r[   rs   listkeysr   r   r   r   test_local_with_abcm  s
   
z#TestGeventLocal.test_local_with_abcc                 C   s   t  }| d|  d S r
   )rJ   r[   rK   r   r   r   r   test_local_with_staticmethodx     z,TestGeventLocal.test_local_with_staticmethodc                 C   s   t  }| t |  d S r,   )rN   r   rP   r   r   r   r   test_local_with_classmethod|  r   z+TestGeventLocal.test_local_with_classmethodN)r   r   r   rS   tearDownrW   r^   rb   rl   rw   r|   r   r   r   r   r2   r   r   r   r   skipOnLibuvOnPyPyOnWinr   ignores_leakcheckr   r   r   r   r   r   r   r   rR   g   s.    
0
$
rR   c                   @   s   e Zd ZdZejdd ZdS )TestLocalInterfaceNc                 C   sd   G dd dt j}t |G dd dt}G dd d|t}| }tt |}| |g| d S )Nc                   @   r&   )z.TestLocalInterface.test_provides.<locals>.IFooNr(   r   r   r   r   IFoo  r)   r   c                   @   r&   )z.TestLocalInterface.test_provides.<locals>.BaseNr(   r   r   r   r   Base  s    r   c                   @   r&   )z1TestLocalInterface.test_provides.<locals>.DerivedNr(   r   r   r   r   Derived  r)   r   )r   	Interfaceimplementerobjectr   r   
providedByr[   )r   r   r   r   rA   pr   r   r   test_provides  s   z TestLocalInterface.test_provides)r   r   r   __timeout__r   r   r   r   r   r   r   r     s    r   zNeeds C extensionc                   @   r*   )TestCExtc                 C      |  tjd d S )Nzgevent._gevent_clocalr[   r   r   r0   r   r   r   test_c_extension     zTestCExt.test_c_extensionN)r   r   r   r   r   r   r   r   r         r   zNeeds pure-pythonc                   @   r*   )TestPurec                 C   r   )Nzgevent.localr   r0   r   r   r   test_extension  r   zTestPure.test_extensionN)r   r   r   r   r   r   r   r   r     r   r   __main__)&gevent.testingtestingr   r   r   r   	patch_all	threadingr   r   zoper   collections.abcr   ImportErrorcollectionsr   r	   r   r'   r-   r4   r+   r2   r:   r;   r@   rJ   rN   TestCaserR   r   skipOnPurePythonr   skipWithCExtensionsr   r   mainr   r   r   r   <module>   sD    		  