Ë
    "ïàj  ã                   óŽ  — 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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d/d%œd"d0ed1d%œd2œZd3„ Zy)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                   ó   — e Zd ZdZy)ÚBindLocationz=A class for storing the bind location for a Cheroot instance.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú:/srv/dav/.venv/lib/python3.12/site-packages/cheroot/cli.pyr	   r	   (   s   „ ÚGr   r	   c                   ó   — e Zd ZdZd„ Zy)Ú	TCPSocketz
TCPSocket.c                 ó   — ||f| _         y)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__/   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y)Ú
UnixSocketzUnixSocket.c                 ó   — || _         y)ú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y)ÚAbstractSocketzAbstractSocket.c                 ó   — d|› �| _         y)r   ú Nr   )r   Úabstract_sockets     r   r   zAbstractSocket.__init__E   s   € à Ð0Ð1ˆ�r   Nr   r   r   r   r!   r!   B   s
   „ Ùó2r   r!   c                   ó2   — e Zd ZdZed„ «       Zd„ Zd„ Zd„ Zy)ÚApplicationzApplication.c                 ó  — |j                  d«      \  }}}t        t        |«      |xs d«      }t        t        «      5  t        |t        j                  «      rt        |«      cddd«       S 	 ddd«        | |«      S # 1 sw Y   ŒxY w)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.resolveM   s{   € ð !*× 3Ñ 3°CÓ 8Ñˆ�!�XÜ”m HÓ-¨xÒ/H¸=ÓIˆä”iÓ ñ 	&Ü˜#œvŸ~™~Ô.Ü  “~÷	&ñ 	&Ø.÷	&ñ �3‹xˆ÷		&ð 	&ús   ¾%A>Á>Bc                 ó>   — t        |«      st        d«      ‚|| _        y)r   zHApplication must be a callable object or cheroot.server.Gateway subclassN)Úcallabler,   Úwsgi_app)r   r9   s     r   r   zApplication.__init__Y   s%   € ä˜Ô!Üð2óð ð !ˆ�r   c                 óÄ   — t        |«      j                  «       D ��ci c]  \  }}|j                  d«      s|�||“Œ }}}|j                  t        | «      «       |S c c}}w )z*Return keyword arguments for Server class.r3   )ÚvarsÚitemsÚ
startswithÚupdate)r   Úparsed_argsÚargÚvalueÚargss        r   Úserver_argszApplication.server_argsb   sd   € ô # ;Ó/×5Ñ5Ó7÷
á��UØ—>‘> #Ô&¨5Ð+<ð �‰Jð
ˆñ 
ð
 	�‰”D˜“JÔØˆùó
s   � Ac                 óJ   — t        j                  di | j                  |«      ¤ŽS )úServer.r   )r   ÚServerrC   )r   r?   s     r   r   zApplication.serverl   s   € ä�{‰{Ñ;˜T×-Ñ-¨kÓ:Ñ;Ð;r   N)	r
   r   r   r   Úclassmethodr6   r   rC   r   r   r   r   r&   r&   J   s&   „ Ùàñ	ó ð	ò!òó<r   r&   c                   ó   — e Zd ZdZd„ Zd„ Zy)r/   zGateway.c                 ó   — || _         y)zInit.N)Úgateway)r   rJ   s     r   r   zGatewayYo.__init__t   s	   € àˆ�r   c                 ó¾   — t        | «      }|d   |d<   |j                  �|j                  |d<   |j                  �|j                  |d<   t        j                  di |¤ŽS )rE   r   Ú
maxthreadsÚ
minthreadsr   )r;   ÚmaxÚ
numthreadsr   Ú
HTTPServer)r   r?   rC   s      r   r   zGatewayYo.serverx   sb   € ä˜4“jˆØ#.¨{Ñ#;ˆ�KÑ Ø�?‰?Ð&Ø(3¯©ˆK˜Ñ%Ø×!Ñ!Ð-Ø(3×(>Ñ(>ˆK˜Ñ%Ü× Ñ Ñ/ ;Ñ/Ð/r   N)r
   r   r   r   r   r   r   r   r   r/   r/   q   s   „ Ùòó0r   r/   c                 ó  — | j                  d«      rt        | dd «      S t        j                  j	                  d| › �«      }	 |j
                  }|j                  }|€|�t        ||«      S 	 t        | ¬«      S # t        $ r Y Œw xY w)z.Convert bind address string to a BindLocation.ú@r   Nz//)r   )
r=   r!   ÚurllibÚparseÚurlparseÚhostnamer   r   Ú
ValueErrorr   )Úbind_addr_stringÚmatchÚaddrr   s       r   Úparse_wsgi_bind_locationr[   ƒ   s�   € ð ×"Ñ" 3Ô'ÜÐ.¨q¨rÐ2Ó3Ð3ô �L‰L×!Ñ!Ø
ÐÐÐó€EðØ�~‰~ˆØ�z‰zˆØÐ˜tÐ/Ü˜T 4Ó(Ð(ð  0ô Ð+Ô,Ð,øô	 ò Ùðús   Á'A8 Á8	BÂBc                 ó,   — t        | «      j                  S )z6Convert bind address string to bind address parameter.)r[   r   )rX   s    r   Úparse_wsgi_bind_addrr]   œ   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))r_   Údestr`   Údefaultra   ÚPATHzSet the working directoryÚserver_namez7Web server name to be advertised via Server HTTP header)rc   r`   ra   ÚINTrO   z Minimum number of worker threads)r_   rc   r`   ra   rN   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                  óh  — t        j                  d¬«      } t        j                  «       D ]  \  }} | j                  |fi |¤Ž Œ | j                  «       }dt        j                  v xs  t        j                  j                  dd«       |j                  j                  |«      j                  «        y)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_specr<   Úadd_argumentÚ
parse_argsÚsysr   Úinsertrm   r   Ú
safe_start)Úparserr@   ÚspecÚraw_argss       r   Úmainr|   å   s•   € ä×$Ñ$ØHô€Fô —_‘_Ó&ò )‰	ˆˆTØˆ×Ñ˜CÑ( 4Ó(ð)à× Ñ Ó"€Hð Œ#�(‰(€NÒ,”c—h‘h—o‘o a¨Ó,øð ×Ñ×Ñ˜hÓ'×2Ñ2Õ4r   )r   rq   Úosrv   Úurllib.parserS   Ú
contextlibr   Ú	importlibr   rp   r   r   r	   r   r   r!   r&   r/   r[   r]   r6   ÚchdirÚstrÚintrs   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   