
    h                         S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	J
r
Jr  S SKJr  S SKJr  S SKJr  S S	KJr  \" S
5      r " S S\5      r " S S\	5      r " S S\R.                  5      rS rS rS rS rg)    )IOBase)settings)signals)base)HttpRequest	QueryDictparse_cookie)set_script_prefix)repercent_broken_unicode)cached_property)_lazy_re_compiles   /+c                   2    \ rS rSrSrS rSS jrSS jrSrg)	LimitedStream   z
Wrap another stream to disallow reading it past a number of bytes.

Based on the implementation from werkzeug.wsgi.LimitedStream
See https://github.com/pallets/werkzeug/blob/dbf78f67/src/werkzeug/wsgi.py#L828
c                 b    UR                   U l        UR                  U l        SU l        X l        g )Nr   )read_readreadline	_readline_poslimit)selfstreamr   s      K/var/www/html/env/lib/python3.13/site-packages/django/core/handlers/wsgi.py__init__LimitedStream.__init__   s$    [[
	
    c                    U R                   nU R                  nX#:  a  gUS:X  d  Uc  X2-
  nO[        XU-
  5      nU R                  U5      nU =R                   [	        U5      -  sl         U$ Nr   )r   r   minr   len)r   sizer   r   datas        r   r   LimitedStream.read   sa    yy

=2:<DtT\*Dzz$		SY	r   c                    U R                   nU R                  nX#:  a  gUS:X  d  Uc  X2-
  nO[        XU-
  5      nU R                  U5      nU =R                   [	        U5      -  sl         U$ r   )r   r   r!   r   r"   )r   r#   r   r   lines        r   r   LimitedStream.readline*   sa    yy

=2:<DtT\*D~~d#		SY	r   )r   r   r   r   N)r    )	__name__
__module____qualname____firstlineno____doc__r   r   r   __static_attributes__ r   r   r   r      s    r   r   c                   n    \ rS rSrS rS r\S 5       rS rS r	\S 5       r
\S 5       r\" \\	5      rS	rg
)WSGIRequest8   c                 
   [        U5      n[        U5      =(       d    SnXl        X0l        UR	                  S5      < SUR                  SSS5      < 3U l        Xl        X0R                  S'   X R                  S'   US   R                  5       U l	        U R                  U5         [        UR                  S5      5      n[        U R                  S	   U5      U l        S
U l        S U l        g ! [        [        4 a    Sn NAf = f)N/    	PATH_INFOSCRIPT_NAMEREQUEST_METHODCONTENT_LENGTHr   z
wsgi.inputF)get_script_nameget_path_infoenviron	path_inforstripreplacepathMETAuppermethod_set_content_type_paramsintget
ValueError	TypeErrorr   _stream_read_startedresolver_match)r   r=   script_namer>   content_lengths        r   r   WSGIRequest.__init__9   s    %g. "'*1c	"  +11#6	8I8I#rST8UV		!*		+#.		- ./557%%g.	 -=!>?N %T\\,%?P""	 I& 	N	s   &C- -DDc                 8    U R                   R                  S5      $ )Nzwsgi.url_scheme)r=   rG   r   s    r   _get_schemeWSGIRequest._get_schemeR   s    || 122r   c                 V    [        U R                  SS5      n[        XR                  S9$ )NQUERY_STRINGr5   )encoding)get_bytes_from_wsgir=   r   	_encoding)r   raw_query_strings     r   GETWSGIRequest.GETU   s'     /t||^RP)NNCCr   c                 \    [        U S5      (       d  U R                  5         U R                  $ )N_post)hasattr_load_post_and_filesr]   rQ   s    r   	_get_postWSGIRequest._get_post[   s%    tW%%%%'zzr   c                     Xl         g N)r]   )r   posts     r   	_set_postWSGIRequest._set_post`   s    
r   c                 F    [        U R                  SS5      n[        U5      $ )NHTTP_COOKIEr5   )get_str_from_wsgir=   r	   )r   
raw_cookies     r   COOKIESWSGIRequest.COOKIESc   s    &t||]BG
J''r   c                 \    [        U S5      (       d  U R                  5         U R                  $ )N_files)r^   r_   rn   rQ   s    r   FILESWSGIRequest.FILESh   s%    tX&&%%'{{r   )	rB   r]   rK   rJ   r=   rD   rA   r>   rL   N)r)   r*   r+   r,   r   rR   r   rZ   r`   re   rk   propertyro   POSTr.   r/   r   r   r1   r1   8   sb    #23 D D

 ( (  
 Iy)Dr   r1   c                   2   ^  \ rS rSr\rU 4S jrS rSrU =r	$ )WSGIHandlerq   c                 F   > [         TU ]  " U0 UD6  U R                  5         g rc   )superr   load_middleware)r   argskwargs	__class__s      r   r   WSGIHandler.__init__t   s!    $)&)r   c                 N   [        [        U5      5        [        R                  R	                  U R
                  US9  U R                  U5      nU R                  U5      nU R
                  Ul        SUR                  UR                  4-  n/ UR                  5       QS UR                  R                  5        5       QnU" XV5        [        USS 5      bQ  UR                  S5      (       a;  UR                   UR"                  l        US   " UR"                  UR$                  5      nU$ )N)senderr=   z%d %sc              3   D   #    U  H  nS UR                  SS94v   M     g7f)z
Set-Cookier5   )headerN)output).0cs     r   	<genexpr>'WSGIHandler.__call__.<locals>.<genexpr>   s"     U;Ta|QXXRX01;Ts    file_to_streamzwsgi.file_wrapper)r
   r;   r   request_startedsendr{   request_classget_response_handler_classstatus_codereason_phraseitemscookiesvaluesgetattrrG   closer   
block_size)r   r=   start_responserequestresponsestatusresponse_headerss          r   __call__WSGIHandler.__call__x   s   /'23$$DNNG$L$$W-$$W-"&..H00(2H2HII
^^
U8;K;K;R;R;TU
 	v08-t4@W[[F
 F
 -5NNH##)23'')<)<H r   r/   )
r)   r*   r+   r,   r1   r   r   r   r.   __classcell__)r{   s   @r   rt   rt   q   s    M r   rt   c                 N    [        U SS5      n[        U5      R                  5       $ )z0Return the HTTP request's PATH_INFO as a string.r7   r4   )rW   r   decode)r=   r>   s     r   r<   r<      s$    #G[#>I#I.5577r   c                 b   [         R                  b  [         R                  $ [        U SS5      =(       d    [        U SS5      nU(       aJ  SU;   a  [        R	                  SU5      n[        U SS5      nUR                  U5      nUR                  5       $ [        U SS5      nUR                  5       $ )a-  
Return the equivalent of the HTTP request's SCRIPT_NAME environment
variable. If Apache mod_rewrite is used, return what would have been
the script name prior to any rewriting (so it's the script name as seen
from the client's perspective), unless the FORCE_SCRIPT_NAME setting is
set (to anything).

SCRIPT_URLr5   REDIRECT_URLs   //   /r7   r8   )r   FORCE_SCRIPT_NAMErW   _slashes_resubremovesuffixr   )r=   
script_urlr>   rM   s       r   r;   r;      s     !!-))) %WlB? CVDJ J %z:J'bA	 --i8  *'="Er   c                 F    U R                  X5      nUR                  S5      $ )z\
Get a value from the WSGI environ dictionary as bytes.

key and default should be strings.
z
iso-8859-1)rG   encoder=   keydefaultvalues       r   rW   rW      s#     KK%E <<%%r   c                 8    [        XU5      nUR                  SS9$ )z^
Get a value from the WSGI environ dictionary as str.

key and default should be str objects.
r@   )errors)rW   r   r   s       r   ri   ri      s!      g6E<<y<))r   N)ior   django.confr   django.corer   django.core.handlersr   django.httpr   r   r	   django.urlsr
   django.utils.encodingr   django.utils.functionalr   django.utils.regex_helperr   r   r   r1   BaseHandlerrt   r<   r;   rW   ri   r/   r   r   <module>r      so        % < < ) : 3 6v&&F &R6*+ 6*r$"" D8 B
&*r   