o
    Òó·iÒ  ã                   @   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!   úhC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-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   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.getSynopsisútyping.NoReturnc                 C   s   t tjt› ƒ dS )z)
        Print version and exit.
        N)r   r   Z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.   r2   r!   r!   r$   Úopt_reactorC   s   ÿzTwistOptions.opt_reactorz, c                 c   ó   � | ]
}d |j › d �V  qdS ©ú"N)Z	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   )r3   N)r+   Ztwisted.internetr3   r   r   r   )r.   r2   r3   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   ZlevelWithNamer   r   )r.   r=   r!   r!   r$   Úopt_log_levelb   s
   ÿzTwistOptions.opt_log_levelc                 c   r5   r6   )r2   )r8   Z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   ZEX_IOERR)r.   r?   Ú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}.
        rH   r)   ÚisattyrG   rJ   rI   N)ÚhasattrrM   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;   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   sJ   � | j }t|ƒD ]}|| }|fdtdtfdd„}|jd ||jfV  qd S )NrT   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   Ú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$   rY   Ë   s   

ÿzTwistOptions.postOptions)r   N)r   r0   rU   )%Ú__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   rX   rY   r!   r!   r!   r$   r   '   sB    

þ

ÿû
	þ)*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   ÚopenrC   rS   r%   r   r!   r!   r!   r$   Ú<module>   s    $"