
    h?3                     Z    d 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 Z G d	 d
      Z	y)z^
The implementation of thread patching for Python versions
prior to 3.13.

Internal use only.
    N   )_patch_module)_queue_warning)_notify_patch)is_object_patchedc                    t        t        | j                                     dk7  ry | j                         | _        	 | j                         }t        | j                               }	 dd l
}|j                  j                  }t        d      }|j!                         D ]r  }t#        ||      rCdD ])  }t%        ||      st'        ||      t)        |||        < t+        dt-        |            t#        ||      s_|j.                  l||_        t y # t        $ r | j                         }Y w xY w# t        $ r  G d dt              }Y w xY w)Nr   r   c                       e Zd Zy)*_patch_existing_locks.<locals>._ModuleLockN)__name__
__module____qualname__     \/var/www/html/engine/venv/lib/python3.12/site-packages/gevent/monkey/_patch_thread_common.py_ModuleLockr
   %   s    r   r   gc)_owner_RLock__ownerzEUnsupported Python implementation; Found unknown lock implementation.)lenlist	enumerate_allocate_lock_active_limbo_lock	get_identAttributeError
_get_identtypeRLockimportlib._bootstrap
_bootstrapr   ImportErrorobject
__import__get_objects
isinstancehasattrgetattrsetattrAssertionErrorvarsowner)	threadingtid
rlock_type	importlibr   r   o
owner_names           r   _patch_existing_locksr2      sL   
4	##%&'1, $-#;#;#=I %!!# ioo'(J7#
  **66 
D	B^^ a$ 
 1j)q*-9:s3 %9G 
 ;'ww"%1  %""$%
  	& 	s#   D 'D1 D.-D.1EEc                   |    e Zd ZdZdZdZdZdZdZdZ		 	 	 ddZ
d Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zed        Zy)BasePatcherNc                 X    || _         || _        || _        || _        || _        || _        y N)r,   threading_localEventloggingexisting_lockswarnings)selfr,   _threading_localr8   r9   r:   	_warningss          r   __init__zBasePatcher.__init__k   s0     #/
,!r   c                 B   t        d      | _        | j                  j                         | _        | j                  j	                         | _        | j                  j
                  | _        t        d| j                  d      \  }}| j                  r| j                          | j                  r| j                          | j                  r| j                          t        dd      }| j                  | j                  j	                         k(  r#|s!| j                          | j!                          n|s| j#                          ddlm} t)        |j+                  d||             | j,                  1t)        |j+                  d| j,                  | j                               y y )Nr,   threadFr>   _notify_did_subscribers	_shutdownr   )events)r#   threading_modcurrent_threadorig_current_threadmain_threadrD   orig_shutdownr   r;   r,   ,patch_threading_event_logging_existing_locksr7   patch__threading_localpatch_active_threadsr   ;patch_threading_shutdown_on_main_thread_not_already_patchedpatch_main_thread_cleanup!patch_shutdown_not_on_main_threadgeventrE   r   GeventDidPatchModuleEventgevent_threading_mod)r<   gevent_thread_mod
thread_modalready_patchedrE   s        r   __call__zBasePatcher.__call__w   sd    (4 $(#5#5#D#D#F --99;!//99(5h@DNS)U%:
 >>==?'')>>%%' ,KE##t'9'9'E'E'GGP_LLN**, 224!f66x7H7AC 	D $$0&::;;?;T;T;?;M;MO P 1r   c                 >   t        d| j                  d      \  | _        }|| j                  u sJ | j                  r| j                          | j                  rt        | j                         | j                  r$dt        j                  v r| j                          y y y )Nr,   FrB   r9   )r   r;   rS   rF   r8   patch_eventr:   r2   r9   sysmodulespatch_logging)r<   patched_mods     r   rK   z8BasePatcher.patch_threading_event_logging_existing_locks   s    1>mm$)2+.!;
 d00000::!$"4"45<<I4  5<r   c                     ddl m} ddlm}  || j                  d|       t        | j                  d      r || j                  d|       y y )Nr   
patch_itemr   )r8   r8   _Event)apir`   gevent.eventr8   rF   r&   )r<   r`   r8   s      r   rY   zBasePatcher.patch_event   sC    #&4%%w6 4%%x0t))8U; 1r   c                 ,   ddl m} t        d      } ||d| j                  j	                                |j
                  D ]R  }t        |      r |       n|}|t        |d      st        d|z        | j                  j	                         |_	        T y )Nr   r_   r9   _locklockzUnknown/unsupported handler %r)
rb   r`   r#   rF   r   _handlerListcallabler&   	TypeErrorrf   )r<   r`   r9   wrhandlers        r   r\   zBasePatcher.patch_logging   s    #Y'7GT%7%7%=%=%?@&& 	6B&rlbdG7F+ @7 JKK--335GL	6r   c                 F    t        d      }ddlm} ddlm}  ||d|       y )Nr=   r   r_   r   )localrm   )r#   rb   r`   gevent.localrm   )r<   r=   r`   rm   s       r   rL   z"BasePatcher.patch__threading_local   s!    %&89#&#We4r   c                     t         r6   NotImplementedErrorr<   s    r   rM   z BasePatcher.patch_active_threads       !!r   c                     t         r6   rp   rr   s    r   rN   zGBasePatcher.patch_threading_shutdown_on_main_thread_not_already_patched   rs   r   c                    | j                   }| j                  j                  j                  |       |j                  }| j                  j                         |_        || j                  j                  v r:| j                  j                  |   | j                  j                  |j                  <   ||j                  k7  r| j                  j                  |= y y r6   )rI   rF   	_danglingremoveidentr   _ident_active)r<   rI   oldids      r   rO   z%BasePatcher.patch_main_thread_cleanup   s    
 &&$$++K8
 !!!//99;D&&...<@<N<N<V<VW\<]D&&{'8'89K%%%""**51 &r   c                     t        d| j                         ddlm | j                  | j
                  | j
                  j                  | j                  fd} d|       y )Nz`Monkey-patching not on the main thread; threading.main_thread().join() will hang from a greenletr   r_   c                  @             _                   d       y )NrD   )ry   )r   rI   rJ   r`   rF   s   r   rD   z@BasePatcher.patch_shutdown_not_on_main_thread.<locals>._shutdown  s      "+KO}k=Ar   rD   )r   r;   rb   r`   rI   rF   r   rJ   )r<   rD   r   rI   rJ   r`   rF   s     @@@@@r   rP   z-BasePatcher.patch_shutdown_not_on_main_thread   si     R}}	& 	$&&**&&00	**	B 	B 	=+y9r   c                 <     ddl m ddlm d fd	}|S )Nr   )sleep)timec                 
   d }j                         u rt        d      j                  ry j                         sy | r
        | z   }j                         r'|        |kD  ry  d       j                         r&y y )NzCannot join current threadg{Gz?)rG   RuntimeErrordeadis_alive)timeoutendr   rA   thread_greenletrF   r   s     r   joinzBBasePatcher._make_existing_non_main_thread_join_func.<locals>.join  s    C++-7"#?@@*/C/C" ??$fw&//#?tv|d //#r   r6   )
gevent.hubr   r   )rA   r   rF   r   r   r   s   ``` @@r   (_make_existing_non_main_thread_join_funcz4BasePatcher._make_existing_non_main_thread_join_func  s    $	 	@ r   )TTTTTN)r   r   r   rS   rT   rU   rF   rH   rI   rJ   r?   rW   rK   rY   r\   rL   rM   rN   rO   rP   staticmethodr   r   r   r   r4   r4   M   s{    *  JMKMRV $"6Pp!$<65""2$:6 % %r   r4   )
__doc__rZ   _utilr   r   r   _stater   r2   r4   r   r   r   <module>r      s-       !   %9zj jr   