
    Vh                        d Z ddlZddlmZmZ ddlmZ ddlmZmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ ddlmZmZmZmZ dd	lmZ dd
lmZmZ ddlmZmZmZ ddl m!Z!m"Z" ddl#m$Z$ e%Z&dede'gdf   de'ddfdZ( G d de      Z)y)z$
Command line options for C{twist}.
    N)stderrstdout)dedent)CallableIterableMappingOptionalSequenceTuplecast)version)IReactorCore)InvalidLogLevelErrorLogLeveljsonFileLogObservertextFileLogObserver)
getPlugins)Options
UsageError   )NoSuchReactorgetReactorTypesinstallReactor)
ExitStatusexit)IServiceMakeroptTwistOptionskwargsreturnc                 `     t        | j                  xs d      j                  di || _        y)z
    Update the docstring of a method that implements an option.
    The string is dedented and the given keyword arguments are substituted.
     N )r   __doc__format)r   r   s     R/home/dcms/DCMS/lib/python3.12/site-packages/twisted/application/twist/_options.py_update_docr'      s)    
 3&*+22<V<CK    c            	          e Zd ZdZdZej                  ZddZde	fdZ
ddZde	ddfd	Z eed
j                  d  e       D                     de	defdZde	ddfdZ eed
j                  d  ej&                         D              ej(                         de	ddfdZde	ddfdZ ee       ddZddeee	      ddfdZedee	ef   fd       Zedee e	de!ege"f   e	f      fd       Z#ddZ$y)r   z,
    Command line options for C{twist}.
    defaultr    Nc                     t        j                  |        | j                  | d<   | j                  | d<   t        | d<   d| _        y )NreactorNamelogLevellogFiler"   )r   __init__defaultReactorNamedefaultLogLevelr   longdescselfs    r&   r/   zTwistOptions.__init__/   sB    "55]//Z Y r(   c                 2    t        j                  |        dS )Nz plugin [plugin_options])r   getSynopsisr3   s    r&   r6   zTwistOptions.getSynopsis:   s    %%d+,,DEEr(   c                 B    t        t        j                  t                y)z)
        Print version and exit.
        N)r   r   EX_OKr   r3   s    r&   opt_versionzTwistOptions.opt_version=   s     	Z',r(   namec                 n    	 | j                  |      | d<   || d<   y# t        $ r t        d|       w xY w)zN
        The name of the reactor to use.
        (options: {options})
        reactorr,   zUnknown reactor: N)r   r   r   )r4   r:   s     r&   opt_reactorzTwistOptions.opt_reactorC   sK    	'"11$7DO #'D  	90788	9s    4z, c              #   <   K   | ]  }d |j                    d   yw"N)	shortName).0rts     r&   	<genexpr>zTwistOptions.<genexpr>T   s     J"Abll^1-J   optionsc                 b    || j                   k(  rddlm} t        t        |      S t        |      S )z&
        Install the reactor.
        r   )r<   )r0   twisted.internetr<   r   r   r   )r4   r:   r<   s      r&   r   zTwistOptions.installReactorW   s-     4***0g..!$''r(   	levelNamec                 l    	 t        j                  |      | d<   y# t        $ r t        d|       w xY w)z[
        Set default log level.
        (options: {options}; default: "{default}")
        r-   zInvalid log level: N)r   levelWithNamer   r   )r4   rJ   s     r&   opt_log_levelzTwistOptions.opt_log_levelb   sA    
	@'55i@D# 	@29+>??	@s    3c              #   <   K   | ]  }d |j                    d   ywr?   )r:   )rB   constants     r&   rD   zTwistOptions.<genexpr>n   s"      
%-aa 
rE   )rG   r*   fileNamec                     |dk(  r
t         | d<   y|dk(  r
t        | d<   y	 t        |d      | d<   y# t        $ r*}t	        t
        j                  d|d|        Y d}~yd}~ww xY w)zM
        Log to file. ("-" for stdout, "+" for stderr; default: "-")
        -r.   N+azUnable to open log file z: )r   r   openFileOSErrorr   r   EX_IOERR)r4   rP   es      r&   opt_log_filezTwistOptions.opt_log_filet   su     s?$DOs?$DO	&x5DO 	##*8,b< 	s   0 	A# AA#r%   c                     |j                         }|dk(  r
t        | d<   n|dk(  r
t        | d<   nt        d|       || d<   y)z
        Log file format.
        (options: "text", "json"; default: "text" if the log file is a tty,
        otherwise "json")
        textfileLogObserverFactoryjsonzInvalid log format: 	logFormatN)lowerr   r   r   )r4   r%   s     r&   opt_log_formatzTwistOptions.opt_log_format   sR     V-@D)*v-@D)*3F8<=="[r(   c                     d| vr?| d   }t        |d      r|j                         rt        | d<   d| d<   yt        | d<   d| d<   yy)zm
        Set C{fileLogObserverFactory} to the default appropriate for the
        chosen C{logFile}.
        r\   r.   isattyr[   r^   r]   N)hasattrrb   r   r   )r4   r.   s     r&   selectDefaultLogObserverz%TwistOptions.selectDefaultLogObserver   sW    
 $4/9oGw)gnn.>1D-.$*[!1D-.$*[! 0r(   rG   c                     | j                          t        j                  | |       d| vr| j                  | d         | d<   y y )NrF   r<   r,   )rd   r   parseOptionsr   )r4   rG   s     r&   rf   zTwistOptions.parseOptions   sD    %%'T73D "11$}2EFDO !r(   c                     d| vr*i }t        t              D ]  }|||j                  <    || d<   t        t        t
        t        f   | d         S )Nplugins)r   r   tapnamer   r   str)r4   rh   plugins      r&   rh   zTwistOptions.plugins   sU    D G$]3 1*0'1%DOGC./iAAr(   c              #      K   | j                   }t        |      D ]5  }||   }|fdt        dt        fd}|j                  d ||j
                  f 7 y w)Nrk   r    c                 >    t        t        | j                               S N)r   r   rG   )rk   s    r&   rG   z)TwistOptions.subCommands.<locals>.options   s    GV^^%566r(   )rh   sortedr   r   ri   description)r4   rh   r:   rk   rG   s        r&   subCommandszTwistOptions.subCommands   sb      ,,7O 		FDT]F
 17 7 77 7 >>4&2D2DEE		Fs   AAc                 \    t        j                  |        | j                  t        d      y )NzNo plugin specified.)r   postOptions
subCommandr   r3   s    r&   rs   zTwistOptions.postOptions   s+    D!??"344 #r(   )r    N)r    ztyping.NoReturnrn   )%__name__
__module____qualname__r$   r0   r   infor1   r/   rj   r6   r9   r=   r'   joinr   r   r   rM   iterconstantsr:   rY   r`   rd   r	   r
   rf   propertyr   r   rh   r   r   r   r   rq   rs   r#   r(   r&   r   r   '   s    #mmO	FS F-' ' ' 		J8IJJ
	(3 	(< 	(@s @t @ 		 
1G1G1G1I
 
  $$S T (#S #T #  +GHXc]$; Gt G Bm!34 B B F	%T8]OW,D#EsJK	LF F5r(   )*r$   typingsysr   r   textwrapr   r   r   r   r	   r
   r   r   twisted.copyrightr   twisted.internet.interfacesr   twisted.loggerr   r   r   r   twisted.pluginr   twisted.python.usager   r   reactorsr   r   r   runner._exitr   r   servicer   openrU   rj   r'   r   r#   r(   r&   <module>r      s~   
    O O O % 4  & 4 E E + #=X~s3T9: =c =d =h57 h5r(   