
    <|h-                        d dl mZ d dlmZ d dlmZ  ej                          d dlmZ d dlm	Z	 d dl
mZ 	 d dlmZ  G d d	e      Z G d
 de      Z G d de      Zg Zg Z G d de      Z G d de      Z G d de      Z G d de      Z G d dee      Z G d de      Z G d de      Z G d dej:                        Z G d dej:                        Z ej@                  d        G d! d"ej:                               Z! ejD                  d#       G d$ d%ej:                               Z#e$d&k(  r ejJ                          yy# e$ r
 d dlmZ Y w xY w)'    N)copy)monkey)local)Thread)	interface)Mappingc                       e Zd ZdZd Zy)ReadPropertyz!A property that can be overriddenc                     |dS | S N*    )selfinstklasss      W/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/tests/test__local.py__get__zReadProperty.__get__   s    %r/4/    N)__name__
__module____qualname____doc__r   r   r   r   r
   r
      s
    +0r   r
   c                   <     e Zd ZddgZdZdZ e       Z fdZ xZ	S )Ainitializedobj MyPathc                 ^    t         t        |           t        | d      s|| _        d| _        y )Nr   r   )superr   __init__hasattrr   path)r   r   	__class__s     r   r!   z
A.__init__#   s(    a!t]+DH	r   )
r   r   r   	__slots__r#   	type_pathr
   read_propertyr!   __classcell__r$   s   @r   r   r      s(    &IDI NM r   r   c                       e Zd Zy)ObjNr   r   r   r   r   r   r+   r+   *       r   r+   c                       e Zd Zd Zy)Sentinelc                 @    t         j                  t        |              y N)deleted_sentinelsappendidr   s    r   __del__zSentinel.__del__2   s      D*r   N)r   r   r   r6   r   r   r   r/   r/   1   s    +r   r/   c                   &    e Zd ZdZd Zed        Zy)MyLocalr   c                     t        j                  |        t               | _        t        j                  t        | j                               y r1   )r   r!   r/   sentinelcreated_sentinelsr3   r4   r5   s    r   r!   zMyLocal.__init__:   s.    t 
  DMM!23r   c                     | S r1   r   r5   s    r   desczMyLocal.desc?   s    r   N)r   r   r   
CLASS_PROPr!   propertyr=   r   r   r   r8   r8   6   s     J4
  r   r8   c                       e Zd Zy)MyLocalSubclassNr,   r   r   r   rA   rA   C   r-   r   rA   c                        e Zd Z fdZ xZS )WithGetattrc                 6    |dk(  ryt         t        |   |      S )Nfoor   )r    rC   __getattr__)r   namer$   s     r   rF   zWithGetattr.__getattr__H   s    5=[$3D99r   )r   r   r   rF   r(   r)   s   @r   rC   rC   F   s    : :r   rC   c                       e Zd Zd Zd Zd Zy)LocalWithABCc                      | j                   |   S r1   )d)r   rG   s     r   __getitem__zLocalWithABC.__getitem__O   s    vvd|r   c                 ,    t        | j                        S r1   )iterrK   r5   s    r   __iter__zLocalWithABC.__iter__R   s    DFF|r   c                 ,    t        | j                        S r1   )lenrK   r5   s    r   __len__zLocalWithABC.__len__U   s    466{r   N)r   r   r   rL   rO   rR   r   r   r   rI   rI   M   s    r   rI   c                       e Zd Zed        Zy)LocalWithStaticMethodc                       yr   r   r   r   r   a_staticmethodz$LocalWithStaticMethod.a_staticmethodZ   s    r   N)r   r   r   staticmethodrV   r   r   r   rT   rT   X   s     r   rT   c                       e Zd Zed        Zy)LocalWithClassMethodc                     | S r1   r   )clss    r   a_classmethodz"LocalWithClassMethod.a_classmethod`   s    
r   N)r   r   r   classmethodr\   r   r   r   rY   rY   ^   s     r   rY   c                       e Zd Zd ZeZd Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd ZefdZd Zd Z ej(                  d      d        Zej,                  d        Zd Zd Zd Zy)TestGeventLocalc                 (    t         d d = t        d d = y r1   )r2   r;   r5   s    r   setUpzTestGeventLocal.setUpj   s    a a r   c                     | j                  t        d      5  t        d       d d d        | j                  t        d      5  t        d       d d d        y # 1 sw Y   5xY w# 1 sw Y   y xY w)Nz*Initialization arguments are not supportedrE   )kw)assertRaisesRegex	TypeErrorr   r5   s    r   $test_create_local_subclass_init_argsz4TestGeventLocal.test_create_local_subclass_init_argsp   si    ##I$PR 	%L	 ##I$PR 	UO	 			 		 	s   AA#A #A,c                 ^    t               }d|_        | j                  |j                  d       y N   )r   attrassertEqualr   ls     r   test_local_opts_not_subclassedz.TestGeventLocal.test_local_opts_not_subclassedz   s$    G#r   c                     t               }| j                  t              5  d|_        d d d        | j                  t              5  |`d d d        y # 1 sw Y   *xY w# 1 sw Y   y xY wrh   )r   assertRaisesAttributeError__dict__rl   s     r   test_cannot_set_delete_dictz+TestGeventLocal.test_cannot_set_delete_dict   sb    G~. 	AJ	 ~. 	
	 		 		 	s   AAAA&c                      t                j                  t              5  t        d       d d d         fd}t	        |      }|j                          |j                          y # 1 sw Y   <xY w)Nthingc                  r    j                  t              5  t         d       d d d        y # 1 sw Y   y xY w)Nru   )rp   rq   delattr)rm   r   s   r   	del_localz;TestGeventLocal.test_delete_with_no_dict.<locals>.del_local   s0    "">2 $7#$ $ $s   -6target)r   rp   rq   rw   r   startjoin)r   rx   trm   s   `  @r   test_delete_with_no_dictz(TestGeventLocal.test_delete_with_no_dict   sZ    G~. 	 Aw	 	$ )$				  	 s   A**A3c                      t        t                     d_         j                  j                  d        fd}t	        |      }|j                          |j                           j                  j                  d       dj                  d<    j                  j                  d       ` j                  t        d              j                  dj                         ` j                  j                  d        j                  t              5  `d d d         j                  j                  d       d_         j                  j                  d        j                  t         j                  t                 j                  j"                  d        j%                  d	j                         d
_         j                  j"                  d
        j                  d	j                         y # 1 sw Y   xY w)Nri   c                  L    j                   j                  d       d _        y )Nri      )rk   r   )ar   s   r   demonstrate_slots_sharedzOTestGeventLocal.test_slot_and_type_attributes.<locals>.demonstrate_slots_shared   s    Q]]A.AMr   ry   r   r   r   r   r   r&   Local)r   r+   r   rk   r   r{   r|   rr   assertFalser"   assertInr#   rp   rq   r'   assertIsInstancer
   r&   assertNotIn)r   r   greenletr   s   `  @r   test_slot_and_type_attributesz-TestGeventLocal.test_slot_and_type_attributes   s   ceH*	 !9:* %'

=!* MM23mQZZ0 F$~. 		 	"-!,aoo|< 	h/ajj1 g.k1::.!	 	s   HHc                 f   t        t                     | j                  t              5  t	        d       d d d        fd}t        |      }|j                          |j                          | j                  t              5  t	        d       d d d        y # 1 sw Y   exY w# 1 sw Y   y xY w)N	fizz_buzzc                      d _         y rh   )r   )r   s   r   set_fizz_buzzz;TestGeventLocal.test_attribute_error.<locals>.set_fizz_buzz   s
    AKr   ry   )r   r+   rp   rq   getattrr   r{   r|   )r   r   r   r   s      @r   test_attribute_errorz$TestGeventLocal.test_attribute_error   s    ceH~. 	$A{#	$	 /~. 	$A{#	$ 	$	$ 	$	$ 	$s   BB'B$'B0c                     t               }| j                  d|j                         d|_        | j                  d|j                         y )Nr   baz)rC   rk   rE   )r   getters     r   test_getattr_calledz#TestGeventLocal.test_getattr_called   s8    VZZ(


+r   c                    t        t                     }d|_        d|j                  _        t        |      }| j                  |j                  |j                  d       | j                  |j                  |j                  d       d|_        | j                  |j                  |j                  d       d|j                  _        | j                  |j                  |j                  d       y )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   rk   assertNotEqualr   r   bs      r   	test_copyzTestGeventLocal.test_copy   s    ceH
G 	)VW'ABAFFAFF,]^
'ABr   c                     t               }t        |dd       t        |      }| j                  |j                  d       | j                  |j                  |j                         y )Nru   r   )r   setattrr   rk   ru   assertIsNotrr   r   s      r   test_copy_no_subclassz%TestGeventLocal.test_copy_no_subclass   sJ    G7BG"%QZZ0r   c                     t        i       }d|_        t        ddi      }d|_        | j                  |j                  |j                  d       d|_        | j                  |j                  |j                  d       y )Nr   oner   r   r   r   )r   r#   rk   r   r   s      r   test_objectszTestGeventLocal.test_objects   se     bEuajM)VWAFFAFF,]^r   c                 B    |       }| j                  d|j                         d|_        | j                  d|j                         | j                  |j                  d   d       |`| j                  d|j                         | j                  ||j                         y )Nr   ri   r>   )rk   r>   rr   assertIsr=   )r   kindmylocals      r   test_class_attrzTestGeventLocal.test_class_attr  s    &W//0G../)),7;W//0gw||,r   c                 0    | j                  t               y )N)r   )r   rA   r5   s    r   test_class_attr_subclassz(TestGeventLocal.test_class_attr_subclass  s    /2r   c                 <   dd l }t               d _        t        j                          t
        d d = t        d d = fd}t        d      D cg c]  }t        |       }}|D ]  }|j                           |j                          | j                  t        t
              t        |             |D ]  }|j                         sJ  |j                          t        j                          | j                  t        t              t        |             y c c}w )Nr   c                      t         d       y )Nr:   )r   )my_locals   r   demonstrate_my_localzkTestGeventLocal.test_locals_collected_when_greenlet_dead_but_still_referenced.<locals>.demonstrate_my_local  s    Hj)r      ry   )geventr8   r:   	greentestgc_collect_if_neededr;   r2   ranger   r{   sleeprk   rQ   is_alive)r   r   r   _	greenletsr}   gr   s          @r   =test_locals_collected_when_greenlet_dead_but_still_referencedzMTestGeventLocal.test_locals_collected_when_greenlet_dead_but_still_referenced  s    9 &&(a a 	*
 CH(KQV#78K	K 	AGGI	./Y@ 	$Azz|##	$&&( 	./Y@ Ls   Dz6GC makes this non-deterministic, especially on Windowsc                      dd l }dd lj                          dd  fd}|j                  |      |j	                          j                           j                  t        t                     y )Nr     c                  n   t        d      D ])  } t               }j                  |j                         d }+ j	                          j	                          j                  t        t                     j                  t        t                     j                  j                                y )Nr   )r   r8   assertIsNotNoner:   collectrk   rQ   r;   r2   r   	has_links)r   xcountgcrunning_greenletr   s     r   r   znTestGeventLocal.test_locals_collected_when_unreferenced_even_in_running_greenlet.<locals>.demonstrate_my_local@  s    4[ I$$QZZ0
 JJLJJLUC(9$:; UC(9$:; -779:r   )	r   r   r   spawnr   r|   rk   rQ   r2   )r   r   r   r   r   r   s   `  @@@r   @test_locals_collected_when_unreferenced_even_in_running_greenletzPTestGeventLocal.test_locals_collected_when_unreferenced_even_in_running_greenlet3  sa    
 	


	;$ "<<(<=$5 67r   c                 0   dd l }ddlm  G fdd|j                        } |       }|j	                          |j                          | j                  |j                  |       | j                  |j                  t        |j                  fddifg       y )Nr   all_local_dicts_for_greenletc                        e Zd ZdZdZ fdZy)ATestGeventLocal.test_local_dicts_for_greenlet.<locals>.MyGreenletNc                 b    t               }d|_        t        |      | _         |       | _        y r   )r   rE   r4   id_xresults)r   r   r   s     r   _runzFTestGeventLocal.test_local_dicts_for_greenlet.<locals>.MyGreenlet._run`  s(    GqE	;DAr   )r   r   r   r   r   r   r   s   r   
MyGreenletr   ]  s    GDBr   r   rE   r   )r   gevent.localr   Greenletr{   r|   
assertTrue
successfulrk   r   r   r   )r   r   r   r   r   s       @r   test_local_dicts_for_greenletz-TestGeventLocal.test_local_dicts_for_greenletX  ss    =	B 	B L			a(!166?UBK89	;r   c                     t               }ddi|_        | j                  ddi|j                         | j                  d|j                         | j                  dgt	        |j                                      y )Nr   ri   )rI   rK   rk   r   listkeysr   r   s     r   test_local_with_abcz#TestGeventLocal.test_local_with_abcm  s\     NAh#q133'c133#QVVX/r   c                 X    t               }| j                  d|j                                y r   )rT   rk   rV   r   s     r   test_local_with_staticmethodz,TestGeventLocal.test_local_with_staticmethodx  s#    !#Q--/0r   c                 `    t               }| j                  t         |j                                y r1   )rY   r   r\   r   s     r   test_local_with_classmethodz+TestGeventLocal.test_local_with_classmethod|  s      "*AOO,=>r   N)r   r   r   ra   tearDownrf   rn   rs   r~   r   r   r   r   r   r   r8   r   r   r   r   skipOnLibuvOnPyPyOnWinr   ignores_leakcheckr   r   r   r   r   r   r   r_   r_   g   s    ! H$
./`$ ,C(1_ $+ -3A> &Y%%&^_"8 `"8H   ; !;(	01?r   r_   c                   4    e Zd ZdZej
                  d        Zy)TestLocalInterfaceNc                     G d dt         j                        }t        j                  |       G d dt                     } G d d|t              } |       }t        t        j                  |            }| j                  |g|       y )Nc                       e Zd Zy).TestLocalInterface.test_provides.<locals>.IFooNr,   r   r   r   IFoor         r   r   c                       e Zd Zy).TestLocalInterface.test_provides.<locals>.BaseNr,   r   r   r   Baser     s    r   r   c                       e Zd Zy)1TestLocalInterface.test_provides.<locals>.DerivedNr,   r   r   r   Derivedr     r   r   r   )r   	Interfaceimplementerobjectr   r   
providedByrk   )r   r   r   r   rK   ps         r   test_providesz TestLocalInterface.test_provides  sx    
	9&& 	 
		t	$	6 	 
%		dE 	 I%%a()$#r   )r   r   r   __timeout__r   r   r   r   r   r   r   r     s    K  $ !$r   r   zNeeds C extensionc                       e Zd Zd Zy)TestCExtc                 D    | j                  t        j                  d       y )Nzgevent._gevent_clocalrk   r   r   r5   s    r   test_c_extensionzTestCExt.test_c_extension  s    ))0	2r   N)r   r   r   r   r   r   r   r   r     s    2r   r   zNeeds pure-pythonc                       e Zd Zd Zy)TestPurec                 D    | j                  t        j                  d       y )Nzgevent.localr   r5   s    r   test_extensionzTestPure.test_extension  s    ))'	)r   N)r   r   r   r  r   r   r   r   r     s    )r   r   __main__)&gevent.testingtestingr   r   r   r   	patch_all	threadingr   r   zoper   collections.abcr   ImportErrorcollectionsr   r
   r   r+   r2   r;   r/   r8   rA   rC   rI   rT   rY   TestCaser_   r   skipOnPurePythonr   skipWithCExtensionsr   r   mainr   r   r   <module>r     so   "  +6++-   $'06 0  	& 	   +v +
e 	g 	:% :	5' 	E 5 W?i(( W?t$++ $0 /02y!! 2 12 23)y!! ) 4) zINN u  $##$s   E EE