
    DfK                        d Z ddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddl
mZ  G d d	          Z G d
 de          Z G d de          Z G d de          Z G d d          Z G d d          Zd Zd Zdej        ddddeddddej        ddd ed!d"d#d$ed%d&d#d'ed(d&d#d)ed*d&d#d+ed,d&d#d-ed.d&d#d/ed0d&d#d1ed2d&d3Zd4 ZdS )5a:  Command line tool for starting a Cheroot WSGI/HTTP server instance.

Basic usage:

.. code-block:: shell-session

    $ # Start a server on 127.0.0.1:8000 with the default settings
    $ # for the WSGI app myapp/wsgi.py:application()
    $ cheroot myapp.wsgi

    $ # Start a server on 0.0.0.0:9000 with 8 threads
    $ # for the WSGI app myapp/wsgi.py:main_app()
    $ cheroot myapp.wsgi:main_app --bind 0.0.0.0:9000 --threads 8

    $ # Start a server for the cheroot.server.Gateway subclass
    $ # myapp/gateway.py:HTTPGateway
    $ cheroot myapp.gateway:HTTPGateway

    $ # Start a server on the UNIX socket /var/spool/myapp.sock
    $ cheroot myapp.wsgi --bind /var/spool/myapp.sock

    $ # Start a server on the abstract UNIX socket CherootServer
    $ cheroot myapp.wsgi --bind @CherootServer

.. spelling::

   cli
    N)import_module)suppress   )server)wsgic                       e Zd ZdZdS )BindLocationz=A class for storing the bind location for a Cheroot instance.N)__name__
__module____qualname____doc__     :/var/www/media/lib/python3.11/site-packages/cheroot/cli.pyr	   r	   )   s        GGGGr   r	   c                       e Zd ZdZd ZdS )	TCPSocketz
TCPSocket.c                     ||f| _         dS )zInitialize.

        Args:
            address (str): Host name or IP address
            port (int): TCP port number

        N	bind_addr)selfaddressports      r   __init__zTCPSocket.__init__0   s     !$r   Nr
   r   r   r   r   r   r   r   r   r   -   s)        ' ' ' ' 'r   r   c                       e Zd ZdZd ZdS )
UnixSocketzUnixSocket.c                     || _         dS )Initialize.Nr   )r   paths     r   r   zUnixSocket.__init__>   s    r   Nr   r   r   r   r   r   ;   s)            r   r   c                       e Zd ZdZd ZdS )AbstractSocketzAbstractSocket.c                 <    d                     |          | _        dS )r   z {sock_path})	sock_pathN)formatr   )r   abstract_sockets     r   r   zAbstractSocket.__init__F   s    *11O1LLr   Nr   r   r   r   r!   r!   C   s.        M M M M Mr   r!   c                   :    e Zd ZdZed             Zd Zd Zd ZdS )ApplicationzApplication.c                 L   |                     d          \  }}}t          t          |          |pd          }t          t                    5  t          |t          j                  rt          |          cddd           S 	 ddd           n# 1 swxY w Y    | |          S )z@Read WSGI app/Gateway path string and import application module.:applicationN)		partitiongetattrr   r   	TypeError
issubclassr   Gateway	GatewayYo)cls	full_pathmod_path_app_pathapps         r   resolvezApplication.resolveN   s     !* 3 3C 8 8!XmH--x/H=IIi   	& 	&#v~.. & ~~	& 	& 	& 	& 	& 	& 	& 	&&	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& s3xxs   )BBBc                 P    t          |          st          d          || _        dS )r   zHApplication must be a callable object or cheroot.server.Gateway subclassN)callabler-   wsgi_app)r   r:   s     r   r   zApplication.__init__Z   s6    !! 	2   !r   c                     d t          |                                          D             }|                    t          |                      |S )z%Return keyword args for Server class.c                 H    i | ]\  }}|                     d           s||| S )r4   )
startswith).0argvalues      r   
<dictcomp>z+Application.server_args.<locals>.<dictcomp>e   sD     
 
 
U>>#&&
 ,1+< +<+<+<r   )varsitemsupdate)r   parsed_argsargss      r   server_argszApplication.server_argsc   sS    
 
";//5577
 
 

 	DJJr   c                 J    t          j        di |                     |          S )Server.r   )r   ServerrG   )r   rE   s     r   r   zApplication.serverm   s&    {;;T--k::;;;r   N)	r
   r   r   r   classmethodr7   r   rG   r   r   r   r   r'   r'   K   s`        	 	 [	! ! !  < < < < <r   r'   c                       e Zd ZdZd Zd ZdS )r0   zGateway.c                     || _         dS )zInit.N)gateway)r   rN   s     r   r   zGatewayYo.__init__u   s    r   c                     t          |           }|d         |d<   |j        
|j        |d<   |j        
|j        |d<   t          j        di |S )rI   r   N
maxthreads
minthreadsr   )rB   max
numthreadsr   
HTTPServer)r   rE   rG   s      r   r   zGatewayYo.servery   s]    4jj#.{#;K ?&(3K%!-(3(>K% //;///r   N)r
   r   r   r   r   r   r   r   r   r0   r0   r   s7        N  0 0 0 0 0r   r0   c                 H   |                      d          rt          | dd                   S t          j                            d                    |                     }	 |j        }|j        }||t          ||          S n# t          $ r Y nw xY wt          |           S )z.Convert bind address string to a BindLocation.@r   Nz//{addr})addr)r   )r=   r!   urllibparseurlparser$   hostnamer   r   
ValueErrorr   )bind_addr_stringmatchrW   r   s       r   parse_wsgi_bind_locationr_      s     ""3'' 4.qrr2333 L!!/00 E~zt/T4(((  0    +,,,,s   !!B 
BBc                 *    t          |           j        S )z6Convert bind address string to bind address parameter.)r_   r   )r]   s    r   parse_wsgi_bind_addrra      s    #$455??r   
APP_MODULEz<WSGI application callable or cheroot.server.Gateway subclass)metavartypehelpADDRESSr   z
[::1]:8000z4Network interface to listen on (default: [::1]:8000))rc   destrd   defaultre   PATHzSet the working directoryserver_namez7Web server name to be advertised via Server HTTP header)rg   rd   re   INTrS   z Minimum number of worker threads)rc   rg   rd   re   rR   z Maximum number of worker threadstimeoutz+Timeout in seconds for accepted connectionsshutdown_timeoutz:Time in seconds to wait for worker threads to cleanly exitrequest_queue_sizez$Maximum number of queued connectionsaccepted_queue_sizez*Maximum number of active requests in queueaccepted_queue_timeoutz2Timeout in seconds for putting requests into queue)	_wsgi_appz--bindz--chdirz--server-namez	--threadsz--max-threadsz	--timeoutz--shutdown-timeoutz--request-queue-sizez--accepted-queue-sizez--accepted-queue-timeoutc                  f   t          j        d          } t                                          D ]\  }} | j        |fi | |                                 }dt          j        v pt          j                            dd           |j	        
                    |                                           dS )zCCreate a new Cheroot instance with arguments from the command line.z2Start an instance of the Cheroot WSGI/HTTP server.)description r   N)argparseArgumentParser	_arg_specrC   add_argument
parse_argssysr   insertrq   r   
safe_start)parserr?   specraw_argss       r   mainr      s    $H  F __&& ) )	TC((4((((  ""H #(N,chooa,, h''2244444r   )r   ru   osrz   urllib.parserX   	importlibr   
contextlibr   rt   r   r   r	   r   r   r!   r'   r0   r_   ra   r7   chdirstrintrw   r   r   r   r   <module>r      s   :  				 



     # # # # # #                  H H H H H H H H' ' ' ' ' ' ' '       M M M M M\ M M M$< $< $< $< $< $< $< $<N0 0 0 0 0 0 0 0$- - -2@ @ @  #N  $F  +  I  2	  2	  =	  "L	  $6	  %<	  (D	! !wA A	H5 5 5 5 5r   