
    +h                        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e      Z G d dej@                        Z! G d dejD                        Z# G d de      Z$y# e$ r	  ed      w xY w)    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                   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sockr   )selfr   ss      K/var/www/html/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.notify0   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_ctx6   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 ];  }t3        |d      r|j5                          t3        |d	      s,|j7                          = t9        j8                         }t9        j8                         |z
  | j                   j:                  k  rd
}	|D ]9  }|j<                  j?                         |j<                  j@                  k7  s5|	dz  }	; |	sy | j-                          t/        j0                  d       t9        j8                         |z
  | j                   j:                  k  r| j                  jC                  d| jD                         |D ]  }|jG                  d        y # tH        $ r Y y w xY w)Nr      T)zwsgi.multithreadSERVER_SOFTWARE)applicationspawnr$   handler_classenviron)handler4   g      ?closekillr   z Worker graceful timeout (pid:%s))timeout)%r-   is_sslr   r   setblockingr   worker_connectionsserver_classr   updateVERSIONwsgir$   wsgi_handlerr   r7   r   workers
max_acceptstartr   aliver    r+   sleephasattrr8   r9   timegraceful_timeoutpool
free_countsizewarningpidstop	Exception)
r   serversssl_argsr   rK   r6   serverhfunts	acceptings
             r   runzGeventWorker.run9   sn   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	! "67+LLN66*KKM	" B))+"dhh&?&??	% 'F{{--/6;;3C3CC!Q	'
 !S! ))+"dhh&?&?? HH?J! 'A&' 		s,   -K /BK <	K AK ?K 	K&%K&c                 J    |j                  d       t        | 	  |||       y )Nr1   )r<   r   r7   )r   listenerclientaddrr)   s       r   r7   zGeventWorker.handlex   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_request~   s>    	G"=#tTB"" 	 		s    666c                 D    t        j                  t        |   ||       y r^   )r+   r4   r   handle_quitr   sigframer)   s      r   re   zGeventWorker.handle_quit        	UW(#u5r   c                 D    t        j                  t        |   ||       y r^   )r+   r4   r   handle_usr1rf   s      r   rk   zGeventWorker.handle_usr1   ri   r   c                 j    | j                          t        j                          t        |           y r^   )r   r   reinitr   init_processr(   s    r   rn   zGeventWorker.init_process   s     



r   )__name__
__module____qualname__r>   rB   r   r    r/   rX   r7   r_   re   rk   rn   __classcell__r)   s   @r   r   r   !   s@    LL9=~/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   rw   rx   clengths       r   __init__zGeventResponse.__init__   s    	r   )ro   rp   rq   rw   rx   ry   r{    r   r   ru   ru      s    FGDr   ru   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                  || j                        }t        | d      r| j                  j                         }ng }| j                  j                  j                  ||| j                  |       y )Nresponse_headersrx   )r   fromtimestamp
time_starttime_finishgetattrru   rw   response_lengthrH   rx   itemsrT   r$   accessr6   )r   rE   finishresponse_timeresp_headersrespreq_headerss          r   log_requestzPyWSGIHandler.log_request   s    &&t7''(8(89t%7<dkk<9M9MN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   )ro   rp   rq   r   r   rr   rs   s   @r   r~   r~      s    
O r   r~   c                       e Zd Zy)PyWSGIServerN)ro   rp   rq   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)ro   rp   rq   __doc__r   r>   r~   rB   r|   r   r   r   r      s    ,L Lr   r   )%r"   r&   r   	functoolsr   rI   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   objectru   WSGIHandlerr~   
WSGIServerr   r   r|   r   r   <module>r      s    
 
   J 9V''(=+??HII  & . .  + % 3%+%7%79M9M
Nr; rj	V 	F&& *	6$$ 	! ![  F
D
EEFs   C C+