
    vg]K                     $   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 dlm	Z	 d dlm
Z
 d dlmZ d d	lmZ d d
lmZ d dlmZ  G d d          Z G d de          Z G d de          Z G d de          ZdZdZd Z G d de          Zd ZdS )    N)find_prefix_at_end)compact_traceback)	as_string)notify)EventRejectedEvent)ProcessLogStderrEvent)ProcessLogStdoutEvent)EventListenerStates) getEventListenerStateDescription)loggersc                   L    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 ZdS )PDispatcherz{ Asyncore dispatcher for mainloop, representing a process channel
    (stdin, stdout, or stderr).  This class is abstract. Fc                 >    || _         || _        || _        d| _        d S NF)processchannelfdclosedselfr   r   r   s       S/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/supervisor/dispatchers.py__init__zPDispatcher.__init__   s"        c           	      b    d| j         j        dt          |           d| j        d| j        d	S )N<z at z for  (z)>)	__class____name__idr   r   r   s    r   __repr__zPDispatcher.__repr__   s;     +/>+B+B+B+-d8888+/<<<+/<<<9 	9r   c                     t           NNotImplementedErrorr    s    r   readablezPDispatcher.readable        !!r   c                     t           r#   r$   r    s    r   writablezPDispatcher.writable#   r'   r   c                     t           r#   r$   r    s    r   handle_read_eventzPDispatcher.handle_read_event&   r'   r   c                     t           r#   r$   r    s    r   handle_write_eventzPDispatcher.handle_write_event)   r'   r   c                     t                      \  }}}}| j        j        j        j                            dt          |           d|d|d|d	           |                                  d S )Nz-uncaptured python exception, closing channel r   : ))r   r   configoptionsloggercriticalreprclose)r   niltvtbinfos        r   handle_errorzPDispatcher.handle_error,   sv    -//Q6#*333T



		 	 	 	

r   c                     | j         s=| j        j        j        j                            d| j        d|            d| _         d S d S )Nzfd z closed, stopped monitoring T)r   r   r2   r3   r4   debugr   r    s    r   r7   zPDispatcher.close9   sZ    { 	L'.4449=$$GI I IDKKK	 	r   c                     d S r#    r    s    r   flushzPDispatcher.flush?   s    r   N)r   
__module____qualname____doc__r   r   r!   r&   r)   r+   r-   r<   r7   rA   r@   r   r   r   r      s        = = F  9 9 9" " "" " "" " "" " "        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	 Zd
 Zd Zd Zd Zd Zd ZdS )POutputDispatcherae  
    Dispatcher for one channel (stdout or stderr) of one process.
    Serves several purposes:

    - capture output sent within <!--XSUPERVISOR:BEGIN--> and
      <!--XSUPERVISOR:END--> tags and signal a ProcessCommunicationEvent
      by calling notify(event).
    - route the output to the appropriate log handlers as specified in the
      config.
    NFr   c                    || _         || _        || _        | j        j        | _        |                                  |                                  | j        | _        | j        j        }| j        j	        }|t          |          f| _        |t          |          f| _        t          j        j        | _        | j         j        }|j        j        | j        k    | _        |j        | _        |j        | _        dS )z
        Initialize the dispatcher.

        `event_type` should be one of ProcessLogStdoutEvent or
        ProcessLogStderrEvent
        N)r   
event_typer   r   _init_normallog_init_capturelog	normallogchildlogBEGIN_TOKEN	END_TOKENlenbegintoken_dataendtoken_datar   LevelsByNameDEBGmainlog_levelr2   r3   loglevellog_to_mainlogstdout_events_enabledstderr_events_enabled)r   r   rH   r   
begintokenendtokenr2   s          r   r   zPOutputDispatcher.__init__T   s     $. _0
?, *C
OO<&H6$16$$n59KK%+%A"%+%A"""r   c                    | j         j        }| j        }t          |d|z            }t          |d|z            }t          |d|z            }t          |d|z            }|s|r|j                                        | _        |r!t          j        | j        |d|  ||           |r%t          j	        | j        |j
        dz              d	S d	S )
z
        Configure the "normal" (non-capture) log for this channel of this
        process.  Sets self.normallog if logging is enabled.
        
%s_logfile%s_logfile_maxbytes%s_logfile_backupsz	%s_syslog%(message)s)filenamefmtrotatingmaxbytesbackupsz %(message)s)ra   N)r   r2   r   getattrr3   	getLoggerrK   r   handle_filehandle_syslogname)r   r2   r   logfilerc   rd   	to_syslogs          r   rI   z!POutputDispatcher._init_normallogp   s   
 $,&,"8996#87#BCC&"6"@AAFK'$9::	 	8i 	8#^5577DN 	 !!)\)!     	!K.0     	 	r   c                     t          | j        j        d| j        z            }|rF| j        j        j                                        | _        t          j        | j        d|           dS dS )z
        Configure the capture log for this process.  This log is used to
        temporarily capture output when special output is detected.
        Sets self.capturelog if capturing is enabled.
        z%s_capture_maxbytesr_   )ra   rc   N)	re   r   r2   r   r3   rf   
capturelogr   handle_boundIO)r   capture_maxbytess     r   rJ   z"POutputDispatcher._init_capturelog   s     #4<#6#84<#GI I 	"l19CCEEDO"!)     	 	r   c                     | j         | j        fD ]6}|2|j        D ]*}|                                 |                                 +7d S r#   )rK   rm   handlersremovereopenr   loghandlers      r   
removelogszPOutputDispatcher.removelogs   s^    NDO4 	% 	%C"| % %GNN$$$NN$$$$		% 	%r   c                 h    | j         | j        fD ]"}||j        D ]}|                                 #d S r#   )rK   rm   rq   rs   rt   s      r   
reopenlogszPOutputDispatcher.reopenlogs   sN    NDO4 	% 	%C"| % %GNN$$$$	% 	%r   c                    |rA| j         j        }|j        j        rt	          |          }| j        r| j                            |           | j        ryt          |t                    s|}n,	 |
                    d          }n# t          $ r d|z  }Y nw xY wd}|j        j                            | j        ||j        | j        |           | j        dk    r8| j        r/t%          t'          | j         | j         j        |                     d S d S | j        r1t%          t-          | j         | j         j        |                     d S d S d S )Nzutf-8Undecodable: %rz%%(name)r %(channel)s output:
%(data)s)ri   r   datastdout)r   r2   r3   
strip_ansistripEscapesrL   inforV   
isinstancebytesdecodeUnicodeDecodeErrorr4   ru   rT   ri   r   rW   r   r	   pidrX   r   )r   r|   r2   textmsgs        r   _logzPOutputDispatcher._log   s    	\(F~( *#D))} )""4(((" 5!$.. 8DD8#{{733- 8 8 80478>%))&&+ Lt * 5 5 5 |x''- -dl L,d4 4      - -dl L,d4 4    5	 	2 s   ,B BBc                 d   | j         %| j        }d| _        |                     |           d S | j        r| j        \  }}n
| j        \  }}t          | j                  |k    rd S | j        }d| _        	 |                    |d          \  }}|                     |           |                                  || _        n\# t          $ rO d }t          ||          }|r#| j        || d          z   | _        |d |          }|                     |           Y nw xY w|r|                                  d S d S )Nr      )rm   output_bufferr   capturemoderQ   rP   rO   splittoggle_capturemode
ValueErrorr   record_output)r   r|   tokentokenlenbeforeafterindexs          r   r   zPOutputDispatcher.record_output   sl   ?"%D!$DIIdOOOF 	3"0OE88"2OE8t!""h..F! 	' JJua00MFE IIf##%%%!&D  	 	 	E&tU33E %%)%7$vww-%G"GeVG}IIdOOOOO	  	!     	! 	!s   2B< <ADDc                 R   | j          | _         | j        | j         r| j        | _        d S | j        j        D ]}|                                 | j                                        }| j        }| j        j        j	        }| 
                    | j        | j        j        |          }t          |           d}| j        j        j        j                            |||           | j        j        D ]*}|                                 |                                 +| j        | _        d S d S )Nz-%(procname)r %(channel)s emitted a comm event)procnamer   )r   rm   rL   rq   rA   getvaluer   r   r2   ri   rH   r   r   r3   r4   r>   rr   rs   rK   )r   rv   r|   r   r   eventr   s          r   r   z$POutputDispatcher.toggle_capturemode   s'   #//?& / $#7 $ $GMMOOOO//11,<.3dl6FMMuE#+288BJAH 9 J J J  $7 % %GNN$$$NN$$$$ $' '&r   c                     dS r   r@   r    s    r   r)   zPOutputDispatcher.writable	      ur   c                     | j         rdS dS NFTr   r    s    r   r&   zPOutputDispatcher.readable      ; 	5tr   c                     | j         j        j                            | j                  }| xj        |z  c_        |                                  |s|                                  d S d S r#   )r   r2   r3   readfdr   r   r   r7   )r   r|   s     r   r+   z#POutputDispatcher.handle_read_event  sj    |"*11$'::d" 	 JJLLLLL		 	r   )r   rB   rC   rD   rL   rK   rm   r   r   r   rI   rJ   rw   ry   r   r   r   r)   r&   r+   r@   r   r   rF   rF   B   s        	 	 HIJKMB B B8  @   % % %% % %  @"! "! "!H/ / /0    
    r   rF   c                       e Zd ZdZdZdZdZdZ ee          Z	 ee          Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd ZdS )PEventListenerDispatcherzN An output dispatcher that monitors and changes a process'
    listener_state Nr   s   READY
s   RESULT c                    t                               | |||           t          j        | j        _        d | j        _        d| _        d | _        t          |j
        d|z            }|rvt          |j
        d|z            }t          |j
        d|z            }|j
        j                                        | _        t          j        | j        |d|  ||           d S d S )Nr   r\   r]   r^   r_   )rb   rc   rd   )r   r   r
   ACKNOWLEDGEDr   listener_stater   result	resultlenre   r2   r3   rf   rL   r   rg   )r   r   r   r   rj   rc   rd   s          r   r   z!PEventListenerDispatcher.__init__&  s    T7GR888 ':&F#!'.,*@AA 	w~/Dw/NOOHgn.BW.LMMG#N2<<>>DM!)\)!     		 	r   c                     | j         7| j         j        D ],}|                                 |                                 +d S d S r#   )rL   rq   rr   rs   r   rv   s     r   rw   z#PEventListenerDispatcher.removelogs>  sS    =$=1 ! !        %$! !r   c                 ^    | j         #| j         j        D ]}|                                 d S d S r#   )rL   rq   rs   r   s     r   ry   z#PEventListenerDispatcher.reopenlogsD  sC    =$=1 ! !     %$! !r   c                     dS r   r@   r    s    r   r)   z!PEventListenerDispatcher.writableJ  r   r   c                     | j         rdS dS r   r   r    s    r   r&   z!PEventListenerDispatcher.readableM  r   r   c                    | j         j        j                            | j                  }|r| xj        |z  c_        | j         j        j        }|d| j        d|}| j         j        j        j        	                    |           | j
        r?| j         j        j        j        rt          |          }| j
                            |           n|                                  |                                  d S )Nr0   z	 output:
)r   r2   r3   r   r   state_bufferri   r   r4   r>   rL   r~   r   r   r7   handle_listener_state_change)r   r|   r   r   s       r   r+   z*PEventListenerDispatcher.handle_read_eventR  s    |"*11$':: 	%|*/H)14<<<FCL'.44S999} )<&.9 .'--D""4(((
 JJLLL))+++++r   c                    | j         }|sd S | j        }|j        j        }|j        }|t
          j        k    r	d| _         d S |t
          j        k    rt          |          | j	        k     rd S |
                    | j                  rB|                     t
          j                   | j	        }| j         |d          | _         d |_        n-|                     t
          j                   d| _         d |_        | j         r|                                  d S d S |t
          j        k    r/|                     t
          j                   d| _         d |_        d S |t
          j        k    r| j        |                    d          }|dk    rd S | j         d |         }| j         |dz   d          | _         || j        d          }	 t)          |          | _        nQ# t*          $ r 	 t-          |          }n# t.          $ r d|z  }Y nw xY w|j        j        j                            |d|d           |                     t
          j                   d| _         t7          t9          ||j                             d |_        Y d S w xY w| j        t          | j                  z
  }	|	rM| xj        | j         d |	         z  c_        | j         |	d          | _         | j        t          | j                  z
  }	|	s4|                     | j                   d | j        _        d| _        d | _        | j         r|                                  d S d S d S )Nr      
r   r{   z: bad result line: '')r   r   r2   ri   r   r
   UNKNOWNr   rO   READY_FOR_EVENTS_LEN
startswithREADY_FOR_EVENTS_TOKEN_change_listener_stateREADYr   r   BUSYr   findRESULT_TOKEN_START_LENintr   r   r   r3   r4   warnr   r   r   handle_result)
r   r|   r   r   stater   posresult_liner   neededs
             r   r   z5PEventListenerDispatcher.handle_listener_state_changef  s     	F,>&&'/// #DF'4444yy4444!<== %++,?,EFFF4$($5hii$@! $++,?,GHHH$'! $  1133333)///''(;(CDDD #D GMF)...~%ii&&"99 F"/5$($5c!eff$=!'(C(D(DE	%(^^DNN!   F&/&<&<- F F F&7+&EFN*1669A;;;O   //0C0KLLL(+D%-gw}EEFFF$(GMFF #dk*:*:: ?KK4#4WfW#==KK(,(9&''(BD%!^c$+.>.>>F *&&t{333)-DL&"%DK%)DN  41133333Y /.T4 4s7   <G 
I?G-,I?-G?<I?>G??A<I?>I?c                    | j         }|j        j        }|j        j        j        }	 | j         j        j                            |j        |           |                    d|z             | 	                    t          j                   d S # t          $ r] |                    d|z             | 	                    t          j                   t          t          ||j                             Y d S  |                    d|z             | 	                    t          j                   t          t          ||j                             Y d S xY w)Nz%s: event was processedz%s: event was rejectedz%s: event caused an error)r   r2   ri   r3   r4   groupresult_handlerr   r>   r   r
   r   RejectEventr   r   r   r   )r   r   r   r   r4   s        r   r   z&PEventListenerDispatcher.handle_result  s>   ,>&'.	?L%44W]FKKKLL2X=>>>''(;(HIIIII 	? 	? 	?KK08;<<<''(;(HIII%gw}==>>>>>>	?KK3h>???''(;(CDDD%gw}==>>>>>>s   A!B	 	A#E/AEc                 N   | j         }|j        j        }|j        }|dt	          |          dt	          |          }|j        j        j                            |           ||_        |t          j	        k    r+d|z  }|j        j        j        
                    |           d S d S )Nz: z -> z%s: has entered the UNKNOWN state and will no longer receive events, this usually indicates the process violated the eventlistener protocol)r   r2   ri   r   r   r3   r4   r>   r
   r   r   )r   	new_stater   r   	old_stater   s         r   r   z/PEventListenerDispatcher._change_listener_state  s    ,>&*	 HH,Y7777,Y777
 	%++C000!*+3339;CDC N")..s33333	 43r   )r   rB   rC   rD   rL   r   r   RESULT_TOKEN_STARTrO   r   r   r   rw   ry   r)   r&   r+   r   r   r   r@   r   r   r   r     s         HL'#3566 S!344  0! ! !! ! !    
, , ,(U4 U4 U4n? ? ?$4 4 4 4 4r   r   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )PInputDispatcherz Input (stdin) dispatcher c                 N    t                               | |||           d| _        d S )Nr   )r   r   input_bufferr   s       r   r   zPInputDispatcher.__init__  s*    T7GR888r   c                 &    | j         r	| j        sdS dS )NTF)r   r   r    s    r   r)   zPInputDispatcher.writable  s      	T[ 	4ur   c                     dS r   r@   r    s    r   r&   zPInputDispatcher.readable  r   r   c                     | j         j        j                            | j        | j                  }| j        |d          | _        d S r#   )r   r2   r3   writer   r   )r   sents     r   rA   zPInputDispatcher.flush  sE    |"*00151BD D -dee4r   c                     | j         rg	 |                                  d S # t          $ rC}|j        d         t          j        k    rd| _         |                                  n Y d }~d S d }~ww xY wd S )Nr   r   )r   rA   OSErrorargserrnoEPIPEr7   )r   whys     r   r-   z#PInputDispatcher.handle_write_event  s     	

   8A;%+--(+D%JJLLLL !LLLLL	 	s    
A,8A''A,N)	r   rB   rC   rD   r   r)   r&   rA   r-   r@   r   r   r   r     se        $$       
  5 5 5	 	 	 	 	r   r   s   [)   H   f   A   B   C   D   R   s   u   J   K   h   l   p   mc                    d}d}d}t          |           }||k     ri|dk    r| ||dz            t          v rd}nA|r?|                     t          |          }|dk    r|| |d         z   S || ||         z   }|}d}|dz  }||k     i|S )z>
    Remove all ANSI color escapes from the given string.
    r   r   r   r   N)rO   ANSI_TERMINATORSr   ANSI_ESCAPE_BEGIN)sr   showiLns         r   r   r     s     FD	AAA
a%%1991QU7'777DD 	(!,,ABww!""~%!AaC&	Q a%% Mr   c                       e Zd ZdZdS )r   zY The exception type expected by a dispatcher when a handler wants
    to reject an event N)r   rB   rC   rD   r@   r   r   r   r     s           r   r   c                 0    |dk    rt          |          d S )Ns   OK)r   )r   responses     r   default_handlerr      s#    5(### r   )r   supervisor.medusa.asynchat_25r   supervisor.medusa.asyncore_25r   supervisor.compatr   supervisor.eventsr   r   r   r	   supervisor.statesr
   r   
supervisorr   r   rF   r   r   r   r   r   	Exceptionr   r   r@   r   r   <module>r      s    < < < < < < ; ; ; ; ; ; ' ' ' ' ' ' $ $ $ $ $ $ 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 1 1 1 1 1 1 > > > > > >      2 2 2 2 2 2 2 2hW W W W W W W WrE4 E4 E4 E4 E4{ E4 E4 E4N    {   @  2   ,    )   $ $ $ $ $r   