Ë
    Ç]j0&  ã                   óv  — 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 ddlmZ ddlmZ dd	lmZ dd
lmZ dZ ej,                  d«      Zd„ Zd„ Z G d„ dej4                  «      Z G d„ dej6                  e«      Z G d„ dej:                  «      Z G d„ dej<                  «      Zdddefd„Zy)a0  
HTTP server that implements the Python WSGI protocol (PEP 333, rev 1.21).

Based on wsgiref.simple_server which is part of the standard library since 2.5.

This is a simple server for use in testing or debugging Django apps. It hasn't
been reviewed for security issues. DON'T USE IT FOR PRODUCTION USE!
é    N)Údeque)Úsimple_server)ÚImproperlyConfigured)ÚLimitedStream)Úget_wsgi_application)Úconnections)Úlog_message)Úimport_string)Ú
WSGIServerÚWSGIRequestHandlerzdjango.serverc                  ó–   — ddl m}  t        | d«      }|€
t        «       S 	 t	        |«      S # t
        $ r}t        d|z  «      |‚d}~ww xY w)aK  
    Load and return the WSGI application as configured by the user in
    ``settings.WSGI_APPLICATION``. With the default ``startproject`` layout,
    this will be the ``application`` object in ``projectname/wsgi.py``.

    This function, and the ``WSGI_APPLICATION`` setting itself, are only useful
    for Django's internal server (runserver); external WSGI servers should just
    be configured to point to the correct application object directly.

    If settings.WSGI_APPLICATION is not set (is ``None``), return
    whatever ``django.core.wsgi.get_wsgi_application`` returns.
    r   )ÚsettingsÚWSGI_APPLICATIONNzBWSGI application '%s' could not be loaded; Error importing module.)Údjango.confr   Úgetattrr   r
   ÚImportErrorr   )r   Úapp_pathÚerrs      úS/var/www/zogu/zoguvenv/lib/python3.12/site-packages/django/core/servers/basehttp.pyÚget_internal_wsgi_applicationr      sb   € õ %ä�xÐ!3Ó4€HØÐÜ#Ó%Ð%ðÜ˜XÓ&Ð&øÜò Ü"ð&Ø(0ñ1ó
ð ð	ûðús    
+ «	A´AÁAc                  óh   — t        j                  «       \  } }}t        | t        t        t
        f«      S ©N)ÚsysÚexc_infoÚ
issubclassÚBrokenPipeErrorÚConnectionAbortedErrorÚConnectionResetError)Úexc_typeÚ_s     r   Úis_broken_pipe_errorr!   9   s1   € Ü—\‘\“^�N€Hˆa�ÜØäÜ"Ü ð	
óð ó    c                   ó8   ‡ — e Zd ZdZdZdddœˆ fd„
Zˆ fd„Zˆ xZS )r   z7BaseHTTPServer that implements the Python WSGI protocolé
   FT)Úipv6Úallow_reuse_addressc                ó`   •— |rt         j                  | _        || _        t	        ‰| �  |i |¤Ž y r   )ÚsocketÚAF_INET6Úaddress_familyr&   ÚsuperÚ__init__)Úselfr%   r&   ÚargsÚkwargsÚ	__class__s        €r   r,   zWSGIServer.__init__J   s,   ø€ ÙÜ"(§/¡/ˆDÔØ#6ˆÔ Ü‰Ñ˜$Ð) &Ó)r"   c                 óh   •— t        «       rt        j                  d|«       y t        ‰| �  ||«       y )Nz- Broken pipe from %s)r!   ÚloggerÚinfor+   Úhandle_error)r-   ÚrequestÚclient_addressr0   s      €r   r4   zWSGIServer.handle_errorP   s'   ø€ ÜÔ!Ü�K‰KÐ/°Õ@ä‰GÑ  ¨.Õ9r"   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrequest_queue_sizer,   r4   Ú__classcell__©r0   s   @r   r   r   E   s    ø„ ÙAàÐà#(¸dö *÷:ð :r"   r   c                   óF   ‡ — e Zd ZdZdZddœˆ fd„
Zˆ fd„Zd„ Zˆ fd„Zˆ xZ	S )	ÚThreadedWSGIServerz$A threaded version of the WSGIServerTN)Úconnections_overridec                ó2   •— t        ‰| �  |i |¤Ž || _        y r   )r+   r,   r@   )r-   r@   r.   r/   r0   s       €r   r,   zThreadedWSGIServer.__init__\   s   ø€ Ü‰Ñ˜$Ð) &Ò)Ø$8ˆÕ!r"   c                 ó”   •— | j                   r+| j                   j                  «       D ]  \  }}|t        |<   Œ t        ‰| �  ||«       y r   )r@   Úitemsr   r+   Úprocess_request_thread)r-   r5   r6   ÚaliasÚconnr0   s        €r   rD   z)ThreadedWSGIServer.process_request_threadb   sI   ø€ Ø×$Ò$ð  $×8Ñ8×>Ñ>Ó@ò *‘��tØ%)”˜EÒ"ð*ä‰Ñ& w°Õ?r"   c                 ó,   — t        j                  «        y r   )r   Ú	close_all©r-   s    r   Ú_close_connectionsz%ThreadedWSGIServer._close_connectionsj   s   € ä×ÑÕr"   c                 óD   •— | j                  «        t        ‰| �	  |«       y r   )rJ   r+   Úclose_request)r-   r5   r0   s     €r   rL   z ThreadedWSGIServer.close_requestn   s   ø€ Ø×ÑÔ!Ü‰Ñ˜gÕ&r"   )
r7   r8   r9   r:   Údaemon_threadsr,   rD   rJ   rL   r<   r=   s   @r   r?   r?   W   s(   ø„ Ù.à€Nà37ö 9ô@ò ÷'ð 'r"   r?   c                   ó@   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zˆ fd„Zˆ fd„Zˆ xZS )ÚServerHandlerz1.1c                 ó¤   •— 	 t        |j                  d«      «      }t	        ‰| �  t        ||«      |||fi |¤Ž y# t        t        f$ r d}Y Œ1w xY w)a#  
        Use a LimitedStream so that unread request data will be ignored at
        the end of the request. WSGIRequest uses a LimitedStream but it
        shouldn't discard the data since the upstream servers usually do this.
        This fix applies only for testserver/runserver.
        ÚCONTENT_LENGTHr   N)ÚintÚgetÚ
ValueErrorÚ	TypeErrorr+   r,   r   )r-   ÚstdinÚstdoutÚstderrÚenvironr/   Úcontent_lengthr0   s          €r   r,   zServerHandler.__init__v   s^   ø€ ð	Ü  §¡Ð-=Ó!>Ó?ˆNô 	‰ÑÜ˜% Ó0°&¸&À'ñ	
ØMSó	
øô œIÐ&ò 	ØŠNð	ús   ƒ; »AÁAc                 óì  •— t         ‰| �  «        | j                  d   dk(  r6d| j                  v r(t	        | j                  d   «      dk(  r| j                  d= | j                  d   dk7  rd| j                  vrd| j                  d<   n=t        | j                  j                  t        j                  «      sd| j                  d<   | j                  j                  d«      dk(  rd| j                  _        y y )NÚREQUEST_METHODÚHEADzContent-LengthÚ0ÚcloseÚ
ConnectionT)r+   Úcleanup_headersrY   ÚheadersÚstrÚ
isinstanceÚrequest_handlerÚserverÚsocketserverÚThreadingMixInrS   Úclose_connection©r-   r0   s    €r   ra   zServerHandler.cleanup_headers…   sÔ   ø€ Ü‰ÑÔ!à�L‰LÐ)Ñ*¨fÒ4Ø  D§L¡LÑ0Ü�D—L‘LÐ!1Ñ2Ó3°sÒ:à—‘Ð-Ð.ð
 �L‰LÐ)Ñ*¨fÒ4Ø ¨¯©Ñ4à)0ˆD�L‰L˜Ò&ä˜D×0Ñ0×7Ñ7¼×9TÑ9TÔUØ)0ˆD�L‰L˜Ñ&ð �<‰<×Ñ˜LÓ)¨WÒ4Ø48ˆD× Ñ Õ1ð 5r"   c                 ó^   •— | j                  «       j                  «        t        ‰| �  «        y r   )Ú	get_stdinÚreadr+   r_   rj   s    €r   r_   zServerHandler.close�   s   ø€ Ø�‰Ó×ÑÔÜ‰‰�r"   c                 óú   •— | j                   d   dk(  rE	 t        | j                  d¬«       | j                  s| j	                  «        | j                  «        y t        ‰| �  «        y # | j                  «        w xY w)Nr\   r]   r   )Úmaxlen)rY   r   ÚresultÚheaders_sentÚsend_headersr_   r+   Úfinish_responserj   s    €r   rs   zServerHandler.finish_response¡   s`   ø€ Ø�<‰<Ð(Ñ)¨VÒ3ð
Ü�d—k‘k¨!Õ,ð ×(Ò(Ø×%Ñ%Ô'à—
‘
•ä‰GÑ#Õ%øð —
‘
•ús   •3A( Á(A:)	r7   r8   r9   Úhttp_versionr,   ra   r_   rs   r<   r=   s   @r   rO   rO   s   s!   ø„ Ø€Lô
ô9ô0÷&ð &r"   rO   c                   ó:   ‡ — e Zd ZdZd„ Zd„ Zˆ fd„Zd„ Zd„ Zˆ xZ	S )r   zHTTP/1.1c                 ó    — | j                   d   S )Nr   )r6   rI   s    r   Úaddress_stringz!WSGIRequestHandler.address_stringµ   s   € à×"Ñ" 1Ñ%Ð%r"   c                 ó  — |d   d   dk(  r|d   j                  d«      rd}d}d}n5|d   j                  «       r t        |d   «      dk(  rt        |d   «      }nd }t	        t
        |g|¢­| j                  || j                  «       d	œŽ y )
Né   r   Ú4zzNYou're accessing the development server over HTTPS, but it only supports HTTP.iô  © é   )r5   Ústatus_codeÚserver_time)Ú
startswithÚisdigitÚlenrR   r	   r2   r5   Úlog_date_time_string)r-   Úformatr.   r}   s       r   r	   zWSGIRequestHandler.log_message¹   s�   € Ø�‰7�1‰:˜Ò  a¡×!3Ñ!3°JÔ!?ð!ð ð ˆKØ‰DØ�!‰W�_‰_Ô¤3 t¨A¡w£<°1Ò#4Ü˜d 1™g›,‰KàˆKäÜØð	
ð ñ	
ð —L‘LØ#Ø×1Ñ1Ó3ô	
r"   c                 óf   •— | j                   D ]  }d|v sŒ| j                   |= Œ t        ‰| �	  «       S )Nr    )rb   r+   Úget_environ)r-   Úkr0   s     €r   r…   zWSGIRequestHandler.get_environÐ   s:   ø€ ð
 —‘ò 	$ˆAØ�aŠxØ—L‘L ‘Oð	$ô ‰wÑ"Ó$Ð$r"   c                 ó  — d| _         | j                  «        | j                   s| j                  «        | j                   sŒ	 | j                  j                  t        j
                  «       y # t        t        f$ r Y y w xY w)NT)ri   Úhandle_one_requestÚ
connectionÚshutdownr(   ÚSHUT_WRÚAttributeErrorÚOSErrorrI   s    r   ÚhandlezWSGIRequestHandler.handleÛ   sh   € Ø $ˆÔØ×ÑÔ!Ø×'Ò'Ø×#Ñ#Ô%ð ×'Ó'ð	Ø�O‰O×$Ñ$¤V§^¡^Õ4øÜ¤Ð(ò 	Ùð	ús   Á)A, Á,A>Á=A>c                 óÀ  — | j                   j                  d«      | _        t        | j                  «      dkD  r'd| _        d| _        d| _        | j                  d«       y| j                  «       syt        | j                   | j                  | j                  «       | j                  «       «      }| |_        |j                  | j                  j!                  «       «       y)zV
        Copy of WSGIRequestHandler.handle() but with different ServerHandler
        i  i   Ú iž  N)ÚrfileÚreadlineÚraw_requestliner�   ÚrequestlineÚrequest_versionÚcommandÚ
send_errorÚparse_requestrO   ÚwfileÚ
get_stderrr…   re   Úrunrf   Úget_app)r-   Úhandlers     r   rˆ   z%WSGIRequestHandler.handle_one_requestå   s±   € ð  $Ÿz™z×2Ñ2°5Ó9ˆÔÜˆt×#Ñ#Ó$ uÒ,Ø!ˆDÔØ#%ˆDÔ ØˆDŒLØ�O‰O˜CÔ Øà×!Ñ!Ô#ØäØ�J‰J˜Ÿ
™
 D§O¡OÓ$5°t×7GÑ7GÓ7Ió
ˆð #'ˆÔØ�‰�D—K‘K×'Ñ'Ó)Õ*r"   )
r7   r8   r9   Úprotocol_versionrw   r	   r…   rŽ   rˆ   r<   r=   s   @r   r   r   ²   s"   ø„ Ø!Ðò&ò
ô.	%òö+r"   r   Fc                 óì   — | |f}|rt        dt        j                  |fi «      }n|} ||t        |¬«      }	|� |t	        |	d|«      «       |rd|	_        |	j                  |«       |	j                  «        y )Nr   )r%   Úserver_portT)Útyperg   rh   r   r   rM   Úset_appÚserve_forever)
ÚaddrÚportÚwsgi_handlerr%   Ú	threadingÚon_bindÚ
server_clsÚserver_addressÚ	httpd_clsÚhttpds
             r   r›   r›   û   sz   € ð ˜D�\€NÙÜ˜¬×(CÑ(CÀZÐ'PÐRTÓU‰	àˆ	Ù�nÔ&8¸tÔD€EØÐÙ”˜˜}¨dÓ3Ô4Ùð  $ˆÔØ	‡M�M�,ÔØ	×ÑÕr"   ) r:   Úloggingr(   rg   r   Úcollectionsr   Úwsgirefr   Údjango.core.exceptionsr   Údjango.core.handlers.wsgir   Údjango.core.wsgir   Ú	django.dbr   Údjango.utils.logr	   Údjango.utils.module_loadingr
   Ú__all__Ú	getLoggerr2   r   r!   r   rh   r?   rO   r   r›   r{   r"   r   ú<module>r¸      s²   ðñó Û Û Û 
Ý Ý !å 7Ý 3Ý 1Ý !Ý (Ý 5à
.€à	ˆ×	Ñ	˜?Ó	+€òò8	ô:�×)Ñ)ô :ô$'˜×4Ñ4°jô 'ô8<&�M×/Ñ/ô <&ô~F+˜×9Ñ9ô F+ðZ 
ØØØôr"   