
    qi                        S r SSKrSSKrSSKrSSKrSSKJr  SSKJ	r	  SSK
JrJr   " S S5      r " S	 S
\5      r " S S\5      r " S S\5      r " S S5      r " S S5      rS rS rS\R*                  SS.SS\SSS.S\R,                  SS.S\S S!.S"S#\S$S%.S"S&\S'S%.S"S(\S)S%.S"S*\S+S%.S"S,\S-S%.S"S.\S/S%.S"S0\S1S%.S2.rS3 rg)4a:  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)suppress)import_module   )serverwsgic                       \ rS rSrSrSrg)BindLocation(   z=A class for storing the bind location for a Cheroot instance. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       @/home/kali/flask_env/lib/python3.13/site-packages/cheroot/cli.pyr	   r	   (   s    Gr   r	   c                       \ rS rSrSrS rSrg)	TCPSocket,   z
TCPSocket.c                     X4U l         g)z_Initialize.

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

N	bind_addr)selfaddressports      r   __init__TCPSocket.__init__/   s     !r   r   Nr   r   r   r   r   r   r   r   r   r   r   r   ,   s
    'r   r   c                       \ rS rSrSrS rSrg)
UnixSocket:   zUnixSocket.c                     Xl         g)Initialize.Nr   )r   paths     r   r   UnixSocket.__init__=   s    r   r   Nr   r   r   r   r!   r!   :   s
    r   r!   c                       \ rS rSrSrS rSrg)AbstractSocketB   zAbstractSocket.c                     SU 3U l         g)r$    Nr   )r   abstract_sockets     r   r   AbstractSocket.__init__E   s    01r   r   Nr   r   r   r   r(   r(   B   s
    2r   r(   c                   :    \ rS rSrSr\S 5       rS rS rS r	Sr
g)	ApplicationJ   zApplication.c                 0   UR                  S5      u  p#n[        [        U5      U=(       d    S5      n[        [        5         [        U[        R                  5      (       a  [        U5      sSSS5        $  SSS5        U " U5      $ ! , (       d  f       N= f)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   resolveApplication.resolveM   ss     !* 3 3C 8XmH-x/H=Ii #v~~.. ~ ! . ! 3x	 ! s   *B
Bc                 F    [        U5      (       d  [        S5      eXl        g)r$   zHApplication must be a callable object or cheroot.server.Gateway subclassN)callabler6   wsgi_app)r   rD   s     r   r   Application.__init__Y   s&    !!2  !r   c                     [        U5      R                  5        VVs0 s H$  u  p#UR                  S5      (       a  M  Uc  M"  X#_M&     nnnUR                  [        U 5      5        U$ s  snnf )z*Return keyword arguments for Server class.r=   )varsitems
startswithupdate)r   parsed_argsargvalueargss        r   server_argsApplication.server_argsb   sh     #;/557
7
>>#& +0 CJ7 	 

 	DJ
s   A'A'A'c                 L    [         R                  " S0 U R                  U5      D6$ )Server.r   )r   ServerrO   )r   rK   s     r   r   Application.serverl   s    {{;T--k:;;r   )rD   N)r   r   r   r   r   classmethodr@   r   rO   r   r   r   r   r   r/   r/   J   s&    	 	!<r   r/   c                   $    \ rS rSrSrS rS rSrg)r9   q   zGateway.c                     Xl         g)zInit.Ngateway)r   rZ   s     r   r   GatewayYo.__init__t   s    r   c                     [        U 5      nUS   US'   UR                  b  UR                  US'   UR                  b  UR                  US'   [        R                  " S0 UD6$ )rR   r   
maxthreads
minthreadsr   )rG   max
numthreadsr   
HTTPServer)r   rK   rO   s      r   r   GatewayYo.serverx   sb    4j#.{#;K ??&(3K%!!-(3(>(>K%  /;//r   rY   N)r   r   r   r   r   r   r   r   r   r   r   r9   r9   q   s    0r   r9   c                    U R                  S5      (       a  [        U SS 5      $ [        R                  R	                  SU  35      n UR
                  nUR                  nUc  Ub  [        X#5      $  [        U S9$ ! [         a     Nf = f)z.Convert bind address string to a BindLocation.@r   Nz//)r%   )
rI   r(   urllibparseurlparsehostnamer   r   
ValueErrorr!   )bind_addr_stringmatchaddrr   s       r   parse_wsgi_bind_locationrm      s     ""3''.qr233 LL!!
E~~zzt/T((  0 +,,	  s   (A; ;
BBc                 ,    [        U 5      R                  $ )z6Convert bind address string to bind address parameter.)rm   r   )rj   s    r   parse_wsgi_bind_addrro      s    #$4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))rq   destrr   defaultrs   PATHzSet the working directoryserver_namez7Web server name to be advertised via Server HTTP header)ru   rr   rs   INTr`   z Minimum number of worker threads)rq   ru   rr   rs   r_   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                  r   [         R                  " SS9n [        R                  5        H  u  pU R                  " U40 UD6  M     U R                  5       nS[        R                  ;   =(       d     [        R                  R                  SS5        UR                  R                  U5      R                  5         g)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_specrH   add_argument
parse_argssysr%   insertr   r   
safe_start)parserrL   specraw_argss       r   mainr      s    $$HF __&	C(4( '  "H #((N,chhooa, h'224r   )r   r   osr   urllib.parsere   
contextlibr   	importlibr   r   r   r   r	   r   r!   r(   r/   r9   rm   ro   r@   chdirstrintr   r   r   r   r   <module>r      sU  :  	 
   # H H' ' 2\ 2$< $<N0 0$-2@  ##N $F + I 2	 2	 =	 "L	 $6	 %<	 (D	!wA	H5r   