U
    ){f                     @  s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z d dlmZ d dlmZ d dlmZ d dlmZmZmZmZmZ d	d
lmZ d	dlmZ d	dlmZ d	dlmZ d	dlm Z  ddl!m"Z"m#Z# ddlm$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+ zd dlm,Z, W n" e-k
r6   d dl.m,Z, Y nX zd dlm/Z/ W n" e-k
rj   d dl.m/Z/ Y nX ej0dk rd dl1m2Z2 dddddZ3dddddddd d!d"d#Z4d8ddd$d d%d&d'Z5d9ddd$d d%d(d)Z6d*ddd+d,d-d.d/d d0d1d2Z7d3d4d d5d6d7Z8dS ):    )annotationsN)partial)Event)getpid)randint)socket)Any	AwaitableCallableOptionalSet   )Lifespan)StatsdLogger)	TCPServer	UDPServer)WorkerContext   )ConfigSockets)
AppWrapperLifespanState)!check_multiprocess_shutdown_eventload_applicationraise_shutdownrepr_socket_addrShutdownError)Runner)	TaskGroup)      )BaseExceptionGroupr   )sockreturnc                 C  s    ddl m} | t }||S )Nr   )	fromshare)r   r%   sharer   )r#   r%   Z	sock_data r'   T/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/hypercorn/asyncio/run.py_share_socket,   s    r)   )socketsshutdown_triggerr   r   zOptional[Sockets]z"Optional[Callable[..., Awaitable]]None)appconfigr*   r+   r$   c                  s<   t t |d krt dddfdd}dD ]L}tt|r:ztt|| W q: t	k
r   ttt|| Y q:X q:j
}i t }| }| I d H  | r| }|d k	r||d kr }d }	jr }
j}	d }jd k	r$jtdj }t|t dd	dd
 fdd}g }|jD ]t}jdkrt dkrt|}|tj |j!|
||	dI d H  t"|j#|$ }j%&d| dI d H  q\|j'D ]p}jdkrt dkrt|}|tj |j!|dI d H  t"|j#|$ }j%&d| dI d H  q|j(D ]}jdkrvt dkrvt|}j) fdd|dI d H \}}|* }+| |,j- t"|j#|$ }j%&d| dI d H  qPzzDt7 4 I d H &}|t8| |t8j9j
 W 5 Q I d H R X W n\ t:k
rz } z$|;t<t=f\}}|d k	rj|W 5 d }~X Y n t<t=fk
r   Y nX W 5 j. I d H  |D ]}|/  |0 I d H  qz@z"tj3 }t4|j5I d H  W n tj6k
r   Y nX W 5 |  |1 I d H  |2  |I d H  X X d S )Nr   r,   )_r$   c                    s       d S N)set)r/   )signal_eventr'   r(   _signal_handlerC   s    z%worker_serve.<locals>._signal_handler>   SIGTERMSIGBREAKSIGINTr   zasyncio.StreamReaderzasyncio.StreamWriter)readerwriterr$   c                   s>   t }| |j t | |I d H  d S r0   )asynciocurrent_taskaddadd_done_callbackdiscardr   )r7   r8   task)r-   r.   contextlifespan_stateloopserver_tasksr'   r(   _server_callbackh   s    

z&worker_serve.<locals>._server_callbackr   Windows)backlogsslr#   ssl_handshake_timeoutzRunning on https://z (CTRL + C to quit))rE   r#   zRunning on http://c                     s   t  S r0   r   r'   )r-   r.   r?   r@   rA   r'   r(   <lambda>       zworker_serve.<locals>.<lambda>)r#   z (QUIC) (CTRL + C to quit))>Zset_statsd_logger_classr   r9   get_event_loopr   hasattrsignaladd_signal_handlergetattrNotImplementedErrorwaitr   create_taskZhandle_lifespanZwait_for_startupdone	exceptionZcreate_socketsZssl_enabledZcreate_ssl_contextrG   max_requestsr   Zmax_requests_jitterr   r1   Zsecure_socketsworkersplatformsystemr)   appendstart_serverrE   r   familygetsocknameloginfoZinsecure_socketsZquic_socketscreate_datagram_endpointrunr;   r<   r=   Z
terminatedclosewait_closedZwait_for_shutdowncancelgatherwait_forZgraceful_timeoutTimeoutErrorr   r   	terminater"   splitr   KeyboardInterrupt)r-   r.   r*   r+   r3   Zsignal_namelifespanZlifespan_taskrS   rG   ssl_contextrT   rC   Zserversr#   bindr/   protocolr>   serverZgathered_server_tasksZ
task_grouperrorZother_errorsr'   )r-   r.   r?   r@   rA   rB   r2   r(   worker_serve5   s    

 

	

 
&



ro   zOptional[EventType])r.   r*   shutdown_eventr$   c                 C  sl   t | j| j}d }|d k	r(tt|tj}| jdkrLt	 dkrLt
t  ttt|| |d| j|d d S )Nr   rD   r*   )debugr+   )r   application_pathwsgi_max_body_sizer   r   r9   sleeprU   rV   rW   set_event_loop_policyZWindowsSelectorEventLoopPolicy_runro   rr   )r.   r*   rp   r-   r+   r'   r'   r(   asyncio_worker   s    rx   c              
   C  s   zdd l }W n, tk
r8 } ztd|W 5 d }~X Y nX t| j| j}d }|d k	rbtt|tj	}t
tt|| |d| j||jd d S )Nr   zuvloop is not installedrq   rr   r+   loop_factory)uvloopImportError	Exceptionr   rs   rt   r   r   r9   ru   rw   ro   rr   new_event_loop)r.   r*   rp   r{   rn   r-   r+   r'   r'   r(   uvloop_worker   s    r   Fry   r
   boolz(Optional[Callable[..., Awaitable[None]]]z.Callable[[], asyncio.AbstractEventLoop] | None)mainrr   r+   rz   r$   c             	   C  s:   t ||d$}| t || |d W 5 Q R X d S )N)rr   rz   )r+   )r   get_loopset_exception_handler_exception_handlerr_   )r   rr   r+   rz   runnerr'   r'   r(   rw      s    rw   zasyncio.AbstractEventLoopdict)rA   r?   r$   c                 C  s&   | d}t|tjrn
| | d S )NrS   )get
isinstancerF   SSLErrordefault_exception_handler)rA   r?   rS   r'   r'   r(   r      s    
r   )NN)NN)9
__future__r   r9   rV   rL   rF   sys	functoolsr   Zmultiprocessing.synchronizer   Z	EventTypeosr   randomr   r   typingr   r	   r
   r   r   ri   r   Zstatsdr   Z
tcp_serverr   Z
udp_serverr   Zworker_contextr   r.   r   r   r   r   utilsr   r   r   r   r   r   r|   Z	taskgroupr   version_infoZexceptiongroupr"   r)   ro   rx   r   rw   r   r'   r'   r'   r(   <module>   sZ          