
    2Bh2                        S SK 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J	r	J
r
  S SKJrJr  S SKJr  Sr\R                   " S5      r\R$                  " \5      r " S S	5      r " S
 S\ R,                  5      rS rS rS rS r " S S5      rg)    N)TOKEN_RE)ConfigurationProblemInvalidHeaderInvalidHeaderName)SERVER_SOFTWARESERVER)utili?z[ \t\x21-\x7e\x80-\xff]*c                   $    \ rS rSrSS jrS rSrg)FileWrapper   c                 b    Xl         X l        [        US5      (       a  UR                  U l        g g )Nclose)filelikeblksizehasattrr   )selfr   r   s      D/var/www/html/env/lib/python3.13/site-packages/gunicorn/http/wsgi.py__init__FileWrapper.__init__   s)     8W%%!DJ &    c                 j    U R                   R                  U R                  5      nU(       a  U$ [        eN)r   readr   
IndexError)r   keydatas      r   __getitem__FileWrapper.__getitem__#   s(    }}!!$,,/Kr   )r   r   r   N)i    )__name__
__module____qualname____firstlineno__r   r   __static_attributes__ r   r   r   r      s    (r   r   c                        \ rS rSrS rS rSrg)WSGIErrorsWrapper*   c                 T   [         R                  " S5      nUR                  n/ U l        UR                  S:X  a.  U R                  R                  [        R                  5        USS  nU H;  n[        US5      (       d  M  U R                  R                  UR                  5        M=     g )Nzgunicorn.error-   stream)
logging	getLoggerhandlersstreamserrorlogappendsysstderrr   r+   )r   cfgr0   r.   hs        r   r   WSGIErrorsWrapper.__init__,   s     $$%56$$<<3LL

+|HAq(####AHH- r   c                     U R                    H%  n UR                  U5        UR	                  5         M'     g ! [         a#    UR                  UR                  S5      5         NAf = f)NzUTF-8)r/   writeUnicodeErrorencodeflush)r   r   r+   s      r   r8   WSGIErrorsWrapper.write<   sR    llF3T" LLN #   3T[[123s   7*A$#A$)r/   N)r   r    r!   r"   r   r8   r#   r$   r   r   r&   r&   *   s    . r   r&   c           	      T    [        U 5      SSU R                  S:  S[        S[        S.$ )Nr*   r   Fr*   T)zwsgi.errorszwsgi.versionzwsgi.multithreadzwsgi.multiprocesszwsgi.run_oncezwsgi.file_wrapperzwsgi.input_terminatedr   )r&   workersr   r   )r4   s    r   base_environr@   E   s1    (-!!kkAo(!%*	 	r   c                    [        U5      nUR                  U R                  UU R                  U R                  U R
                  SSR                  U R                   Vs/ s H  n[        U5      PM     sn5      -  S.5        U$ s  snf )NzHTTP/%s.)z
wsgi.inputzgunicorn.socketREQUEST_METHODQUERY_STRINGRAW_URISERVER_PROTOCOL)	r@   updatebodymethodqueryurijoinversionstr)reqsockr4   envvs        r   default_environrS   R   sq    
s
CJJhh**		77$sxx0MAQ0M'NN  J 1Ns   Bc                 ~    U R                   nU(       d  0 $ US   US   [        US   5      US   [        US   5      S.$ )Nproxy_protocolclient_addrclient_port
proxy_addr
proxy_port)PROXY_PROTOCOLREMOTE_ADDRREMOTE_PORT
PROXY_ADDR
PROXY_PORT)proxy_protocol_inforN   )rO   infos     r   proxy_environra   _   sT    ""D	 /0M*4./<($|,- r   c                 4   [        XU5      n[        XU5      nS n[        R                  R	                  SS5      nU R
                   H  u  pU	S:X  a&  U
R                  5       S:X  a  UR                  S5        O*U	S:X  a  U
nO!U	S:X  a  U
nOU	S:X  a  XS'   MO  U	S	:X  a  XS
'   M[  SU	R                  SS5      -   nX;   a  Xk   < SU
< 3n
XU'   M     U R                  US'   [        U[        5      (       a  X&S'   OB[        U[        5      (       a  UR                  5       US'   OUS   US'   [        US   5      US'   [        U[        5      (       a  UR                  S5      n[        U5      S:X  a  U(       av  UR                  S5      n[        U5      S:X  aU  U R                  S:X  a  UR!                  S5        OEU R                  S:X  a  UR!                  S5        O#UR!                  S5        OUR!                  S5        US   US'   [        US   5      US'   U R"                  nU(       a7  UR%                  U5      (       d  ['        SU< SU< 35      eU[        U5      S  n[(        R*                  " U5      US'   XS'   UR-                  [/        U 5      5        XV4$ )NSCRIPT_NAME EXPECTz100-continues   HTTP/1.1 100 Continue

HOSTzCONTENT-TYPECONTENT_TYPEzCONTENT-LENGTHCONTENT_LENGTHHTTP_r)   _,zwsgi.url_schemer[   r   r*   r\   :httpP   httpsi  SERVER_NAMESERVER_PORTzRequest path z! does not start with SCRIPT_NAME 	PATH_INFO)ResponserS   osenvirongetheaderslowersendreplacescheme
isinstancerN   bytesdecodesplitlenr1   path
startswithr   r	   unquote_to_wsgi_strrG   ra   )rO   rP   clientserverr4   respru   hostscript_namehdr_name	hdr_valuer   	path_infos                r   creater   n   sy   Cs#D c-G D**..3K  #{{x N2		:;D&#K'&/N#))(1$% ((c22>#*<;I +  +0 "%G &#!'	FE	"	"!'!'!$VAY &#c"v;!Cv;!#zzV+b)w.c*b) b!#AYGM ^GM I##K00&K)* * c+./0	33I>GK(M NN=%&=r   c                   f    \ rS rSrS rS rS rSS jrS rS r	S	 r
S
 rS rS rS rS rS rSrg)rs      c                     Xl         X l        [        U l        S U l        SU l        SU l        / U l        SU l        S U l	        SU l
        SU l        X0l        g )NFr   )rO   rP   r   rM   statuschunked
must_closerw   headers_sentresponse_lengthsentupgrader4   )r   rO   rP   r4   s       r   r   Response.__init__   sR    	!#	r   c                     SU l         g )NT)r   r   s    r   force_closeResponse.force_close   s	    r   c                    U R                   (       d  U R                  R                  5       (       a  gU R                  c  U R                  (       a  gU R                  R
                  S:X  a  gU R                  S:  d  U R                  S;   a  gg)NTFHEADr      i0  )r   rO   should_closer   r   rI   status_coder   s    r   r   Response.should_close   sg    ??dhh3355+t||88??f$c!T%5%5%Cr   Nc                    U(       aG   U R                   (       a2  U R                  (       a!  [        R                  " US   US   US   5        S nOU R                   b  [	        S5      eXl          [        U R                   R                  5       S   5      U l        U R                  U5        U R                  5       U l        U R                  $ ! S nf = f! [         a
    S U l         NLf = f)Nr   r*      zResponse headers already set!)r   r   r	   reraiseAssertionErrorintr   r   
ValueErrorprocess_headers
is_chunkedr   r8   )r   r   rw   exc_infos       r   start_responseResponse.start_response   s     ;;4#4#4LL!hqk8A;G[[$ !@AA
	$"4;;#4#4#6q#9:D 	W%(zz!    	$#D	$s   AC .+C CC&%C&c                    U GHg  u  p#[        U[        5      (       d  [        SU-  5      e[        R                  " U5      (       d  [        SU-  5      e[        U[        5      (       d  [        SU-  5      e[        R	                  U5      (       d  [        SU-  5      eUR                  S5      nUR                  5       nUS:X  a  [        U5      U l        Ov[        R                  " U5      (       a[  US:X  a  UR                  5       S:X  a  SU l        O6US:X  a0  UR                  5       S:X  a  U R                  R!                  X#45        GMK  U R                  R!                  X#45        GMj     g )	Nz%r is not a stringz%rz 	zcontent-length
connectionr   T	websocket)r|   rN   	TypeErrorr   	fullmatchr   HEADER_VALUE_REr   striprx   r   r   r	   
is_hoppishr   rw   r1   )r   rw   namevaluelnames        r   r   Response.process_headers   s*   "KDdC(( 4t ;<<%%d++'t44eS)) 4u <==",,U33#D5L11 KK&EJJLE(('*5z$&&L({{}	1'+i'{{}3++TM: LL.; #r   c                     U R                   b  gU R                  R                  S::  a  gU R                  R                  S:X  a  gU R                  S;   a  gg)NFr>   r   r   T)r   rO   rM   rI   r   r   s    r   r   Response.is_chunked  sQ     +XX'XX__&+ r   c                    U R                   (       a  SnOU R                  5       (       a  SnOSnSU R                  R                  S   < SU R                  R                  S   < SU R                  < S	3S
U R                  -  S[
        R                  " 5       -  SU-  /nU R                  (       a  UR                  S5        U$ )Nr   r   z
keep-alivezHTTP/r   rB   r*    
zServer: %s
z
Date: %s
zConnection: %s
zTransfer-Encoding: chunked
)	r   r   rO   rM   r   r	   	http_dater   r1   )r   r   rw   s      r   default_headersResponse.default_headers/  s    <<"J   J%J $(88#3#3A#6#'88#3#3A#6Et||+T^^-- :-
 <<NN;<r   c           
      f   U R                   (       a  g U R                  5       nUR                  U R                   VVs/ s H  u  p#U< SU< S3PM     snn5        SSR	                  U5      -  n[
        R                  " U R                  [
        R                  " US5      5        SU l         g s  snnf )Nz: r   z%s
rd   zlatin-1T)	r   r   extendrw   rL   r	   r8   rP   to_bytestring)r   tosendkrR   
header_strs        r   send_headersResponse.send_headersC  s    %%'Fq!,FG/


499d00YGH 	 Gs   B-
c                    U R                  5         [        U[        5      (       d  [        SU-  5      e[	        U5      nUnU R
                  bH  U R                  U R
                  :  a  g [        U R
                  U R                  -
  U5      nX2:  a  US U nU R                  (       a  US:X  a  g U =R                  U-  sl        [        R                  " U R                  XR                  5        g )Nz%r is not a byter   )r   r|   r}   r   r   r   r   minr   r	   r8   rP   )r   argarglenr   s       r   r8   Response.writeM  s    #u%%.455S+yyD000--		96BF'6l <<FaK		V	

499c<<0r   c                 2    U R                   R                  SL$ )NF)r4   sendfiler   s    r   can_sendfileResponse.can_sendfiled  s    xx  --r   c                    U R                   R                  (       d  U R                  5       (       d  g[        R                  " UR
                  5      (       d  gUR
                  R                  5       n [        R                  " US[        R                  5      nU R                  c%  [        R                  " U5      R                  nXC-
  nOU R                  n U R!                  5         U R#                  5       (       a/  SU-  nU R$                  R'                  UR)                  S5      5        US:  a$  U R$                  R+                  UR
                  X5S9  U R#                  5       (       a  U R$                  R'                  S5        [        R                  " X#[        R,                  5        g! [        [        R                  4 a     gf = f)NFr   z%X
zutf-8)offsetcounts   
T)r4   is_sslr   r	   
has_filenor   filenort   lseekSEEK_CURr   fstatst_sizeOSErrorioUnsupportedOperationr   r   rP   sendallr:   r   SEEK_SET)r   respiterr   r   filesizenbytes
chunk_sizes          r   r   Response.sendfileg  sQ   88??$"3"3"5"5x0011""))+	XXfa5F##+88F+33!*-- 	??!F*JIIj//89A:IIx00N??IIg&
-! 001 		s   3AF, F, ,G	G	c                 f    U R                  U5      (       d  U H  nU R                  U5        M     g g r   )r   r8   )r   r   items      r   
write_fileResponse.write_file  s,    }}X&& 

4  ! 'r   c                     U R                   (       d  U R                  5         U R                  (       a"  [        R                  " U R
                  S5        g g )Nr   )r   r   r   r	   write_chunkrP   r   s    r   r   Response.close  s7      <<TYY, r   )r4   r   rw   r   r   rO   r   r   rP   r   r   r   rM   r   )r   r    r!   r"   r   r   r   r   r   r   r   r   r8   r   r   r   r   r#   r$   r   r   rs   rs      sE    	0/@"(!1..B!
-r   rs   )r   r,   rt   rer2   gunicorn.http.messager   gunicorn.http.errorsr   r   r   gunicornr   r   r	   BLKSIZEcompiler   r-   r   logr   	RawIOBaser&   r@   rS   ra   r   rs   r$   r   r   <module>r      s   
 
  	 	 
 * W W ,   **89!  6

WtI- I-r   