U
    Ã@Ûf¿  ã                
   @   s¶   d Z ddlZddlmZ ddlmZ ddlmZ dddd	d
dddddg
Zeddg7 Zej	 
d¡Ze ¡ Zdaej	 deƒ defdef¡ daG dd„ dƒZdadd„ Zdd„ ZeZdS )z=Implements the standard threading module, using greenthreads.é    N)Úthread)Útime)Ú	greenletsÚ_start_new_threadÚ_allocate_lockZ_sleepÚlocalÚ
stack_sizeÚLockÚcurrentThreadÚcurrent_threadÚ_after_forkÚ	_shutdownÚ	get_identÚ_set_sentinelÚ	threadingÚ_threadr   é   c                   @   s|   e Zd ZdZdd„ Zdd„ Zddd„Zd	d
„ ZeZdd„ Z	e	Z
eee	ƒZedd„ ƒZdd„ ZeZedd„ ƒZdd„ ZeZdS )Ú_GreenThreadzQWrapper for GreenThread objects to provide Thread-like attributes
    and methodsc                 C   s   || _ dt | _td7 ad S )NzGreenThread-%dr   )Ú_gÚ_countÚ_name)ÚselfÚg© r   úR/var/www/html/chatgpt/venv/lib/python3.8/site-packages/eventlet/green/threading.pyÚ__init__    s    
z_GreenThread.__init__c                 C   s   d| j | jf S )Nz<_GreenThread(%s, %r)>)r   r   ©r   r   r   r   Ú__repr__&   s    z_GreenThread.__repr__Nc                 C   s
   | j  ¡ S ©N)r   Úwait)r   Útimeoutr   r   r   Újoin)   s    z_GreenThread.joinc                 C   s   | j S r   )r   r   r   r   r   ÚgetName,   s    z_GreenThread.getNamec                 C   s   t |ƒ| _d S r   )Ústrr   )r   Únamer   r   r   ÚsetName0   s    z_GreenThread.setNamec                 C   s
   t | jƒS r   )Úidr   r   r   r   r   Ú<lambda>6   ó    z_GreenThread.<lambda>c                 C   s   dS ©NTr   r   r   r   r   ÚisAlive8   s    z_GreenThread.isAlivec                 C   s   dS r)   r   r   r   r   r   r'   <   r(   c                 C   s   | j S r   )Údaemonr   r   r   r   ÚisDaemon>   s    z_GreenThread.isDaemon)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r!   r"   Úget_namer%   Úset_nameÚpropertyr$   Úidentr*   Úis_aliver+   r,   Z	is_daemonr   r   r   r   r      s   

r   c                 C   s.   t stdƒa tt jdƒr*t| dƒs*| j| _| S )Nr   r1   )Ú__threadingÚ
__import__ÚhasattrÚThreadr"   r1   )Útr   r   r   Ú_fixup_threadF   s    ÿr;   c                     sì   t  ¡ } | stt ¡ ƒS z
tj‰ W n tk
r@   i  ‰ t_Y nX t| ƒ‰ˆ  	ˆ¡}|d k	r`|S t
d krztj tdƒj¡a
‡fdd„t
ƒ D ƒ}|rš|d S ‡ ‡fdd„}z|  |¡ W n  tk
rÖ   tt ¡ ƒ}Y nX t| ƒ }ˆ ˆ< |S )Nr   c                    s   g | ]}|j ˆ kr|‘qS r   )r4   )Ú.0Úth)Úg_idr   r   Ú
<listcomp>o   s     
 z"current_thread.<locals>.<listcomp>r   c                    s
   ˆ ˆ= d S r   r   )r   ©Úactiver>   r   r   Úcleanupt   s    zcurrent_thread.<locals>.cleanup)ÚgreenletZ
getcurrentr;   Ú__orig_threadingr   Ú__threadlocalrA   ÚAttributeErrorr&   ÚgetÚ__patched_enumerateÚeventletÚpatcherZpatch_functionr7   Ú	enumerateÚlinkr   )r   r:   ÚfoundrB   r   r@   r   r   W   s.    

)r0   rI   Zeventlet.greenr   r   Zeventlet.supportr   rC   Z__patched__rJ   ÚoriginalrD   r   rE   rH   ZinjectÚglobalsr   r   r6   r;   r   r
   r   r   r   r   Ú<module>   s<         þü',