a
    )(b                     @   s   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&ede'gdf e'ddddZ(G dd deZ)dS )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TwistOptions)optkwargsreturnc                 K   s    t | jp
djf i || _dS )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    r#   Alib/python3.9/site-packages/twisted/application/twist/_options.py_update_doc   s    r%   c                   @   sZ  e Zd ZdZdZejZddddZe	dddZ
d	dd
dZe	ddddZeeddd e D d e	edddZe	ddddZeeddd e D ejd e	ddddZe	ddddZee ddd d!Zd+eee	  dd"d#d$Zeee	ef dd%d&Zeee e	de!ege"f e	f  dd'd(Z#ddd)d*Z$dS ),r   z,
    Command line options for C{twist}.
    defaultN)r   c                 C   s0   t |  | j| d< | j| d< t| d< d| _d S )NreactorNamelogLevellogFiler    )r   __init__defaultReactorNamedefaultLogLevelr   Zlongdescselfr#   r#   r$   r*   /   s
    


zTwistOptions.__init__c                 C   s   t |  dS )Nz plugin [plugin_options])r   getSynopsisr-   r#   r#   r$   r/   :   s    zTwistOptions.getSynopsisztyping.NoReturnc                 C   s   t tjt  dS )z)
        Print version and exit.
        N)r   r   EX_OKr   r-   r#   r#   r$   opt_version=   s    zTwistOptions.opt_version)namer   c                 C   s@   z|  || d< W n  ty2   td| Y n
0 || d< dS )zN
        The name of the reactor to use.
        (options: {options})
        reactorzUnknown reactor: r'   N)r   r   r   )r.   r2   r#   r#   r$   opt_reactorC   s
    zTwistOptions.opt_reactorz, c                 c   s   | ]}d |j  d V  qdS "N)Z	shortName).0Zrtr#   r#   r$   	<genexpr>T       zTwistOptions.<genexpr>optionsc                 C   s,   || j kr ddlm} tt|S t|S dS )z&
        Install the reactor.
        r   )r3   N)r+   Ztwisted.internetr3   r   r   r   )r.   r2   r3   r#   r#   r$   r   W   s    

zTwistOptions.installReactor)	levelNamer   c                 C   s8   zt || d< W n  ty2   td| Y n0 dS )z[
        Set default log level.
        (options: {options}; default: "{default}")
        r(   zInvalid log level: N)r   ZlevelWithNamer   r   )r.   r<   r#   r#   r$   opt_log_levelb   s    zTwistOptions.opt_log_levelc                 c   s   | ]}d |j  d V  qdS r5   )r2   )r7   Zconstantr#   r#   r$   r8   n   s   )r;   r&   )fileNamer   c              
   C   s|   |dkrt | d< dS |dkr(t| d< dS zt|d| d< W n< tyv } z$ttjd|d|  W Y d}~n
d}~0 0 dS )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)r.   r>   er#   r#   r$   opt_log_filet   s    zTwistOptions.opt_log_file)r"   r   c                 C   sF   |  }|dkrt| d< n |dkr,t| d< ntd| || d< dS )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   )r.   r"   r#   r#   r$   opt_log_format   s    

zTwistOptions.opt_log_formatc                 C   sH   d| vrD| d }t |dr4| r4t| d< d| d< nt| d< d| d< dS )zm
        Set C{fileLogObserverFactory} to the default appropriate for the
        chosen C{logFile}.
        rH   r)   isattyrG   rJ   rI   N)hasattrrM   r   r   )r.   r)   r#   r#   r$   selectDefaultLogObserver   s    
z%TwistOptions.selectDefaultLogObserver)r;   r   c                 C   s4   |    tj| |d d| vr0| | d | d< d S )Nr:   r3   r'   )rO   r   parseOptionsr   )r.   r;   r#   r#   r$   rP      s    zTwistOptions.parseOptionsc                 C   sB   d| vr,i }t tD ]}|||j< q|| d< ttttf | d S )Nplugins)r   r   tapnamer   r   str)r.   rQ   pluginr#   r#   r$   rQ      s    zTwistOptions.pluginsc                 c   sF   | j }t|D ]2}|| }|fttddd}|jd ||jfV  qd S )N)rT   r   c                 S   s   t t|  S )N)r   r   r;   )rT   r#   r#   r$   r;      s    z)TwistOptions.subCommands.<locals>.options)rQ   sortedr   r   rR   Zdescription)r.   rQ   r2   rT   r;   r#   r#   r$   subCommands   s
    zTwistOptions.subCommandsc                 C   s    t |  | jd u rtdd S )NzNo plugin specified.)r   postOptionsZ
subCommandr   r-   r#   r#   r$   rW      s    

zTwistOptions.postOptions)N)%__name__
__module____qualname__r!   r+   r   infor,   r*   rS   r/   r1   r4   r%   joinr   r   r   r=   Ziterconstantsr2   rF   rL   rO   r   r	   rP   propertyr   r   rQ   r   r
   r   r   rV   rW   r#   r#   r#   r$   r   '   s>   

	)*r!   typingsysr   r   textwrapr   r   r   r   r   r	   r
   r   Ztwisted.copyrightr   Ztwisted.internet.interfacesr   Ztwisted.loggerr   r   r   r   Ztwisted.pluginr   Ztwisted.python.usager   r   Zreactorsr   r   r   Zrunner._exitr   r   Zservicer   openrB   rS   r%   r   r#   r#   r#   r$   <module>   s   $