o
    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&dede'gdf de'ddf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optTwistOptionskwargsreturnc                 K   s    t | jpdjd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!   r!   D/usr/lib/python3/dist-packages/twisted/application/twist/_options.py_update_doc   s    r%   c                	   @   sV  e Zd ZdZdZejZd+ddZde	fddZ
d,d
dZde	ddfddZeeddd e D d de	defddZde	ddfddZeeddd e D ejd de	ddfddZde	ddfddZee d+d d!Zd-d"eee	  ddfd#d$Zedee	ef fd%d&Zedee e	de!ege"f e	f  fd'd(Z#d+d)d*Z$dS ).r   z,
    Command line options for C{twist}.
    defaultr   Nc                 C   s0   t |  | j| d< | j| d< t| d< d| _d S )NreactorNamelogLevellogFiler    )r   __init__defaultReactorNamedefaultLogLevelr   longdescselfr!   r!   r$   r*   /   s
   



zTwistOptions.__init__c                 C   s   t |  dS )Nz plugin [plugin_options])r   getSynopsisr.   r!   r!   r$   r0   :   s   zTwistOptions.getSynopsis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namec                 C   s<   z	|  || d< W n ty   td| w || d< dS )zN
        The name of the reactor to use.
        (options: {options})
        reactorzUnknown reactor: r'   N)r   r   r   )r/   r4   r!   r!   r$   opt_reactorC   s   zTwistOptions.opt_reactorz, c                 c       | ]
}d |j  d V  qdS "N)	shortName).0rtr!   r!   r$   	<genexpr>T   s    zTwistOptions.<genexpr>optionsc                 C   s(   || j krddlm} tt|S t|S )z&
        Install the reactor.
        r   )r5   )r+   twisted.internetr5   r   r   r   )r/   r4   r5   r!   r!   r$   r   W   s   

zTwistOptions.installReactor	levelNamec                 C   s2   z
t || d< W dS  ty   td| w )z[
        Set default log level.
        (options: {options}; default: "{default}")
        r(   zInvalid log level: N)r   levelWithNamer   r   )r/   rA   r!   r!   r$   opt_log_levelb   s
   zTwistOptions.opt_log_levelc                 c   r7   r8   )r4   )r;   constantr!   r!   r$   r=   n   s    
)r?   r&   fileNamec              
   C   s|   |dkr
t | d< dS |dkrt| d< dS z
t|d| d< W dS  ty= } zttjd|d|  W Y d}~dS d}~w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)r/   rE   er!   r!   r$   opt_log_filet   s   zTwistOptions.opt_log_filer#   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   sN   d| vr%| d }t |dr| rt| d< d| d< dS t| d< d| d< dS dS )zm
        Set C{fileLogObserverFactory} to the default appropriate for the
        chosen C{logFile}.
        rO   r)   isattyrN   rQ   rP   N)hasattrrT   r   r   )r/   r)   r!   r!   r$   selectDefaultLogObserver   s   z%TwistOptions.selectDefaultLogObserverr?   c                 C   s8   |    tj| |d d| vr| | d | d< d S d S )Nr>   r5   r'   )rV   r   parseOptionsr   )r/   r?   r!   r!   r$   rW      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/   rX   pluginr!   r!   r$   rX      s   zTwistOptions.pluginsc                 c   sJ    | j }t|D ]}|| }|fdtdtfdd}|jd ||jfV  qd S )Nr[   r   c                 S   s   t t|  S N)r   r   r?   )r[   r!   r!   r$   r?      s   z)TwistOptions.subCommands.<locals>.options)rX   sortedr   r   rY   description)r/   rX   r4   r[   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   postOptions
subCommandr   r.   r!   r!   r$   r`      s   

zTwistOptions.postOptions)r   N)r   r1   r\   )%__name__
__module____qualname__r"   r+   r   infor,   r*   rZ   r0   r3   r6   r%   joinr   r   r   rC   iterconstantsr4   rM   rS   rV   r   r	   rW   propertyr   r   rX   r   r
   r   r   r_   r`   r!   r!   r!   r$   r   '   sB    




	)*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   openrI   rZ   r%   r   r!   r!   r!   r$   <module>   s    $"