
    AҐi                        d dl Z d dlZd dlmZ d dlmZ d dlZ	 d dlZd dlmZ	  e	ej                         e	d      k  r ed      d dlmZ d dlmZ d d	lmZmZmZmZ d dlZd d
lmZ d dlmZ d dlmZ dej                  dej                  Z G d de      Z G d d      Z G d dej>                        Z  G d dejB                        Z" G d de      Z#y# e$ r	  ed      w xY w)    N)datetime)partial)parsez24.10.1z/gevent worker requires gevent 24.10.1 or higher)Pool)StreamServer)hubmonkeysocketpywsgi)base_environ)ssl_context)AsyncWorkerzgevent/z
 gunicorn/c                   j     e Zd ZdZdZd Z fdZd Zd Z fdZ	 fdZ
 fdZ fd	Z fd
Z xZS )GeventWorkerNc           	         t        j                          g }| j                  D ]Y  }|j                  t	        j                  |j
                  t        j                  |j                  j                                      [ || _        y )N)fileno)	r	   	patch_allsocketsappendr
   FAMILYSOCK_STREAMsockdetach)selfr   ss      Q/var/www/descvideos/venv/lib/python3.12/site-packages/gunicorn/workers/ggevent.pypatchzGeventWorker.patch%   sg      	BANN6==63E3E01A B	B     c                     t         |           | j                  t        j                         k7  r2| j
                  j                  d|        t        j                  d       y y )Nz!Parent changed, shutting down: %sr   )	supernotifyppidosgetppidloginfosysexitr   	__class__s    r   r!   zGeventWorker.notify/   sB    99

$HHMM=tDHHQK %r   c                 V    t        j                  | j                  j                  d      S )NF)geventTimeoutcfg	keepalive)r   s    r   timeout_ctxzGeventWorker.timeout_ctx5   s    ~~dhh00%88r   c           
         g }i }| j                   j                  rdt        | j                         i}| j                  D ]   }|j	                  d       t        | j                        }| j                  et        | j                         }|j                  dt        d        | j                  |f| j                  || j                  | j                  |d|}nEt        | j                  |      }t!        |f||d|}| j                   j"                  dkD  rd|_        |j'                          |j)                  |        | j*                  r2| j-                          t/        j0                  d       | j*                  r2	 |D ]  }|j3                           t5        j4                         }t5        j4                         |z
  | j                   j6                  k  rd}	|D ]9  }|j8                  j;                         |j8                  j<                  k7  s5|	dz  }	; |	sy | j-                          t/        j0                  d       t5        j4                         |z
  | j                   j6                  k  r| j                  j?                  d	| j@                         |D ]  }|jC                  d
        y # tD        $ r Y y w xY w)Nr      T)zwsgi.multithreadSERVER_SOFTWARE)applicationspawnr%   handler_classenviron)handler5   g      ?r   z Worker graceful timeout (pid:%s))timeout)#r.   is_sslr   r   setblockingr   worker_connectionsserver_classr   updateVERSIONwsgir%   wsgi_handlerr   r8   r   workers
max_acceptstartr   aliver!   r,   sleepclosetimegraceful_timeoutpool
free_countsizewarningpidstop	Exception)
r   serversssl_argsr   rJ   r7   serverhfunts	acceptings
             r   runzGeventWorker.run8   sQ   88??%{488'<=H 	#AMM!//0D  ,&txx0(,'.   +** #'99Ddhh"&"3"3W   
 t{{A.%aMDMHM88##a'()F%LLNNN6")	#, jjKKMLL jj	!  B))+"dhh&?&??	% 'F{{--/6;;3C3CC!Q	'
 !S! ))+"dhh&?&?? HH?J! 'A&' 		s&   BJ1 	J1 AJ1 1?J1 1	J=<J=c                 J    |j                  d       t        | 	  |||       y )Nr2   )r;   r    r8   )r   listenerclientaddrr*   s       r   r8   zGeventWorker.handlet   s#     	1x.r   c                 r    	 t         |   ||||       y # t        j                  $ r Y y t        $ r Y y w xY wN)r    handle_requestr,   GreenletExit
SystemExit)r   listener_namereqr   r[   r*   s        r   r^   zGeventWorker.handle_requestz   s>    	G"=#tTB"" 	 		s    666c                 D    t        j                  t        |   ||       y r]   )r,   r5   r    handle_quitr   sigframer*   s      r   rd   zGeventWorker.handle_quit        	UW(#u5r   c                 D    t        j                  t        |   ||       y r]   )r,   r5   r    handle_usr1re   s      r   rj   zGeventWorker.handle_usr1   rh   r   c                 j    | j                          t        j                          t        |           y r]   )r   r   reinitr    init_processr)   s    r   rm   zGeventWorker.init_process   s     



r   )__name__
__module____qualname__r=   rA   r   r!   r0   rW   r8   r^   rd   rj   rm   __classcell__r*   s   @r   r   r       s@    LL9:x/6
6
 r   r   c                       e Zd ZdZdZdZd Zy)GeventResponseNc                 .    || _         || _        || _        y r]   )statusheaderssent)r   rv   rw   clengths       r   __init__zGeventResponse.__init__   s    	r   )rn   ro   rp   rv   rw   rx   rz    r   r   rt   rt      s    FGDr   rt   c                   $     e Zd Zd Z fdZ xZS )PyWSGIHandlerc                    t        j                  | j                        }t        j                  | j                        }||z
  }t	        | di       }t        | j                  t              r| j                  j                         n| j                  }t        ||| j                        }t        | d      r| j                  j                         }ng }| j                  j                  j!                  ||| j"                  |       y )Nresponse_headersrw   )r   fromtimestamp
time_starttime_finishgetattr
isinstancerv   bytesdecodert   response_lengthhasattrrw   itemsrS   r%   accessr7   )r   rD   finishresponse_timeresp_headersrv   respreq_headerss           r   log_requestzPyWSGIHandler.log_request   s    &&t7''(8(89t%7< *4DKK)G##%T[[flD4H4HI4#,,,,.KKt[$,,Nr   c                 `    t         |          }| j                  |d<   | j                  |d<   |S )Nzgunicorn.sockRAW_URI)r    get_environr
   path)r   envr*   s     r   r   zPyWSGIHandler.get_environ   s0    g!##{{OI
r   )rn   ro   rp   r   r   rq   rr   s   @r   r}   r}      s    O  r   r}   c                       e Zd Zy)PyWSGIServerN)rn   ro   rp   r{   r   r   r   r      s    r   r   c                       e Zd ZdZeZeZy)GeventPyWSGIWorkerz&The Gevent StreamServer based workers.N)rn   ro   rp   __doc__r   r=   r}   rA   r{   r   r   r   r      s    ,L Lr   r   )$r#   r'   r   	functoolsr   rH   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   r?   r   rt   WSGIHandlerr}   
WSGIServerr   r   r{   r   r   <module>r      s   
 
 
   N 9V''(=+CCLMM  & . .  + % 3%+%7%79M9M
No; od	 	F&& 2	6$$ 	! !]  J
H
IIJs   C C*