o
    f                     @   sB  d Z dZddlZddlmZ ddlmZ zddlmZmZm	Z	 W n e
y3   ddlmZmZm	Z	 Y nw zddlmZ W n e
yI   ddlZY nw G dd dZG d	d
 d
ZG dd dZG dd dZG dd dZG dd dZejG dd deZG dd dZdFddZdGddZG dd dZG dd dZG d d! d!ZG d"d# d#eZG d$d% d%ZG d&d' d'ZG d(d) d)ZG d*d+ d+ZG d,d- d-Z G d.d/ d/e Z!ejG d0d1 d1eZ"G d2d3 d3e"Z#G d4d5 d5eZ$G d6d7 d7Z%G d8d9 d9Z&G d:d; d;Z'G d<d= d=Z(d>d? Z)d@dA Z*dBdC Z+dDdE Z,dS )HipDz%b %d %I:%M %p    NFault)as_bytes)Mockpatchsentinelc                   @   s  e Zd ZdZdZdZdZdZdZdZ	dZ
dZdd Zdd Zdd	 ZdZddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Z d/d0 Z!d1d2 Z"dZd3d4Z#d5d6 Z$d7d8 Z%d9d: Z&d;d< Z'd=d> Z(d?d@ Z)dAdB Z*dCdD Z+dEdF Z,dGdH Z-dIdJ Z.dKdL Z/dMdN Z0dOdP Z1dQdR Z2d[dTdUZ3dVdW Z4dXdY Z5dS )\DummyOptions      Nc                 C   s\  d| _ d| _d| _|  | _d| _d| _d| _d| _i | _	g | _
d| _i | _d| _d| _d | _d| _d| _d| _d| _d| _d| _d | _d| _d| _d| _d | _d| _i | _d | _d | _d | _d	| _ d | _!i | _"i | _#g | _$d | _%d| _&d | _'d | _(d | _)d| _*d | _+d
| _,g | _-g | _.d | _/d| _0g | _1g | _2g | _3d| _4d| _5d | _6t7| | _8d| _9d S )N
supervisorz/tmp  
   z/tmp/logfileF   NNr   z/foo/bar zhttp://localhost:9001):
identifierchildlogdiruid	getLoggerloggerbackofflimitlogfile	nocleanup
strip_ansi
pidhistoryprocess_group_configsnodaemon
socket_mapmood
mustreopenrealizeargsfds_cleaned_up
rlimit_setsetuid_calledhttpservers_openedsignals_set
daemonizedmake_logger_messagesautochildlogdir_cleared
cleaned_uppidfile_written	directorywaitpid_returnkills_signalparent_pipes_closedchild_pipes_closedforkpidpgrp_setdupedwritten
fds_closed	_exitcodeexecve_called
execv_args
setuid_msgprivsdroppedlogs_reopenedwrite_accepttempfile_nameremovedexisting
openreturnreadfd_resultparse_criticalsparse_warningsparse_infos	serverurlchanged_directoryumasksetDummyPollerpollersilentself rM   H/var/www/html/venv/lib/python3.10/site-packages/supervisor/tests/base.py__init__#   sp   


zDummyOptions.__init__c                 O   s   t  }t  g|_||f|_|S N)DummyLoggerhandlersargs)rL   rS   kwr   rM   rM   rN   r   ]   s   

zDummyOptions.getLoggerc                 K      || _ || _d S rP   )r    	realizekw)rL   rS   rT   rM   rM   rN   realizec      
zDummyOptions.realizeTc                 C      d S rP   rM   )rL   do_usagerM   rM   rN   process_configg      zDummyOptions.process_configc                 C   
   d| _ d S NT)r!   rK   rM   rM   rN   cleanup_fdsj      
zDummyOptions.cleanup_fdsc                 C      d| _ | jd d S )NTrlimits_set)rb   rD   appendrK   rM   rM   rN   set_rlimits_or_exitm      z DummyOptions.set_rlimits_or_exitc                 C   ra   )NTr#   )r#   rB   rc   rK   rM   rM   rN   set_uid_or_exitq   re   zDummyOptions.set_uid_or_exitc                 C   r]   r^   )r$   )rL   supervisordrM   rM   rN   openhttpserversu   r`   zDummyOptions.openhttpserversc                 C   r]   r^   )r&   rK   rM   rM   rN   	daemonizex   r`   zDummyOptions.daemonizec                 C   r]   r^   )r%   rK   rM   rM   rN   
setsignals{   r`   zDummyOptions.setsignalsc                 C      | j S rP   )r.   rK   rM   rM   rN   
get_signal~      zDummyOptions.get_signalc                 C   rk   rP   )r   rK   rM   rM   rN   get_socket_map   rm   zDummyOptions.get_socket_mapc                 C   rY   rP   rM   rK   rM   rM   rN   make_logger   r\   zDummyOptions.make_loggerc                 C   r]   r^   )r(   rK   rM   rM   rN   clear_autochildlogdir   r`   z"DummyOptions.clear_autochildlogdirc                 G   rk   rP   r=   )rL   ignoredrM   rM   rN   get_autochildlog_name   rm   z"DummyOptions.get_autochildlog_namec                 C   r]   r^   )r)   rK   rM   rM   rN   cleanup   r`   zDummyOptions.cleanupc                 C   r]   r^   )r*   rK   rM   rM   rN   write_pidfile   r`   zDummyOptions.write_pidfilec                 C   rk   rP   )r,   rK   rM   rM   rN   waitpid   rm   zDummyOptions.waitpidc                 C   s   | j d ur| j || j|< d S rP   )kill_exceptionr-   )rL   pidsigrM   rM   rN   kill   s   
zDummyOptions.killc                 C   s   dd l }||S Nr   )osstat)rL   filenamer|   rM   rM   rN   r}         
zDummyOptions.statc                 C      g dS N)z/binz/usr/binz/usr/local/binrM   rK   rM   rM   rN   get_path      zDummyOptions.get_pathc                 C   s   dd l }| S r{   )r|   getpid)rL   r|   rM   rM   rN   get_pid   s   zDummyOptions.get_pidc                 C   s    |dkrddl m} |dd S )Nz/bad/filenamer   )NotFoundzbad filename)supervisor.optionsr   )rL   r~   argvstr   rM   rM   rN   check_execv_args   s   zDummyOptions.check_execv_argsc                 C   sJ   | j d ur| j ddddd}|rd\|d< |d< |S d	\|d< |d< |S )
N      r
      )child_stdinstdinstdoutchild_stdout)      stderrchild_stderrr   )make_pipes_exception)rL   r   pipesrM   rM   rN   
make_pipes   s   
zDummyOptions.make_pipesc                 C   sH   | j d ur| j | jr|| j }| j|d}||7 }|| j|< t|S Nr   )write_exceptionr<   r4   
setdefaultlen)rL   fdcharsdatarM   rM   rN   write   s   


zDummyOptions.writec                 C   s   | j d ur| j | jS rP   )fork_exceptionr1   rK   rM   rM   rN   fork   s   
zDummyOptions.forkc                 C      | j | d S rP   )r5   rc   rL   r   rM   rM   rN   close_fd      zDummyOptions.close_fdc                 C   
   || _ d S rP   )r/   rL   r   rM   rM   rN   close_parent_pipes   r`   zDummyOptions.close_parent_pipesc                 C   r   rP   )r0   r   rM   rM   rN   close_child_pipes   r`   zDummyOptions.close_child_pipesc                 C   r]   r^   )r2   rK   rM   rM   rN   setpgrp   r`   zDummyOptions.setpgrpc                 C      || j |< d S rP   )r3   )rL   frmtorM   rM   rN   dup2      zDummyOptions.dup2c                 C   r   rP   )r6   rL   coderM   rM   rN   _exit   r`   zDummyOptions._exitc                 C   s*   d| _ | jd ur| j||f| _|| _d S r^   )r7   execv_exceptionr8   execv_environment)rL   r~   r   environmentrM   rM   rN   execve   s
   


zDummyOptions.execvec                 C   s   | j r| j S || _d S rP   )r9   r:   )rL   r   rM   rM   rN   drop_privileges      
zDummyOptions.drop_privilegesc                 C   rk   rP   )rA   r   rM   rM   rN   readfd   rm   zDummyOptions.readfdc                 C   r]   r^   r;   rK   rM   rM   rN   
reopenlogs   r`   zDummyOptions.reopenlogsc                 C   rk   rP   rq   )rL   prefixsuffixdirrM   rM   rN   
mktempfile   rm   zDummyOptions.mktempfilec                 C   s    | j d ur| j | j| d S rP   )remove_exceptionr>   rc   rL   pathrM   rM   rN   remove   s   
zDummyOptions.removec                 C   s   || j v rdS dS )NTF)r?   r   rM   rM   rN   exists   s   
zDummyOptions.existsrc                 C   s   | j r| j S t||S rP   )r@   open)rL   namemoderM   rM   rN   r      r   zDummyOptions.openc                 C   s   | j d ur| j d| _d S r^   )chdir_exceptionrF   )rL   r   rM   rM   rN   chdir   s   

zDummyOptions.chdirc                 C   r   rP   )rG   )rL   maskrM   rM   rN   setumask   r`   zDummyOptions.setumask)T)r   )6__name__
__module____qualname__loglevelminfdsr   r   r   rw   r   r   r   rO   r   rW   r[   r_   rd   rf   rh   ri   rj   rl   rn   ro   rp   rs   rt   ru   rv   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rM   rM   rM   rN   r      sh    :




r   c                   @   sp   e Zd ZdZdd Zdd Ze Z Z Z Z	 Z
Zdd Zdd	 Zd
d Zdd Zdd Zdd Zdd ZdS )rQ   Nc                 C   s   d| _ d| _d| _g | _d S NF)reopenedr>   closedr   rK   rM   rM   rN   rO     s   
zDummyLogger.__init__c                 K   s   |r|| }| j | d S rP   r   rc   )rL   msgrT   rM   rM   rN   info     zDummyLogger.infoc                 K   s   |r|| }| j | d S rP   r   )rL   levelr   rT   rM   rM   rN   log  r   zDummyLogger.logc                 C   s   |   d S rP   )close)rL   handlerrM   rM   rN   
addHandler     zDummyLogger.addHandlerc                 C   r]   r^   )r   rK   rM   rM   rN   reopen  r`   zDummyLogger.reopenc                 C   r]   r^   r   rK   rM   rM   rN   r     r`   zDummyLogger.closec                 C   r]   r^   )r>   rK   rM   rM   rN   r     r`   zDummyLogger.removec                 C   r]   r^   )flushedrK   rM   rM   rN   flush  r`   zDummyLogger.flushc                 C   s   d | jS r   )joinr   rK   rM   rM   rN   getvalue!  r   zDummyLogger.getvalue)r   r   r   r   rO   r   warndebugcriticaltraceerrorblatherr   r   r   r   r   r   r   rM   rM   rM   rN   rQ     s    rQ   c                   @   s   e Zd ZdddZdd ZdS )DummySupervisorNc                 C   s\   |d u r	t  | _n|| _|d u rddlm} |j| j_n|| j_|d u r)i | _d S || _d S )Nr   )SupervisorStates)r   optionssupervisor.supervisordr   RUNNINGr   process_groups)rL   r   stater   r   rM   rM   rN   rO   %  s   


zDummySupervisor.__init__c                 C   s   | j jS rP   )r   r   rK   rM   rM   rN   	get_state4  r   zDummySupervisor.get_state)NNN)r   r   r   rO   r   rM   rM   rM   rN   r   $  s    
r   c                   @   sP   e Zd ZdZdZdZdZdZdd Zdd Z	dd Z
d	d
 Zdd Zdd ZdS )DummySocketFNc                 C   r   rP   r   r   rM   rM   rN   rO   >  r`   zDummySocket.__init__c                 C   rk   rP   r   rK   rM   rM   rN   filenoA  rm   zDummySocket.filenoc                 C      d| _ || _d S r^   )bind_called	bind_addr)rL   addrrM   rM   rN   bindD  rX   zDummySocket.bindc                 C   r   r^   )listen_calledlisten_backlog)rL   backlogrM   rM   rN   listenH  rX   zDummySocket.listenc                 C   r]   r^   )close_calledrK   rM   rM   rN   r   L  r`   zDummySocket.closec                 C      dS )Nzdummy socketrM   rK   rM   rM   rN   __str__O  r\   zDummySocket.__str__)r   r   r   r   r   r   r   r   rO   r   r   r   r   r  rM   rM   rM   rN   r   7  s    r   c                   @   s>   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd ZdS )DummySocketConfig   c                 C   s   || _ || _d| _d S )Nzunix:///sock)r   r   url)rL   r   r   rM   rM   rN   rO   S  r   zDummySocketConfig.__init__c                 C   r  )Nz
dummy addrrM   rK   rM   rM   rN   r   X  r\   zDummySocketConfig.addrc                 C   s   | j |j kS rP   r   rL   otherrM   rM   rN   __eq__[  r   zDummySocketConfig.__eq__c                 C   s   |  | S rP   )r  r  rM   rM   rN   __ne__^  r   zDummySocketConfig.__ne__c                 C   rk   rP   )r   rK   rM   rM   rN   get_backloga  rm   zDummySocketConfig.get_backlogc                 C   
   t | jS rP   )r   r   rK   rM   rM   rN   create_and_bindd  r`   z!DummySocketConfig.create_and_bindN)r  )	r   r   r   rO   r   r  r	  r
  r  rM   rM   rM   rN   r  R  s    
r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )DummySocketManagerc                 K   r   rP   _config)rL   configkwargsrM   rM   rN   rO   h  r`   zDummySocketManager.__init__c                 C   rk   rP   r  rK   rM   rM   rN   r  k  rm   zDummySocketManager.configc                 C   s   t | jjS rP   )r   r  r   rK   rM   rM   rN   
get_socketn  r   zDummySocketManager.get_socketN)r   r   r   rO   r  r  rM   rM   rM   rN   r  g  s    r  c                   @   s  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ZdZdZdZdZdZd/ddZdd Zd	d
 Zdd Zdd Zdd Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd  Z'd!d" Z(d#d$ Z)d%d& Z*d'd( Z+d)d* Z,d+d, Z-d-d. Z.dS )0DummyProcessNr   Fr   c                 C   s   || _ d| _d| _d| _d | _d| _|d u rddlm} |j}|| _	d| _
d | _d| _td| _td| _td| _td| _td| _i | _i | _i | _d | _d| _d | _d | _d | _d| _d S )NFTr   ProcessStatesr   )r  logsremovedstop_calledstop_report_calledbackoff_secsspawnedsupervisor.processr  r   r   error_at_clearkilled_withdrainedr   stdout_bufferstderr_bufferstdout_loggedstderr_loggedstdin_bufferr   rpipesdispatchersfinishedr;   execv_arg_exceptioninput_fd_drainedoutput_fd_drainedtransitioned)rL   r  r   r  rM   rM   rN   rO     s6   





zDummyProcess.__init__c                 C   r]   r^   r   rK   rM   rM   rN   r     r`   zDummyProcess.reopenlogsc                 C   s   | j rtdd| _d S )NwhateverT)r  IOErrorr  rK   rM   rM   rN   
removelogs  s   
zDummyProcess.removelogsc                 C   rk   rP   )r   rK   rM   rM   rN   r     rm   zDummyProcess.get_statec                 C   s$   d| _ d| _ddlm} |j| _d S )NTFr   r  )r  killingr  r  STOPPEDr   rL   r  rM   rM   rN   stop  s   zDummyProcess.stopc                 C   r]   r^   )r  rK   rM   rM   rN   stop_report  r`   zDummyProcess.stop_reportc                 C   r   rP   )r  rL   signalrM   rM   rN   rz     r`   zDummyProcess.killc                 C   r   rP   )sent_signalr3  rM   rM   rN   r4    r`   zDummyProcess.signalc                 C   s   d| _ ddlm} |j| _d S )NTr   r  )r  r  r  r   r   r0  rM   rM   rN   spawn  s   zDummyProcess.spawnc                 C   r]   r^   )r  rK   rM   rM   rN   drain  r`   zDummyProcess.drainc                 C   s   g S rP   rM   rK   rM   rM   rN   readable_fds  r\   zDummyProcess.readable_fdsc                 C   s0   |  j | j7  _ d| _|  j| j7  _d| _d S r   )r!  r  r"  r   rK   rM   rM   rN   record_output  s   
zDummyProcess.record_outputc                 C   s   ||f| _ d S rP   )r&  )rL   rx   stsrM   rM   rN   finish  r   zDummyProcess.finishc                 C   s   ddl m} |j| _d S )Nr   r  )r  r  FATALr   r0  rM   rM   rN   give_up  s   zDummyProcess.give_upc                 C   s6   | j r|  ddd l}|| jj}|d }||fS )Nr+  r   )r'  shlexsplitr  command)rL   r>  commandargsprogramrM   rM   rN   get_execv_args  s   
zDummyProcess.get_execv_argsc                 C   r   rP   )r)  r   rM   rM   rN   drain_output_fd  r`   zDummyProcess.drain_output_fdc                 C   r   rP   )r(  r   rM   rM   rN   drain_input_fd  r`   zDummyProcess.drain_input_fdc                 C   s"   | j d ur| j |  j|7  _d S rP   )r   r#  )rL   r   rM   rM   rN   r     s   
zDummyProcess.writec                 C   r]   r^   r*  rK   rM   rM   rN   
transition  r`   zDummyProcess.transitionc                 C      | j j|j jkS rP   r  priorityr  rM   rM   rN   r    r   zDummyProcess.__eq__c                 C      | j j|j jk S rP   rI  r  rM   rM   rN   __lt__  r   zDummyProcess.__lt__rP   )/r   r   r   r   rx   	laststartlaststopdelayadministrative_stopsystem_stopr.  backoff
waitstatus
exitstatusr   r$  r%  r!  r"  spawnerrr  r   r#  listener_stategroupr5  rO   r   r-  r   r1  r2  rz   r4  r6  r7  r8  r9  r;  r=  rC  rD  rE  r   rG  r  rL  rM   rM   rM   rN   r  q  sZ    
r  c                   @   sT   e Zd Z														ddd	Zd
d Zdd ZdddZdd ZdS )DummyPConfigNr   Tr   r   Fr   c            !      C   s   || _ || _|| _|| _|| _|| _|	| _|
| _|| _|| _	|| _
|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|d u rMdd l} | j}|| _|| _|| _|| _|| _|| _|| _|| _d| _ || _!d S )Nr   F)"r   r   r@  rJ  	autostartautorestart	startsecsstartretriesr   stdout_logfilestdout_capture_maxbytesstdout_events_enabledstdout_logfile_backupsstdout_logfile_maxbytesstdout_syslogstderr_logfilestderr_capture_maxbytesstderr_events_enabledstderr_logfile_backupsstderr_logfile_maxbytesstderr_syslogredirect_stderrr4  SIGTERM
stopsignalstopwaitsecsstopasgroupkillasgroup	exitcodesr   r+   umaskautochildlogs_createdrE   )!rL   r   r   r@  r+   rq  rJ  rZ  r[  r\  r]  r   r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rl  rm  rn  ro  rp  r   rE   r4  rM   rM   rN   rO     sF   
zDummyPConfig.__init__c                 C   r   r   rM   rK   rM   rM   rN   r   -  r   zDummyPConfig.get_pathc                 C   r]   r^   )rr  rK   rM   rM   rN   create_autochildlogs0  r`   z!DummyPConfig.create_autochildlogsc                 C   s   t | }||_|S rP   )r  rW  )rL   rW  processrM   rM   rN   make_process3  s   zDummyPConfig.make_processc                 C   s~   | j  }| j|}|d |d |d }}}i }|d ur%tdd||< |d ur0tdd||< |d ur;tdd||< ||fS )Nr   r   r   T)readable)writable)rj  r   r   DummyDispatcher)rL   proc
use_stderrr   	stdout_fd	stderr_fdstdin_fdr%  rM   rM   rN   make_dispatchers8  s   
zDummyPConfig.make_dispatchers)NNr   TTr   r   NNr   Fr   r   FNr   Fr   r   FFNr   FFrY  NNrP   )r   r   r   rO   r   rs  ru  r~  rM   rM   rM   rN   rX    s(    
2
rX  c           
      C   s   dd l }dd l}dd l}|d u ri }t|  }|j| d }|j|d< | D ]}|	d|
  || }q)|j|dd}|j}	|| W d    n1 sRw   Y  ||	d |	S )Nr   r   PYTHONz<<%s>>F)r   deletei  )r|   systempfiler   readr   r?  
executablekeysreplaceupperNamedTemporaryFiler   r   chmod)
filesubstitutionsr|   r  r  r   lastkeyftmpnamrM   rM   rN   makeExecutableF  s    
r  Fc                 C   s<   dd l }|jt}| st|j|dS t|j|dS )Nr   zfixtures/spew.pyzfixtures/unkillable_spew.py)r|   r   dirname__file__r  r   )
unkillabler|   hererM   rM   rN   makeSpewZ  s
   r  c                   @   s   e Zd Zdd Zdd ZdS )DummyMedusaServerLoggerc                 C   s
   g | _ d S rP   )loggedrK   rM   rM   rN   rO   b  r`   z DummyMedusaServerLogger.__init__c                 C   s   | j ||f d S rP   )r  rc   )rL   categoryr   rM   rM   rN   r   d  s   zDummyMedusaServerLogger.logN)r   r   r   rO   r   rM   rM   rM   rN   r  a  s    r  c                   @      e Zd Zdd ZdS )DummyMedusaServerc                 C   s   t  | _d S rP   )r  r   rK   rM   rM   rN   rO   h  r   zDummyMedusaServer.__init__Nr   r   r   rO   rM   rM   rM   rN   r  g      r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
DummyMedusaChannelc                 C   s   t  | _d | _d S rP   )r  serverproducerrK   rM   rM   rN   rO   l  r   zDummyMedusaChannel.__init__c                 C   r   rP   )r  rL   r  rM   rM   rN   push_with_producerp  r`   z%DummyMedusaChannel.push_with_producerc                 C   rY   rP   rM   rK   rM   rM   rN   close_when_dones  r\   z"DummyMedusaChannel.close_when_donec                 C   rY   rP   rM   )rL   
terminatorrM   rM   rN   set_terminatorv  r\   z!DummyMedusaChannel.set_terminatorN)r   r   r   rO   r  r  r  rM   rM   rM   rN   r  k  s
    r  c                   @   s   e Zd ZdZdZdZdZd!ddZdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  ZdS )"DummyRequestGETNFz1.0c                 C   sJ   ||||f| _ g | _i | _g | _g | _t | _|d u r i | _d S || _d S rP   )rS   	producersheadersheaderoutgoingr  channelenv)rL   r   paramsqueryfragmentr  rM   rM   rN   rO   ~  s   

zDummyRequest.__init__c                 C   rk   rP   )rS   rK   rM   rM   rN   	split_uri  rm   zDummyRequest.split_uric                 C   r   rP   )_errorr   rM   rM   rN   r     r`   zDummyRequest.errorc                 C   r   rP   )r  rc   r  rM   rM   rN   push  r   zDummyRequest.pushc                 C   r   rP   r  )rL   r  valuerM   rM   rN   __setitem__  r   zDummyRequest.__setitem__c                 C   s
   | j | S rP   r  rL   r  rM   rM   rN   __getitem__  r`   zDummyRequest.__getitem__c                 C   s   | j |= d S rP   r  r  rM   rM   rN   __delitem__  r   zDummyRequest.__delitem__c                 C   
   || j v S rP   r  r  rM   rM   rN   has_key  r`   zDummyRequest.has_keyc                 C   r  rP   r  )rL   itemrM   rM   rN   __contains__  r`   zDummyRequest.__contains__c                 C   r]   r^   )_donerK   rM   rM   rN   done  r`   zDummyRequest.donec                 C   r  r   rM   rK   rM   rM   rN   build_reply_header  r\   zDummyRequest.build_reply_headerc                 O   rY   rP   rM   )rL   argrT   rM   rM   rN   r     r\   zDummyRequest.logc                 C   rk   rP   )r  rK   rM   rM   rN   cgi_environment  rm   zDummyRequest.cgi_environmentc                 C   r  )Nzhttp://example.comrM   rK   rM   rM   rN   get_server_url  r\   zDummyRequest.get_server_urlrP   )r   r   r   r@  r  r  versionrO   r  r   r  r  r  r  r  r  r  r  r   r  r  rM   rM   rM   rN   r  y  s&    
r  c                   @   r  )DummyRPCInterfaceFactoryc                 K   rU   rP   )rg   r  )rL   rg   r  rM   rM   rN   rO     rX   z!DummyRPCInterfaceFactory.__init__Nr  rM   rM   rM   rN   r    r  r  c                   @   r  )DummyRPCServerc                 C   s   t  | _t | _d S rP   )DummySupervisorRPCNamespacer   DummySystemRPCNamespacesystemrK   rM   rM   rN   rO     s   zDummyRPCServer.__init__Nr  rM   rM   rM   rN   r    r  r  c                   @   s   e Zd ZdS )r  N)r   r   r   rM   rM   rM   rN   r    s    r  c                   @   sz  e Zd ZdZdZdZdZddlmZ dddej	de
d dd	e
d
d
dddejde
d e
d de
dd
dddejde
d e
d d	e
dd
gZdd ZeZdd Zdd Zdd ZeZd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"e"Z#e"Z$e"Z%d>d? Z&d@dA Z'dBdC Z(dDdE Z)dFdG Z*dHdI Z+dJdK Z,dLdM Z-dNS )Or  TFr   r  foo   r   d   r   zfoo description)
r   rW  rx   r   	statenamestartr1  rU  nowdescriptionbar   r<  2   screwedzbar descriptionbaz_01baz   r/     zbaz descriptionc                 C   r  )Nz3.0rM   rK   rM   rM   rN   getAPIVersion  r\   z)DummySupervisorRPCNamespace.getAPIVersionc                 C   r  )N*   rM   rK   rM   rM   rN   getPID  r\   z"DummySupervisorRPCNamespace.getPIDc                 C   sf   ddl m} |dkrt|jjd|dkrt|jjd|dkr't|jjd|d d }||d  S )Nr   xmlrpcBAD_NAMEFAILEDNO_FILEz line
r   )r   r  r   Faultsr  r  r  )rL   r  r   offsetlengthr  arM   rM   rN   	_read_log  s   z%DummySupervisorRPCNamespace._read_logc                 C      |  d|||S )Nr   r  rL   r   r  r  rM   rM   rN   readProcessStdoutLog  r   z0DummySupervisorRPCNamespace.readProcessStdoutLogc                 C   r  )Nr   r  r  rM   rM   rN   readProcessStderrLog  r   z0DummySupervisorRPCNamespace.readProcessStderrLogc                 C   rk   rP   )all_process_inforK   rM   rM   rN   getAllProcessInfo  rm   z-DummySupervisorRPCNamespace.getAllProcessInfoc                 C   sv   ddl m} | jD ]}|d |kr|}|  S q	|dkr#t|jjd|dkr.t|jjd|dkr9t|jjdd S )Nr   r  r   r  r  r  )r   r  r  r   r  r  r  r  )rL   r   r  ir   rM   rM   rN   getProcessInfo  s   
z*DummySupervisorRPCNamespace.getProcessInfoc                 C   s   ddl m} |dkrt|jjd|dkrt|jjd|dkr't|jjd|dkr2t|jjd|dkr=t|jjd|dkrHt|jjd|d	krSt|jj	d	d
S )Nr   r  BAD_NAME:BAD_NAMEr  r  NOT_EXECUTABLEALREADY_STARTEDSPAWN_ERRORABNORMAL_TERMINATIONT)
r   r  r   r  r  r  r  r  r  r  rL   r   r  rM   rM   rN   startProcess  s$   z(DummySupervisorRPCNamespace.startProcessc                 C   R   ddl m} ddlm} |dkr||jjddd|jjddd	d|jjddgS 
Nr   r  r   r  foo_00r  OKr   rW  statusr  foo_01r   r  supervisor.compatr   r  r  SUCCESSrL   r   r  r   rM   rM   rN   startProcessGroup+     z-DummySupervisorRPCNamespace.startProcessGroupc                 C   @   ddl m} dd|jjdddd|jjdddd|jjd	dgS )
Nr   r  r  r  r  foo2failedfailed_groupr  )r   r  r  r  r  rL   r  rM   rM   rN   startAllProcesses9  s   z-DummySupervisorRPCNamespace.startAllProcessesc                 C   r  r  r  r  rM   rM   rN   stopProcessGroupG  r  z,DummySupervisorRPCNamespace.stopProcessGroupc                 C   sh   ddl m} |dkrt|jjd|dkrt|jjd|dkr't|jjd|dkr2t|jjddS )Nr   r  r  r  NOT_RUNNINGr  T)r   r  r   r  r  r	  r  r  rM   rM   rN   stopProcessU  s   z'DummySupervisorRPCNamespace.stopProcessc                 C   r  
Nr   r  r  r  r  r  r  r  r  r   r  r  r  r  r  rM   rM   rN   stopAllProcessesb  s   z,DummySupervisorRPCNamespace.stopAllProcessesc                 C   *   | j rd| _d S ddlm} t|jjdNTr   r  r   )_restartable
_restartedr   r  r   r  SHUTDOWN_STATEr  rM   rM   rN   restarto  
   z#DummySupervisorRPCNamespace.restartc                 C   r  r  )r  	_shutdownr   r  r   r  r  r  rM   rM   rN   shutdownv  r  z$DummySupervisorRPCNamespace.shutdownc                 C   s   dgdgdgggS )Naddedchangedr>   rM   rK   rM   rM   rN   reloadConfig}  s   z(DummySupervisorRPCNamespace.reloadConfigc                 C   s   ddl m} |dkrt|jjd|dkrt|jjd|dkr't|jjd|dkr2t|jjdt| dr?| j	
| d S |g| _	d S )	Nr   r  ALREADY_ADDEDr   r  r  r  	processes)r   r  r   r  r  r  r  r  hasattrr  rc   r  rM   rM   rN   addProcessGroup  s   
z+DummySupervisorRPCNamespace.addProcessGroupc                 C   s^   ddl m} |dkrt|jjd|dkrt|jjd|dkr't|jjd| j| d S )Nr   r  STILL_RUNNINGr   r  r  )	r   r  r   r  r  r  r  r  r   r  rM   rM   rN   removeProcessGroup  s   z.DummySupervisorRPCNamespace.removeProcessGroupc                 C   s&   ddl m} |dkrt|jjddS )Nr   r  r  T)r   r  r   r  r  r  rM   rM   rN   clearProcessStdoutLog  s   z1DummySupervisorRPCNamespace.clearProcessStdoutLogc                 C   r  r  )r   r  r  r  r  r  rM   rM   rN   clearAllProcessLogs  "   z/DummySupervisorRPCNamespace.clearAllProcessLogsc                 C   s   t d)Nr   
ValueErrorrK   rM   rM   rN   
raiseError  r   z&DummySupervisorRPCNamespace.raiseErrorc                 C   s   dd iS )Nr^  rM   rK   rM   rM   rN   getXmlRpcUnmarshallable  r   z3DummySupervisorRPCNamespace.getXmlRpcUnmarshallablec                 C   r  )N3000rM   rK   rM   rM   rN   getSupervisorVersion  r\   z0DummySupervisorRPCNamespace.getSupervisorVersionc                 C   s   | j r	t| j ddS )Nr   mainlogdata)_readlog_errorr   )rL   whencer  rM   rM   rN   readLog  s   z#DummySupervisorRPCNamespace.readLogc                 C   sF   ddl m} |dkrt|jjddd|jjdddd|jjddgS )	Nr   r  r  r  r  r  r  r  )r   r  r   r  r  r  rL   r   r4  r  rM   rM   rN   signalProcessGroup  s   z.DummySupervisorRPCNamespace.signalProcessGroupc                 C   s~   ddl m} |dkrt|jjd|dkrt|jjd|dkr't|jjd|dkr2t|jjd|dkr=t|jjddS )	Nr   r  
BAD_SIGNALr  r  r	  r  T)r   r  r   r  r/  r  r	  r  r-  rM   rM   rN   signalProcess  s   z)DummySupervisorRPCNamespace.signalProcessc                 C   s@   ddl m} dd|jjdddd|jjdddd|jjd	dgS r  r  )rL   r4  r  rM   rM   rN   signalAllProcesses  r"  z.DummySupervisorRPCNamespace.signalAllProcessesN).r   r   r   r  r  r  r*  r  r  r   _NOWr<  r/  r  r  
getVersionr  r  r  readProcessLogr  r  r  r  r   r  r  r
  r  r  r  r  r  r  r   clearProcessLogclearProcessStderrLogclearProcessLogsr!  r%  r&  r(  r,  r.  r0  r1  rM   rM   rM   rN   r    s    '
r  c                   @   s.   e Zd ZdddZdd Zdd	 Zd
d ZdS )DummyPGroupConfigr+  r   Nc                 C   s:   || _ || _|| _|d u rg }|| _d| _g | _d| _d S )NFr   )r   r   rJ  process_configsafter_setuid_calledpool_eventsbuffer_size)rL   r   r   rJ  pconfigsrM   rM   rN   rO     s   
zDummyPGroupConfig.__init__c                 C   r]   r^   )r:  rK   rM   rM   rN   after_setuid  r`   zDummyPGroupConfig.after_setuidc                 C   s   t | S rP   )DummyProcessGrouprK   rM   rM   rN   
make_group   r   zDummyPGroupConfig.make_groupc                 C   s   d| j t| | jf S )Nz<%s instance at %s named %s>)	__class__idr   rK   rM   rM   rN   __repr__  s   zDummyPGroupConfig.__repr__)r+  r   N)r   r   r   rO   r>  r@  rC  rM   rM   rM   rN   r8    s
    
r8  c                   @   s"   e Zd ZdddedfddZdS )DummyFCGIGroupConfigr+  r   Nr   c                 C   s   t | |||| || _d S rP   )r8  rO   socket_config)rL   r   r   rJ  r=  rE  rM   rM   rN   rO     s   
zDummyFCGIGroupConfig.__init__)r   r   r   r  rO   rM   rM   rM   rN   rD    s    rD  c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )r?  c                 C   s(   || _ d| _d| _i | _g | _d| _d S r   )r  r*  all_stoppedr%  unstopped_processesbefore_remove_calledrL   r  rM   rM   rN   rO     s   
zDummyProcessGroup.__init__c                 C   r]   r^   rF  rK   rM   rM   rN   rG    r`   zDummyProcessGroup.transitionc                 C   r]   r^   )rH  rK   rM   rM   rN   before_remove  r`   zDummyProcessGroup.before_removec                 C   r]   r^   )rF  rK   rM   rM   rN   stop_all  r`   zDummyProcessGroup.stop_allc                 C   rk   rP   )rG  rK   rM   rM   rN   get_unstopped_processes  rm   z)DummyProcessGroup.get_unstopped_processesc                 C   rk   rP   )r%  rK   rM   rM   rN   get_dispatchers"  rm   z!DummyProcessGroup.get_dispatchersc                 C   rK  rP   rI  r  rM   rM   rN   rL  %  r   zDummyProcessGroup.__lt__c                 C   rH  rP   rI  r  rM   rM   rN   r  (  r   zDummyProcessGroup.__eq__c                 C   r]   r^   r   rK   rM   rM   rN   r   +  r`   zDummyProcessGroup.reopenlogsN)r   r   r   rO   rG  rJ  rK  rL  rM  rL  r  r   rM   rM   rM   rN   r?    s    r?  c                   @   r  )DummyFCGIProcessGroupc                 C   s   t | | t|j| _d S rP   )r?  rO   r  rE  socket_managerrI  rM   rM   rN   rO   0  s   zDummyFCGIProcessGroup.__init__Nr  rM   rM   rM   rN   rN  .  s    rN  c                   @   s&   e Zd Zdd ZdddZdd ZdS )	PopulatedDummySupervisorc           	      G   sb   t | | i | _i }|| _t|||d}t|}|| j|< |D ]}t|}|||j< q ||_d S )N)r=  )	r   rO   r   
group_namer8  r?  r  r   r  )	rL   r   rQ  r=  r  gconfigpgrouppconfigrt  rM   rM   rN   rO   5  s   

z!PopulatedDummySupervisor.__init__Nc                 C   s.   |d u r| j }| j| j| }t||| d S rP   )rQ  r   r  setattr)rL   process_name	attr_namevalrQ  rt  rM   rM   rN   set_procattrB  s   z%PopulatedDummySupervisor.set_procattrc                 C   r]   r^   )reapedrK   rM   rM   rN   reapH  r`   zPopulatedDummySupervisor.reaprP   )r   r   r   rO   rY  r[  rM   rM   rM   rN   rP  4  s    
rP  c                   @   sn   e Zd ZdZdZdZdZdZdZdZ	dZ
dddZdd Zdd Zd	d
 Zdd Zdd Zdd Zdd ZdS )rx  NFc                    sH   | _ | _| _d _|r" fdd}| _ fdd}| _d S d S )Nr   c                      
   d _ d S r^   r   rM   rK   rM   rN   r   ]  r`   z,DummyDispatcher.__init__.<locals>.reopenlogsc                      r\  r^   )logs_removedrM   rK   rM   rN   r-  `  r`   z,DummyDispatcher.__init__.<locals>.removelogs)	_readable	_writabler  input_bufferr   r-  )rL   rv  rw  r   r   r-  rM   rK   rN   rO   V  s   
zDummyDispatcher.__init__c                 C   rk   rP   )r^  rK   rM   rM   rN   rv  d  rm   zDummyDispatcher.readablec                 C   rk   rP   )r_  rK   rM   rM   rN   rw  f  rm   zDummyDispatcher.writablec                 C      | j r| j d| _d S r^   )r  write_event_handledrK   rM   rM   rN   handle_write_eventh  r   z"DummyDispatcher.handle_write_eventc                 C   ra  r^   )r  read_event_handledrK   rM   rM   rN   handle_read_eventl  r   z!DummyDispatcher.handle_read_eventc                 C   r]   r^   )error_handledrK   rM   rM   rN   handle_errorp  r`   zDummyDispatcher.handle_errorc                 C   r]   r^   r   rK   rM   rM   rN   r   r  r`   zDummyDispatcher.closec                 C   ra  r^   )flush_exceptionr   rK   rM   rM   rN   r   t  r   zDummyDispatcher.flush)FFF)r   r   r   rh  rb  rd  rf  r;   r]  r   r   rO   rv  rw  rc  re  rg  r   r   rM   rM   rM   rN   rx  K  s"    
rx  c                   @   sH   e Zd ZdddZdd Zdd Zd	d
 ZdddZdd Zdd Z	dS )DummyStreamNr	   c                 C   s"   || _ d| _d| _d| _|| _d S )NF    )r   r   r   r4   _fileno)rL   r   r   rM   rM   rN   rO   z  s
   
zDummyStream.__init__c                 C   ra  r^   )r   r   rK   rM   rM   rN   r     r   zDummyStream.closec                 C   ra  r^   )r   r   rK   rM   rM   rN   r     r   zDummyStream.flushc                 C   s,   | j r| j }d | _ ||  jt|7  _d S rP   )r   r4   r   )rL   r   r   rM   rM   rN   r     s
   zDummyStream.writer   c                 C   rY   rP   rM   )rL   numr+  rM   rM   rN   seek  r\   zDummyStream.seekc                 C   r  rP   )r   r4   rK   rM   rM   rN   tell  r`   zDummyStream.tellc                 C   rk   rP   )rk  rK   rM   rM   rN   r     rm   zDummyStream.fileno)Nr	   rY  )
r   r   r   rO   r   r   r   rm  rn  r   rM   rM   rM   rN   ri  y  s    

ri  c                   @   s   e Zd ZdddZdd ZdS )
DummyEventabcc                 C   s   |d ur	|| _ d S d S rP   )serial)rL   rq  rM   rM   rN   rO     s   
zDummyEvent.__init__c                 C   r  )Nzdummy eventrM   rK   rM   rM   rN   payload  r\   zDummyEvent.payloadN)rp  )r   r   r   rO   rr  rM   rM   rM   rN   ro    s    
ro  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )rH   c                 C   s   g g f| _ d| _d S r   )resultr   )rL   r   rM   rM   rN   rO     s   

zDummyPoller.__init__c                 C   rY   rP   rM   r   rM   rM   rN   register_readable  r\   zDummyPoller.register_readablec                 C   rY   rP   rM   r   rM   rM   rN   register_writable  r\   zDummyPoller.register_writablec                 C   rk   rP   )rs  )rL   timeoutrM   rM   rN   poll  rm   zDummyPoller.pollc                 C   r]   r^   r   rK   rM   rM   rN   r     r`   zDummyPoller.closeN)r   r   r   rO   rt  ru  rw  r   rM   rM   rM   rN   rH     s    rH   c                 C   rY   rP   rM   eventrs  rM   rM   rN   dummy_handler  r\   rz  c                 C   s   ddl m} ||)Nr   )RejectEvent)supervisor.dispatchersr{  )ry  rs  r{  rM   rM   rN   rejecting_handler  s   r}  c                 C   s   t |rP   r#  rx  rM   rM   rN   exception_handler  r   r~  c                 C   s   dd |  dD }d|S )Nc                 S   s   g | ]}|  qS rM   )strip).0xrM   rM   rN   
<listcomp>  s    zlstrip.<locals>.<listcomp>
)r?  r   )sstringsrM   rM   rN   lstrip  s   
r  rP   )F)-r2  _TIMEFORMAT	functoolsr  r   r   unittest.mockr   r   r   ImportErrormockr   rQ   r   r   r  r  total_orderingobjectr  rX  r  r  r  r  r  r  r  r  r  r  r8  rD  r?  rN  rP  rx  ri  ro  rH   rz  r}  r~  r  rM   rM   rM   rN   <module>   sh     l"
 	
L
9  4!.