
    Tf                        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          n# e$ r  ed          w xY w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j"                  Z# G d de          Z$dS )    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 ]R}|                    t	          j        |j        t          j        |j                                                             S|| _        d S )N)fileno)	r	   	patch_allsocketsappendr
   FAMILYSOCK_STREAMsockr   )selfr   ss      J/var/www/html/env/lib/python3.11/site-packages/gunicorn/workers/ggevent.pypatchzGeventWorker.patch&   s      	B 	BANN6=63E01A A A B B B B    c                     t                                                       | j        t          j                    k    r1| j                            d|            t          j        d           d S d S )Nz!Parent changed, shutting down: %sr   )	supernotifyppidosgetppidloginfosysexitr   	__class__s    r   r    zGeventWorker.notify0   sZ    9
$$HMM=tDDDHQKKKKK %$r   c                 @    t          j        | j        j        d          S )NF)geventTimeoutcfg	keepalive)r   s    r   timeout_ctxzGeventWorker.timeout_ctx6   s    ~dh0%888r   c           
      N   g }i }| j         j        rdt          | j                   i}| j        D ]}|                    d           t          | j                  }| j        Ut          | j                   }|	                    dt          d            | j        |f| j        || j        | j        |d|}n<t          | j        |          }t!          |f||d|}| j         j        dk    rd|_        |                                 |                    |           | j        r/|                                  t/          j        d           | j        /	 |D ]J}t3          |d          r|                                 t3          |d	          r|                                 Kt9          j                    }t9          j                    |z
  | j         j        k    rd
}	|D ].}|j                                        |j        j         k    r|	dz  }	/|	sd S |                                  t/          j        d           t9          j                    |z
  | j         j        k    | j        !                    d| j"                   |D ]}|#                    d           d S # tH          $ r Y d S 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   s   8? 	>%{48'<'<=H 	# 	#AMM!/00D ,&tx00(,'.       +* #'9Ddh"&"3W       
 t{A..%aMDMMHMM8#a''()F%LLNNNNN6""""j 	KKMMML j 		! " "67++ #LLNNN66** "KKMMM B)++"dh&???	% ' 'F{--//6;3CCC!Q	 ! FS!!! )++"dh&??? H?JJJ! ' 'A&&&&' ' 	 	 	DD	s   B9J BJ 
J$#J$c                 x    |                     d           t                                          |||           d S )Nr1   )r<   r   r7   )r   listenerclientaddrr)   s       r   r7   zGeventWorker.handlex   s9     	1x.....r   c                     	 t                                          ||||           d S # t          j        $ r Y d S t          $ r Y d S w xY wN)r   handle_requestr+   GreenletExit
SystemExit)r   listener_namereqr   r\   r)   s        r   r_   zGeventWorker.handle_request~   sj    	GG""=#tTBBBBB" 	 	 	DD 	 	 	DD	s   $) A	AAc                 V    t          j        t                      j        ||           d S r^   )r+   r4   r   handle_quitr   sigframer)   s      r   re   zGeventWorker.handle_quit   &     	UWW(#u55555r   c                 V    t          j        t                      j        ||           d S r^   )r+   r4   r   handle_usr1rf   s      r   rk   zGeventWorker.handle_usr1   ri   r   c                     |                                   t          j                     t                                                       d S r^   )r   r   reinitr   init_processr(   s    r   rn   zGeventWorker.init_process   s7    


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 9 9= = =~/ / / / /    6 6 6 6 6
6 6 6 6 6
        r   r   c                        e Zd ZdZdZdZd ZdS )GeventResponseNc                 0    || _         || _        || _        d S 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      s2        FGD    r   ru   c                   $     e Zd Zd Z fdZ xZS )PyWSGIHandlerc                 r   t          j        | j                  }t          j        | j                  }||z
  }t	          | di           }t          | j        || j                  }t          | d          r| j	        
                                }ng }| j        j                            ||| j        |           d S )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7'(899t%7<<dk<9MNN4## 	,,,..KKKt[$,NNNNNr   c                 p    t                                                      }| j        |d<   | j        |d<   |S )Nzgunicorn.sockRAW_URI)r   get_environr
   path)r   envr)   s     r   r   zPyWSGIHandler.get_environ   s4    gg!!###{OI
r   )ro   rp   rq   r   r   rr   rs   s   @r   r~   r~      sJ        
O 
O 
O        r   r~   c                       e Zd ZdS )PyWSGIServerN)ro   rp   rq   r|   r   r   r   r      s        Dr   r   c                       e Zd ZdZeZeZdS )GeventPyWSGIWorkerz&The Gevent StreamServer based workers.N)ro   rp   rq   __doc__r   r>   r~   rB   r|   r   r   r   r      s        ,,L LLLr   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      sd   
			 



             JMMM 988888}V'((==+?+???lHIII @	  F F F
,D
E
EEF       & & & & & & . . . . . . . . . . . .  + + + + + + % % % % % % 3 3 3 3 3 3 3%+%7%7%79M9M
Nr r r r r; r r rj	 	 	 	 	V 	 	 	    F&   *	 	 	 	 	6$ 	 	 	! ! ! ! ! ! ! ! ! !s   A A