
    `i                     \    d dl Z  G d d          Z G d d          Z G d d          ZdS )    Nc                   *    e Zd ZdZd Zd Zd Zd ZdS )Proxyz` Class for wrapping a shared resource object and getting
        notified when it's deleted
    c                 J    || _         |                    dd           | _        d S )N	on_delete)objectgetr   )selfr   kwargss      m/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/supervisor/socket_manager.py__init__zProxy.__init__   s"    K66    c                 @    | j         r|                                   d S d S Nr   r	   s    r   __del__zProxy.__del__   s,    > 	NN	 	r   c                 ,    t          | j        |          S r   )getattrr   )r	   names     r   __getattr__zProxy.__getattr__   s    t{D)))r   c                     | j         S r   )r   r   s    r   _getz
Proxy._get   s
    {r   N)__name__
__module____qualname____doc__r   r   r   r    r   r   r   r      sZ         7 7 7  * * *    r   r   c                   *    e Zd ZdZd Zd Zd Zd ZdS )ReferenceCounterz8 Class for tracking references to a shared resource
    c                 H    |d         | _         |d         | _        d| _        d S )Non_non_zeroon_zeror   )r!   r"   	ref_count)r	   r
   s     r   r   zReferenceCounter.__init__   s&    !-0i(r   c                     | j         S r   )r#   r   s    r   	get_countzReferenceCounter.get_count   s
    ~r   c                 d    | j         dk    r|                                  | xj         dz  c_         d S )Nr      )r#   r!   r   s    r   	incrementzReferenceCounter.increment"   s5    >Q!r   c                     | j         dk    rt          d          | xj         dz  c_         | j         dk    r|                                  d S d S )Nr   z.Illegal operation: cannot decrement below zeror'   )r#   	Exceptionr"   r   s    r   	decrementzReferenceCounter.decrement'   sT    >QLMMM!>QLLNNNNN r   N)r   r   r   r   r   r%   r(   r+   r   r   r   r   r      sZ           
    
    r   r   c                   H    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )SocketManagera   Class for managing sockets in servers that create/bind/listen
        before forking multiple child processes to accept()
        Sockets are managed at the process group level and referenced counted
        at the process level b/c that's really the only place to hook in
    c                     |                     dd           | _        d | _        d| _        || _        t          | j        | j                  | _        d S )NloggerF)r"   r!   )	r   r/   socketpreparedsocket_configr   _close_prepare_socketref_ctr)r	   r2   r
   s      r   r   zSocketManager.__init__5   sQ    jj400*'KT-A  r   c                 R    d| j         dt          |           d| j        j        dS )N<z at z for >)	__class__idr2   urlr   s    r   __repr__zSocketManager.__repr__>   s3     &*nnn&(hhhh&*&8&<&<&<> 	>r   c                     | j         S r   )r2   r   s    r   configzSocketManager.configC   s    !!r   c                     | j         S r   )r1   r   s    r   is_preparedzSocketManager.is_preparedF   s
    }r   c                     | j                                          |                                  t          | j        | j         j                  S )Nr   )r5   r(   _require_preparedr   r0   r+   r   s    r   
get_socketzSocketManager.get_socketI   sB          T[DL,BCCCCr   c                 \    |                                   | j                                        S r   )rB   r5   r%   r   s    r   get_socket_ref_countz"SocketManager.get_socket_ref_countN   s(       |%%'''r   c                 2    | j         st          d          d S )NzSocket has not been prepared)r1   r*   r   s    r   rB   zSocketManager._require_preparedR   s%    } 	<:;;;	< 	<r   c                    | j         s| j        r"| j                            d| j        z             | j                                        | _        | j                                        r2| j                            | j                                                   n$| j                            t
          j                   d| _         d S d S )NzCreating socket %sT)	r1   r/   infor2   create_and_bindr0   get_backloglisten	SOMAXCONNr   s    r   r4   zSocketManager._prepare_socketV   s    } 	!{ L  !58J!JKKK,<<>>DK!--// 5""4#5#A#A#C#CDDDD""6#3444 DMMM	! 	!r   c                     |                                   | j        r"| j                            d| j        z             | j                                         d| _        d S )NzClosing socket %sF)rB   r/   rH   r2   r0   closer1   r   s    r   r3   zSocketManager._closea   s]       ; 	GK043EEFFFr   N)r   r   r   r   r   r<   r>   r@   rC   rE   rB   r4   r3   r   r   r   r-   r-   .   s           > > >
" " "  D D D
( ( (< < <	! 	! 	!    r   r-   )r0   r   r   r-   r   r   r   <module>rO      s           &       08 8 8 8 8 8 8 8 8 8r   