U
    �Acjò  ã                   @   s’   d Z ddl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 ddlmZmZ dd	lmZ dd
lmZmZmZ ddlmZ G dd„ dƒZdS )z
Run a Twisted application.
é    N)ÚSequence)Ú_exitWithSignal)ÚIReactorCoreÚ_ISupportsExitSignalCapturing)ÚOptionsÚ
UsageErroré   )Ú
ExitStatusÚexit)ÚRunner)ÚApplicationÚIServiceÚIServiceMakeré   )ÚTwistOptionsc                   @   s†   e Zd ZdZeee edœdd„ƒZee	e
edœdd„ƒZeeedd	œd
d„ƒZeeddœdd„ƒZeejfee ddœdd„ƒZdS )ÚTwistz$
    Run a Twisted application.
    )ÚargvÚreturnc              
   C   s\   t ƒ }z| | dd… ¡ W n: tk
rV } zttjd|› d|› �ƒ W 5 d}~X Y nX |S )z€
        Parse command line options.

        @param argv: Command line arguments.
        @return: The parsed options.
        r   NzError: z

)r   ZparseOptionsr   r
   r	   ÚEX_USAGE)r   ÚoptionsÚe© r   úD/tmp/pip-unpacked-wheel-nrvc_22y/twisted/application/twist/_twist.pyr      s    *zTwist.options)Úpluginr   r   c                 C   s&   |   |¡}t| jƒ}| |¡ t|ƒS )a
  
        Create the application service.

        @param plugin: The name of the plugin that implements the service
            application to run.
        @param options: Options to pass to the application.
        @return: The created application service.
        )ZmakeServicer   ZtapnameZsetServiceParentr   )r   r   ÚserviceZapplicationr   r   r   r   +   s    



zTwist.serviceN)Úreactorr   r   c                 C   s   |  ¡  |  dd|j¡ dS )z¦
        Start the application service.

        @param reactor: The reactor to run the service with.
        @param service: The application service to run.
        ÚbeforeÚshutdownN)ÚstartServiceZaddSystemEventTriggerZstopService)r   r   r   r   r   r   ;   s    zTwist.startService)ÚtwistOptionsr   c                 C   sR   t | d | d | d | d d�}| ¡  | d }t |¡rN|jdk	rNt|jƒ dS )z�
        Run the application service.

        @param twistOptions: Command line options to convert to runner
            arguments.
        r   ZlogLevelÚlogFileÚfileLogObserverFactory)r   ZdefaultLogLevelr    r!   N)r   Úrunr   Z
providedByZ_exitSignalr   )r   Úrunnerr   r   r   r   r"   H   s    ü

z	Twist.runc                 C   sT   |   |¡}|d }|j}|dk	s$t‚| j|j| |jd�}|  ||¡ |  |¡ dS )zÄ
        Executable entry point for L{Twist}.
        Processes options and run a twisted reactor with a service.

        @param argv: Command line arguments.
        @type argv: L{list}
        r   N)r   r   )r   Ú
subCommandÚAssertionErrorr   ZpluginsZ
subOptionsr   r"   )Úclsr   r   r   r$   r   r   r   r   Úmain\   s    	
þz
Twist.main)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr   Ústrr   r   r   r   r   r   r   r   r"   ÚclassmethodÚsysr   r'   r   r   r   r   r      s   r   )r+   r/   Útypingr   Ztwisted.application.appr   Ztwisted.internet.interfacesr   r   Ztwisted.python.usager   r   Zrunner._exitr	   r
   Zrunner._runnerr   r   r   r   r   Ú_optionsr   r   r   r   r   r   Ú<module>   s   