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    $"