Ë
    ¹ûàg'  ã                   ó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
 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j0                  «      Z G d„ dej2                  e«      Z G d„ dej6                  «      Z G d„ dej8                  «      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)Ú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      úZ/var/www/skyplay_api_hub/venv/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    8   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__I   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_addressr/   s      €r   r3   zWSGIServer.handle_errorO   s'   ø€ ÜÔ!Ü�K‰KÐ/°Õ@ä‰GÑ  ¨.Õ9r!   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrequest_queue_sizer+   r3   Ú__classcell__©r/   s   @r   r
   r
   D   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.   r/   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,   r4   r5   ÚaliasÚconnr/   s        €r   rC   z)ThreadedWSGIServer.process_request_threada   sI   ø€ Ø×$Ò$ð  $×8Ñ8×>Ñ>Ó@ò *‘��tØ%)”˜EÒ"ð*ä‰Ñ& w°Õ?r!   c                 ó,   — t        j                  «        y r   )r   Ú	close_all©r,   s    r   Ú_close_connectionsz%ThreadedWSGIServer._close_connectionsi   s   € ä×ÑÕr!   c                 óD   •— | j                  «        t        ‰| �	  |«       y r   )rI   r*   Úclose_request)r,   r4   r/   s     €r   rK   z ThreadedWSGIServer.close_requestm   s   ø€ Ø×ÑÔ!Ü‰Ñ˜gÕ&r!   )
r6   r7   r8   r9   Údaemon_threadsr+   rC   rI   rK   r;   r<   s   @r   r>   r>   V   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_lengthr/   s          €r   r+   zServerHandler.__init__u   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_headersrX   ÚheadersÚstrÚ
isinstanceÚrequest_handlerÚserverÚsocketserverÚThreadingMixInrR   Úclose_connection©r,   r/   s    €r   r`   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^   ri   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)rX   r   ÚresultÚheaders_sentÚsend_headersr^   r*   Úfinish_responseri   s    €r   rr   zServerHandler.finish_response    s`   ø€ Ø�<‰<Ð(Ñ)¨VÒ3ð
Ü�d—k‘k¨!Õ,ð ×(Ò(Ø×%Ñ%Ô'à—
‘
•ä‰GÑ#Õ%øð —
‘
•ús   •3A( Á(A:)	r6   r7   r8   Úhttp_versionr+   r`   r^   rr   r;   r<   s   @r   rN   rN   r   s!   ø„ Ø€Lô
ô9ô0÷&ð &r!   rN   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   )r5   rH   s    r   Úaddress_stringz!WSGIRequestHandler.address_string´   s   € à×"Ñ" 1Ñ%Ð%r!   c                 óÖ  — | j                   | j                  «       dœ}|d   d   dk(  r1|d   j                  d«      rd|d<   t        j	                  d|¬	«       y |d   j                  «       rat        |d   «      d
k(  rPt        |d   «      }||d<   |dk\  rt        j                  }n7|dk\  rt        j                  }n!t        j                  }nt        j                  } ||g|¢­d|iŽ y )N)r4   Úserver_timeé   r   Ú4ziô  Ústatus_codezNYou're accessing the development server over HTTPS, but it only supports HTTP.)Úextraé   i�  r|   )
r4   Úlog_date_time_stringÚ
startswithr1   ÚerrorÚisdigitÚlenrQ   Úwarningr2   )r,   Úformatr-   r|   r{   Úlevels         r   Úlog_messagezWSGIRequestHandler.log_message¸   sâ   € à—|‘|Ø×4Ñ4Ó6ñ
ˆð �‰7�1‰:˜Òà�A‰w×!Ñ! *Ô-Ø'*��mÑ$Ü—‘ð-àð ô ð
 à�‰7�?‰?Ô¤ T¨!¡W£°Ò!2Ü˜d 1™g›,ˆKØ#.ˆE�-Ñ à˜cÒ!ÜŸ™‘Ø Ò#ÜŸ™‘äŸ™‘ä—K‘KˆEáˆfÐ)�tÒ) 5Ó)r!   c                 óf   •— | j                   D ]  }d|v sŒ| j                   |= Œ t        ‰| �	  «       S )Nr   )ra   r*   Úget_environ)r,   Úkr/   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)rh   Úhandle_one_requestÚ
connectionÚshutdownr'   ÚSHUT_WRÚAttributeErrorÚOSErrorrH   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)zDCopy of WSGIRequestHandler.handle() but with different ServerHandleri  i   Ú iž  N)ÚrfileÚreadlineÚraw_requestliner‚   ÚrequestlineÚrequest_versionÚcommandÚ
send_errorÚparse_requestrN   ÚwfileÚ
get_stderrrˆ   rd   Úrunre   Ú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!   )
r6   r7   r8   Úprotocol_versionrv   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)Útyperf   rg   r   r   rL   Ú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!   )r9   Úloggingr'   rf   r   Úcollectionsr   Úwsgirefr   Údjango.core.exceptionsr   Údjango.core.handlers.wsgir   Údjango.core.wsgir   Ú	django.dbr   Údjango.utils.module_loadingr	   Ú__all__Ú	getLoggerr1   r   r    r
   rg   r>   rN   r   rž   © r!   r   ú<module>r»      s¯   ðñó Û Û Û 
Ý Ý !å 7Ý 3Ý 1Ý !Ý 5à
.€à	ˆ×	Ñ	˜?Ó	+€òò8	ô:�×)Ñ)ô :ô$'˜×4Ñ4°jô 'ô8<&�M×/Ñ/ô <&ô~L+˜×9Ñ9ô L+ðf 
ØØØôr!   