
    2Bh                        S SK r S SKrS SKJr  S SKJr  S SKr S SKrS SKJr	  \	" \R                  5      \	" S5      :  a  \" S5      e S SKJr  S SKJr  S S	KJrJrJrJr  S SKrS S
KJr  S SKJr  S SKJr  S\R                  < S\R                  < 3r " S S\5      r " S S5      r " S S\R>                  5      r  " S S\RB                  5      r" " S S\5      r#g! \ a	    \" S5      ef = f)    N)datetime)partial)parsez1.4z+gevent worker requires gevent 1.4 or higher)Pool)StreamServer)hubmonkeysocketpywsgi)base_environ)ssl_context)AsyncWorkerzgevent/z
 gunicorn/c                   ~   ^  \ rS rSrSrSrS rU 4S jrS rS r	U 4S jr
U 4S jrU 4S	 jrU 4S
 jrU 4S jrSrU =r$ )GeventWorker    Nc           	         [         R                  " 5         / nU R                   HX  nUR                  [        R                  " UR
                  [        R                  UR                  R                  5       S95        MZ     Xl        g )N)fileno)	r	   	patch_allsocketsappendr
   FAMILYSOCK_STREAMsockr   )selfr   ss      J/var/www/html/env/lib/python3.13/site-packages/gunicorn/workers/ggevent.pypatchGeventWorker.patch%   s^     ANN6==63E3E01A B      c                    > [         TU ]  5         U R                  [        R                  " 5       :w  a3  U R
                  R                  SU 5        [        R                  " S5        g g )Nz!Parent changed, shutting down: %sr   )	supernotifyppidosgetppidloginfosysexitr   	__class__s    r   r"   GeventWorker.notify/   sB    99

$HHMM=tDHHQK %r   c                 X    [         R                  " U R                  R                  S5      $ )NF)geventTimeoutcfg	keepalive)r   s    r   timeout_ctxGeventWorker.timeout_ctx5   s    ~~dhh00%88r   c           
      2   / n0 nU R                   R                  (       a  S[        U R                   5      0nU R                   GH  nUR	                  S5        [        U R                  5      nU R                  bd  [        U R                   5      nUR                  S[        S.5        U R                  " U4U R                  X@R                  U R                  US.UD6nOE[        U R                  U5      n[!        U4XtS.UD6nU R                   R"                  S:  a  SUl        UR'                  5         UR)                  U5        GM     U R*                  (       a9  U R-                  5         [.        R0                  " S5        U R*                  (       a  M9   U HG  n[3        US5      (       a  UR5                  5         [3        US	5      (       d  M7  UR7                  5         MI     [8        R8                  " 5       n[8        R8                  " 5       U-
  U R                   R:                  ::  a  S
n	U H<  nUR<                  R?                  5       UR<                  R@                  :w  d  M7  U	S-  n	M>     U	(       d  g U R-                  5         [.        R0                  " S5        [8        R8                  " 5       U-
  U R                   R:                  ::  a  M  U R                  RC                  SU RD                  5        U H  nURG                  SS9  M     g ! [H         a     g f = f)Nr      T)zwsgi.multithreadSERVER_SOFTWARE)applicationspawnr&   handler_classenviron)handler8   g      ?closekillr   z Worker graceful timeout (pid:%s))timeout)%r0   is_sslr   r   setblockingr   worker_connectionsserver_classr   updateVERSIONwsgir&   wsgi_handlerr   r;   r   workers
max_acceptstartr   aliver"   r.   sleephasattrr<   r=   timegraceful_timeoutpool
free_countsizewarningpidstop	Exception)
r   serversssl_argsr   rO   r:   serverhfunts	acceptings
             r   runGeventWorker.run8   s\   88??%{488'<=HAMM!//0D  ,&txx0(,'.   ** #'99Dhh"&"3"3W   
 t{{A.%aMMHM88##a'()F%LLNNN6") , jjKKMLL jjj	!67++LLN66**KKM	 " B))+"dhh&?&??	%F{{--/6;;3C3CC!Q	 &
 !S! ))+"dhh&?&?? HH?J!A& " 		s,   5L	 BL	 !L	 2AL	 
>L	 	
LLc                 H   > UR                  S5        [        TU ]	  XU5        g )Nr5   )r@   r!   r;   )r   listenerclientaddrr+   s       r   r;   GeventWorker.handlew   s!     	1x.r   c                 r   >  [         TU ]  XX45        g ! [        R                   a     g [         a     g f = fN)r!   handle_requestr.   GreenletExit
SystemExit)r   listener_namereqr   ra   r+   s        r   re   GeventWorker.handle_request}   s:    	G"=tB"" 	 		s    6	66c                 D   > [         R                  " [        TU ]  X5        g rd   )r.   r8   r!   handle_quitr   sigframer+   s      r   rl   GeventWorker.handle_quit        	UW(#5r   c                 D   > [         R                  " [        TU ]  X5        g rd   )r.   r8   r!   handle_usr1rm   s      r   rs   GeventWorker.handle_usr1   rq   r   c                 l   > U R                  5         [        R                  " 5         [        TU ]  5         g rd   )r   r   reinitr!   init_processr*   s    r   rw   GeventWorker.init_process   s     



r   )r   )__name__
__module____qualname____firstlineno__rB   rF   r   r"   r2   r\   r;   re   rl   rs   rw   __static_attributes____classcell__r+   s   @r   r   r       s@    LL9=~/6
6
 r   r   c                   &    \ rS rSrSrSrSrS rSrg)GeventResponse   Nc                 (    Xl         X l        X0l        g rd   )statusheaderssent)r   r   r   clengths       r   __init__GeventResponse.__init__   s    	r   )r   r   r   )	ry   rz   r{   r|   r   r   r   r   r}    r   r   r   r      s    FGDr   r   c                   .   ^  \ rS rSrS rU 4S jrSrU =r$ )PyWSGIHandler   c                    [         R                  " U R                  5      n[         R                  " U R                  5      nX!-
  n[	        U S0 5      n[        U R                  [        5      (       a  U R                  R                  5       OU R                  n[        XTU R                  5      n[        U S5      (       a  U R                  R                  5       nO/ nU R                  R                  R!                  XgU R"                  U5        g )Nresponse_headersr   )r   fromtimestamp
time_starttime_finishgetattr
isinstancer   bytesdecoder   response_lengthrL   r   itemsrX   r&   accessr:   )r   rI   finishresponse_timeresp_headersr   respreq_headerss           r   log_requestPyWSGIHandler.log_request   s    &&t7''(8(89t%7< *4DKK)G)G##%T[[fD4H4HI4##,,,,.KKt$,,Nr   c                 `   > [         TU ]  5       nU R                  US'   U R                  US'   U$ )Nzgunicorn.sockRAW_URI)r!   get_environr
   path)r   envr+   s     r   r   PyWSGIHandler.get_environ   s0    g!##{{OI
r   r   )ry   rz   r{   r|   r   r   r}   r~   r   s   @r   r   r      s    O  r   r   c                       \ rS rSrSrg)PyWSGIServer   r   N)ry   rz   r{   r|   r}   r   r   r   r   r      s    r   r   c                        \ rS rSrSr\r\rSr	g)GeventPyWSGIWorker   z&The Gevent StreamServer based workers.r   N)
ry   rz   r{   r|   __doc__r   rB   r   rF   r}   r   r   r   r   r      s    ,L Lr   r   )$r$   r(   r   	functoolsr   rM   r.   packaging.versionr   parse_version__version__RuntimeErrorImportErrorgevent.poolr   gevent.serverr   r   r	   r
   r   gunicorngunicorn.http.wsgir   gunicorn.sockr   gunicorn.workers.base_asyncr   rD   r   r   WSGIHandlerr   
WSGIServerr   r   r   r   r   <module>r      s   
 
 
   J 9V''(=+??HII @  & . .  + % 3%+%7%79M9M
Nr; rj	 	F&& 2	6$$ 	! !c  F
D
EEFs   C   C/