o
    r¨ÊhŒ  ã                   @   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 )Hiêp Dz%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   úG/var/www/html/env/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!.