U
    ){fj                     @  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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mZmZmZmZmZmZ dd	lmZmZ dd
lmZ ddlm Z m!Z!m"Z"m#Z# erddl$m%Z% G dd de&Z'G dd de&Z(G dd de&Z)G dd de&Z*G dd de&Z+G dd de&Z,ddddddZ-dd d!d"d#Z.d d d!d$d%Z/ddd&d'd(d)Z0d*dd+d&d,d-d.Z1d/d0d1d2Z2d/dd3d4d5Z3d6d7d8d9d:Z4d;d<d7d=d>d?Z5dd7d@dAdBZ6ddCdDdEdFdGZ7ddCddEdHdIZ8dJdKddLdMdNZ9dOddPdQdRZ:dS )S    )annotationsN)Enum)import_module)Event)Path)Any	AwaitableCallablecastDictIterableListLiteralOptionalTupleTYPE_CHECKING   )ASGIWrapperWSGIWrapper)Config)
AppWrapperASGIFramework	FrameworkWSGIFramework)Requestc                   @  s   e Zd ZdS )ShutdownErrorN__name__
__module____qualname__ r    r    N/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/hypercorn/utils.pyr   !   s   r   c                   @  s   e Zd ZdS )
NoAppErrorNr   r    r    r    r!   r"   %   s   r"   c                      s$   e Zd Zddd fddZ  ZS )LifespanTimeoutErrorstrNone)stagereturnc                   s   t  d| d| d d S )NzTimeout whilst awaiting z[. Your application may not support the ASGI Lifespan protocol correctly, alternatively the z$_timeout configuration is incorrect.super__init__)selfr&   	__class__r    r!   r*   *   s    zLifespanTimeoutError.__init__r   r   r   r*   __classcell__r    r    r,   r!   r#   )   s   r#   c                      s&   e Zd Zdddd fddZ  ZS )LifespanFailureErrorr$   r%   )r&   messager'   c                   s   t  d| d| d d S )NzLifespan failure in z. ''r(   )r+   r&   r1   r,   r    r!   r*   2   s    zLifespanFailureError.__init__r.   r    r    r,   r!   r0   1   s   r0   c                      s&   e Zd Zdddd fddZ  ZS )UnexpectedMessageErrorr   r$   r%   )statemessage_typer'   c                   s   t  d| d|  d S )NzUnexpected message type, z given the state r(   )r+   r4   r5   r,   r    r!   r*   7   s    zUnexpectedMessageError.__init__r.   r    r    r,   r!   r3   6   s   r3   c                   @  s   e Zd ZdS )FrameTooLargeErrorNr   r    r    r    r!   r6   ;   s   r6   r$   intbool)methodstatus_coder'   c                 C  s(   | dkp&d|  kodk n  p&|dkS )NHEADd      >   0     r    )r9   r:   r    r    r!   suppress_body?   s    r@   zIterable[Tuple[bytes, bytes]]zList[Tuple[bytes, bytes]])headersr'   c                 C  sH   g }| D ]:\}}|d dkr$t d|t| t| f q|S )Nr   :   zPseudo headers are not valid)
ValueErrorappendbytesstrip)rA   Zvalidated_headersnamevaluer    r    r!   build_and_validate_headersC   s     rI   c                 C  sn   dg}d }d}| D ]>\}}|dkr(|}q|dkr6|}q|d dkr| ||f qd|d k	r`|n|f|d< |S )N)   host    rK   s
   :authorityrJ   r   rB   )rD   )rA   Zfiltered_headers	authorityhostrG   rH   r    r    r!   filter_pseudo_headersM   s    rN   r   )pathwsgi_max_body_sizer'   c           
   
   C  s.  d }d| kr| d }}nB|  ddkrJ| dd\}}}|dkrZtdn| dd\}}t| }tjdt|j	 |
 r|dj}n|j}zt|}W n@ tk
r } z"|j|krtd	|  d
n W 5 d }~X Y nX zt|t|}	W n& tk
r   td	|  dY nX t|	||S d S )N:app   >   asgiwsgiz'Invalid mode, must be 'asgi', or 'wsgi'r   r    zCannot load application from 'z', module not found.z', application not found.)countsplitrC   r   resolvesysrO   insertr$   parentis_filewith_suffixrG   r   ModuleNotFoundErrorr"   evalvars	NameErrorwrap_app)
rO   rP   modemodule_nameZapp_namemodule_pathimport_namemoduleerrorrR   r    r    r!   load_application\   s0    

rj   r   z#Optional[Literal[('asgi', 'wsgi')]])rR   rP   rd   r'   c                 C  sB   |d krt | rdnd}|dkr.ttt| S ttt| |S d S )NrT   rU   )is_asgir   r
   r   r   r   )rR   rP   rd   r    r    r!   rc   |   s
    rc   zDict[Path, float])r'   c               
   C  sj   i } t tj D ]R}t|dd }|d kr,qt|}z| j| t|< W q tt	fk
rb   Y qX q| S )N__file__)
listrZ   modulesvaluesgetattrr   statst_mtimeFileNotFoundErrorNotADirectoryError)Zlast_updatesrh   filenamerO   r    r    r!   files_to_watch   s    rv   )filesr'   c              	   C  sT   |   D ]F\}}z| j}W n tk
r6   Y  dS X ||krF dS || |< qdS )NTF)itemsrq   rr   rs   )rw   rO   Z
last_mtimemtimer    r    r!   check_for_updates   s    

rz   zCallable[..., Awaitable]r%   )shutdown_eventr'   c                   s   |  I d H  t  d S )N)r   )r{   r    r    r!   raise_shutdown   s    r|   	EventTypez!Callable[[float], Awaitable[Any]])r{   sleepr'   c                   s    |   rd S |dI d H  q d S )Ng?)is_set)r{   r~   r    r    r!   !check_multiprocess_shutdown_event   s    r   )pid_pathr'   c              	   C  s*   t | d}|t   W 5 Q R X d S )Nw)openwriteosgetpid)r   file_r    r    r!   write_pid_file   s    r   tuplezOptional[Tuple[str, int]])familyaddressr'   c                 C  s0   | t jkr|S | t jkr(|d |d fS d S d S )Nr   r   )socketAF_INETAF_INET6r   r   r    r    r!   parse_socket_addr   s
    

r   c                 C  s`   | t jkr |d  d|d  S | t jkrBd|d  d|d  S | t jkrVd| S | S d S )Nr   rQ   r   [z]:zunix:)r   r   r   AF_UNIXr   r    r    r!   repr_socket_addr   s    



r   r   z	'Request')configrequestr'   c                 C  sH   t | jdkrdS d}|jD ] \}}| dkr| } q>q|| jkS )Nr   TrV   rJ   )lenZserver_namesrA   lowerdecode)r   r   rM   rG   rH   r    r    r!   valid_server_name   s    r   r   )rR   r'   c                 C  s(   t | rdS t| dr$t | jS dS )NT__call__F)inspectiscoroutinefunctionhasattrr   )rR   r    r    r!   rk      s
    

rk   );
__future__r   r   r   r   rZ   enumr   	importlibr   Zmultiprocessing.synchronizer   r}   pathlibr   typingr   r   r	   r
   r   r   r   r   r   r   r   Zapp_wrappersr   r   r   r   r   r   r   r   Zprotocol.eventsr   	Exceptionr   r"   r#   r0   r3   r6   r@   rI   rN   rj   rc   rv   rz   r|   r   r   r   r   r   rk   r    r    r    r!   <module>   sD   4
 		