U
    
W[W                     @   s   d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	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mZ dd
lmZmZ ddlmZ eZG dd de	ZdS )z$
Command line options for C{twist}.
    )stdoutstderr)dedent)version)Options
UsageError)LogLevelInvalidLogLevelErrortextFileLogObserverjsonFileLogObserver)
getPlugins   )installReactorNoSuchReactorgetReactorTypes)exit
ExitStatus)IServiceMakerc                   @   s   e Zd ZdZdZejZdd Zdd Z	dd Z
d	d
 Zeejjddd e D de_dd Zdd Zeejjddd e D ejde_dd Zdd Zeeje_dd Zd$ddZedd Zed d! Zd"d# ZdS )%TwistOptionsz,
    Command line options for C{twist}.
    defaultc                 C   s*   t |  | j| d< | j| d< t| d< d S )NreactorNamelogLevellogFile)r   __init__defaultReactorNamedefaultLogLevelr   self r   D/usr/lib/python3/dist-packages/twisted/application/twist/_options.pyr   %   s    


zTwistOptions.__init__c                 C   s   d t| S )Nz{} plugin [plugin_options])formatr   getSynopsisr   r   r   r   r!   -   s    zTwistOptions.getSynopsisc                 C   s   t tjdt dS )z)
        Print version and exit.
        z{}N)r   r   EX_OKr    r   r   r   r   r   opt_version3   s    zTwistOptions.opt_versionc                 C   sB   z|  || d< W n" tk
r4   td|Y n
X || d< dS )zN
        The name of the reactor to use.
        (options: {options})
        reactorzUnknown reactor: {}r   N)r   r   r   r    )r   namer   r   r   opt_reactor:   s
    zTwistOptions.opt_reactorz, c                 c   s   | ]}d  |jV  qdS z"{}"N)r    Z	shortName).0Zrtr   r   r   	<genexpr>J   s    zTwistOptions.<genexpr>optionsc                 C   s&   || j krddlm} |S t|S dS )z&
        Install the reactor.
        r   )r$   N)r   Ztwisted.internetr$   r   )r   r%   r$   r   r   r   r   P   s    
zTwistOptions.installReactorc                 C   s:   zt || d< W n" tk
r4   td|Y nX dS )z[
        Set default log level.
        (options: {options}; default: "{default}")
        r   zInvalid log level: {}N)r   ZlevelWithNamer	   r   r    )r   Z	levelNamer   r   r   opt_log_level[   s    zTwistOptions.opt_log_levelc                 c   s   | ]}d  |jV  qdS r'   )r    r%   )r(   lr   r   r   r)   f   s    )r+   r   c              
   C   sv   |dkrt | d< dS |dkr(t| d< dS zt|d| d< W n6 tk
rp } zttjd|| W 5 d}~X Y nX dS )zM
        Log to file. ("-" for stdout, "+" for stderr; default: "-")
        -r   N+az Unable to open log file {!r}: {})r   r   openFileEnvironmentErrorr   r   EX_IOERRr    )r   ZfileNameer   r   r   opt_log_filem   s    
zTwistOptions.opt_log_filec                 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   r   opt_log_format   s    

zTwistOptions.opt_log_formatc                 C   sH   d| k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}.
        r7   r   isattyr6   r9   r8   N)hasattrr<   r
   r   )r   r   r   r   r   selectDefaultLogObserver   s    
z%TwistOptions.selectDefaultLogObserverNc                 C   s4   |    tj| |d d| kr0| | d | d< d S )Nr*   r$   r   )r>   r   parseOptionsr   )r   r+   r   r   r   r?      s    zTwistOptions.parseOptionsc                 C   s4   d| kr,i }t tD ]}|||j< q|| d< | d S )Nplugins)r   r   tapname)r   r@   pluginr   r   r   r@      s    zTwistOptions.pluginsc                 c   s:   | j }t|D ]&}|| }|jd |fdd|jfV  qd S )Nc                 S   s   |   S )Nr*   )rB   r   r   r   <lambda>       z*TwistOptions.subCommands.<locals>.<lambda>)r@   sortedrA   Zdescription)r   r@   r%   rB   r   r   r   subCommands   s    
zTwistOptions.subCommandsc                 C   s    t |  | jd krtdd S )NzNo plugin specified.)r   postOptionsZ
subCommandr   r   r   r   r   rG      s    

zTwistOptions.postOptions)N)__name__
__module____qualname____doc__r   r   infor   r   r!   r#   r&   r   r    joinr   r   r,   Ziterconstantsr%   r5   r;   r>   r?   propertyr@   rF   rG   r   r   r   r   r      s<   





	


r   N)rK   sysr   r   textwrapr   Ztwisted.copyrightr   Ztwisted.python.usager   r   Ztwisted.loggerr   r	   r
   r   Ztwisted.pluginr   Zreactorsr   r   r   Zrunner._exitr   r   servicer   openr1   r   r   r   r   r   <module>   s   