o
    htS                     @   s  U d dl Z d dlZd dlZd dl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mZmZmZmZmZmZmZmZmZ d dlZd dlmZ d dl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% ed Z&ed Z'ed Z(ed Z)ed Z*ej+ej,ej-ej.ej/edZ0ee1e2f e3d< ddddZ4ee&e1f e3d< dddddZ5ee'ee1 f e3d< ddddZ6ee(e1f e3d< dddddZ7ee)ee1 f e3d < g dZ8ee* e3d!< ej9Z:e2e3d"< d#d$d%d&dd'd(d)d*d+d,d-d.d/d0d-d1d/d+d,gd2d$d3d4d2id0gd2d$d3d5d6Z;ee1ef e3d7< e<d8Z=d9ee1ej>f d:eee1ej>f  d;ee1 d<e2d=e2d>eee1ej>f  d?ee1 d@ej?fdAdBZ@dCe
d@eAfdDdEZBdFee1 dGee1 d@eee1 ee
 f fdHdIZCdJeee1 e1df d@ee1 fdKdLZDG dMdN dNZEdS )O    N)Path)
Any	AwaitableCallableDictListLiteralOptionalTupleTypeUnion)ASGIApplication)ImportFromStringErrorimport_from_string)TRACE_LOG_LEVEL)ASGI2Middleware)MessageLoggerMiddleware)ProxyHeadersMiddleware)WSGIMiddleware)autoh11	httptools)r   none
websocketswsproto)r   onoff)r   r   asynciouvloop)r   asgi3asgi2wsgi)criticalerrorwarninginfodebugtrace
LOG_LEVELSz,uvicorn.protocols.http.auto:AutoHTTPProtocolz+uvicorn.protocols.http.h11_impl:H11Protocolz7uvicorn.protocols.http.httptools_impl:HttpToolsProtocolHTTP_PROTOCOLSz8uvicorn.protocols.websockets.auto:AutoWebSocketsProtocolz>uvicorn.protocols.websockets.websockets_impl:WebSocketProtocolz4uvicorn.protocols.websockets.wsproto_impl:WSProtocolWS_PROTOCOLSzuvicorn.lifespan.on:LifespanOnz uvicorn.lifespan.off:LifespanOffLIFESPANz"uvicorn.loops.auto:auto_loop_setupz#uvicorn.loops.asyncio:asyncio_setupz!uvicorn.loops.uvloop:uvloop_setupLOOP_SETUPS
INTERFACESSSL_PROTOCOL_VERSION   Fz uvicorn.logging.DefaultFormatterz%(levelprefix)s %(message)s)()fmt
use_colorszuvicorn.logging.AccessFormatterzD%(levelprefix)s %(client_addr)s - "%(request_line)s" %(status_code)s)r0   r1   )defaultaccessr3   zlogging.StreamHandlerzext://sys.stderr)	formatterclassstreamr4   zext://sys.stdoutINFO)handlerslevel	propagater:   )uvicornuvicorn.erroruvicorn.access)versiondisable_existing_loggers
formattersr9   loggersLOGGING_CONFIGr=   certfilekeyfilepasswordssl_version	cert_reqsca_certsciphersreturnc           	         sX   t |} r fddnd }|| || t ||_|r#|| |r*|| |S )Nc                      s    S N rM   rF   rM   D/var/www/html/ai/venv/lib/python3.10/site-packages/uvicorn/config.py<lambda>x   s    z$create_ssl_context.<locals>.<lambda>)ssl
SSLContextload_cert_chain
VerifyModeverify_modeload_verify_locationsset_ciphers)	rD   rE   rF   rG   rH   rI   rJ   ctxget_passwordrM   rN   rO   create_ssl_contextn   s   
	

rZ   pathc                 C   s0   z|   s	|  } |  W S  ty   Y dS w )NF)is_absoluteresolveis_dirOSError)r[   rM   rM   rO   r^      s   
r^   patterns_listdirectories_listc           
      C   sV  t ttt| }|  }t }| D ]+}|dkrq|| tt|r/|t| q||D ]}t|r?|| q4qt t|}t tt|}t tdd |}t dd |D }g }t	t
|D ]/}t	|d t
|D ]#}	|| ||	 jv r|||	  qs||	 || jv r|||  qsqht t|t|}t t||fS )Nz.*c                 S   s   |   S rL   )r]   )xrM   rM   rO   rP      s    z)resolve_reload_patterns.<locals>.<lambda>c                 S   s   h | ]}t |r|qS rM   )r^   ).0reload_pathrM   rM   rO   	<setcomp>   s    z*resolve_reload_patterns.<locals>.<setcomp>r/   )listsetmapr   copycwdappendr^   globrangelenparents
difference)
r`   ra   directoriespatternscurrent_working_directorypatternmatchchildrenjkrM   rM   rO   resolve_reload_patterns   s>   

ry   dirsc                 C   s(   | d u rg S t | tr| gS tt| S rL   )
isinstancestrrf   rg   )rz   rM   rM   rO   _normalize_dirs   s
   
r}   c                b   @   s  e Zd Zddddddddddddddeddddd	dd
ddddddddddddddddddeejdddd	df/dedee	f de	de
dee	 dee
 dedeeej ef deeej ef de
de
dee dee dededeee	ejf  d eeee	ef e	f  d!eee	e
f  d"ed#ee d$ed%ed&eeee	 e	f  d'ed(eeee	 e	f  d)eeee	 e	f  d*ee
 d+ed,ed-ed.eeee	 e	f  d/e	d0ee
 d1ee
 d2e
d3e
d4e
d5ee
 d6eed7ed f  d8ee	 d9eee	ejf  d:ee	 d;e
d<e
d=ee	 d>e	d?eeee	e	f   d@edAee
 f`dBdCZedDedE fdFdGZ edDefdHdIZ!edDefdJdKZ"dVdLdMZ#dVdNdOZ$dVdPdQZ%dDe&j&fdRdSZ'edDefdTdUZ(dS )WConfig	127.0.0.1i@  Nr   i       g      4@TFg      ? i         TLSv1appr   hostportudsfdloophttpwsws_max_sizews_max_queuews_ping_intervalws_ping_timeoutws_per_message_deflatelifespanenv_file
log_config	log_level
access_logr2   	interfacereloadreload_dirsreload_delayreload_includesreload_excludesworkersproxy_headersserver_headerdate_headerforwarded_allow_ips	root_pathlimit_concurrencylimit_max_requestsbacklogtimeout_keep_alivetimeout_notifytimeout_graceful_shutdowncallback_notify.ssl_keyfilessl_certfilessl_keyfile_passwordrG   ssl_cert_reqsssl_ca_certsssl_ciphersheadersfactoryh11_max_incomplete_event_sizec1           6   
   C   s  || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|pBd| _|| _|| _|| _|| _| | _|!| _|"| _|#| _|$| _|%| _|&| _ |'| _!|(| _"|)| _#|*| _$|+| _%|,| _&|-| _'|.p}g | _(g | _)|/| _*|0| _+d| _,| -  g | _.g | _/g | _0g | _1|s|s|r| j2st34d | j2r+t5|}t5|}t5|}t6||\| _0| _.t6|g \| _1| _/| j.7 }1| j/D ]"}2|1D ]}3|2|3ks|2|3j8v rz| j.9|3 W q t:y   Y qw qq| j1D ]}4|4| j0v r| j09|4 q| j.s|rt34d| t;t<= g| _.t3>dt?t@tAtB| j. |d urAddlCmD}5 t3>d| |5|d	 |d u rTd
t<jEv rTtFt<jEd
 | _|  |d u rdt<jEGdd| _Hn|| _H| jrx| jdkrzt34d d S d S d S )Nr/   FzcCurrent configuration will not reload as not all conditions are met, please refer to documentation.zeProvided reload directories %s did not contain valid directories, watching current working directory.z/Will watch for changes in these directories: %sr   )load_dotenvzLoading environment from '%s')dotenv_pathWEB_CONCURRENCYFORWARDED_ALLOW_IPSr   z4"workers" flag is ignored when reloading is enabled.)Ir   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rG   r   r   r   r   encoded_headersr   r   loadedconfigure_loggingr   reload_dirs_excludesr   r   should_reloadloggerr$   r}   ry   ri   ro   remove
ValueErrorr   osgetcwdr%   sortedrf   rh   r|   dotenvr   environintgetr   )6selfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rG   r   r   r   r   r   r   reload_dirs_tmp	directoryreload_directoryrt   r   rM   rM   rO   __init__   s   3









zConfig.__init__rK   )2.03.0c                 C   s   dddd}|| j  S )Nr   r   )r    r   r!   )r   )r   mappingrM   rM   rO   asgi_versionl  s
   
zConfig.asgi_versionc                 C   s   t | jp| jS rL   )boolr   r   r   rM   rM   rO   is_sslu  s   zConfig.is_sslc                 C   s   t | jp| jdkS )Nr/   )r   r   r   r   rM   rM   rO   use_subprocessy  s   zConfig.use_subprocessc                 C   s  t td | jd urt| jtr2| jdv r*| j| jd d d< | j| jd d d< t j| j n[| j	drYt
| j}t|}t j| W d    n1 sSw   Y  n4| j	drd	d l}t
| j}||}t j| W d    n1 s~w   Y  n	t jj| jd
d | jd urt| jtrt| j }n| j}t d| t d| t d| | jd
u rg t d_d
t d_d S d S )NTRACE)TFrA   r3   r2   r4   z.json)z.yamlz.ymlr   F)r@   r=   r>   zuvicorn.asgi)loggingaddLevelNamer   r   r{   dictr2   config
dictConfigendswithopenjsonloadyaml	safe_load
fileConfigr   r|   r(   	getLoggersetLevelr   r9   r;   )r   fileloaded_configr   r   rM   rM   rO   r   }  sP   





zConfig.configure_loggingc              
   C   sf  | j rJ | jr!| jsJ t| j| j| j| j| j| j| j	d| _
nd | _
dd | jD }dt|vr:| jr:dg| n|| _t| jtrNtt| j }|| _n| j| _t| jtrctt| j }|| _n| j| _tt| j | _zt| j| _W n ty } ztd|  t !d W Y d }~nd }~ww z|  | _W n  t"y } z| j#rtd| t !d W Y d }~nd }~ww | j#st$d	 | j%d
krt&'| jrt(| jd}nt&)| jrt*+| j}nt,| jdd }t*+|}|rdnd| _%| j%dkrt-| j| _d | _n| j%dkrt.| j| _t/ t0kr!t1| j| _| j2r.t3| j| j4d| _d| _ d S )N)rE   rD   rF   rG   rH   rI   rJ   c                 S   s(   g | ]\}}|  d |d fqS )latin1)lowerencode)rc   keyvaluerM   rM   rO   
<listcomp>  s    zConfig.load.<locals>.<listcomp>   server)r   s   uvicornzError loading ASGI app. %sr/   z"Error loading ASGI app factory: %sz_ASGI app factory detected. Using it, but please consider setting the --factory flag explicitly.r   	__await____call__r   r    r!   )trusted_hostsT)5r   r   r   rZ   r   r   rG   r   r   r   rQ   r   r   r   r   r{   r   r|   r   r)   http_protocol_classr   r*   ws_protocol_classr+   r   lifespan_classr   
loaded_appr   r   r#   sysexit	TypeErrorr   r$   r   inspectisclasshasattr
isfunctionr   iscoroutinefunctiongetattrr   r   getEffectiveLevelr   r   r   r   r   )r   r   r   r   exc
use_asgi_3callrM   rM   rO   r     s   








zConfig.loadc                 C   s*   t t| j }|d ur|| jd d S d S )N)r   )r   r,   r   r   )r   
loop_setuprM   rM   rO   setup_event_loop  s   zConfig.setup_event_loopc              
   C   s  | j rO| j }ttjtj}z|| d}t| j | W n ty: } zt	| t
d W Y d }~nd }~ww d}d}dtj|dd d }| j g}n| jrqt| jtjtj}d	}d}	dtj|	dd d }| g}nktj}
d
}| jrd| jv rtj}
d}tj|
d}|tjtjd z|| j| jf W n ty } zt	| t
d W Y d }~nd }~ww d| d}dtj|dd d }| jrdnd}|| j| d g}tj|g|R dd|ii |d |S )Ni  r/   z8Uvicorn running on unix socket %s (Press CTRL+C to quit)z%szUvicorn running on T)boldz (Press CTRL+C to quit)z3Uvicorn running on socket %s (Press CTRL+C to quit)z
%s://%s:%d:z%s://[%s]:%d)familyhttpsr   extracolor_message)r   socketAF_UNIXSOCK_STREAMbindr   chmodr_   r   r#   r   r   clickstyler   fromfdgetsocknameAF_INETr   AF_INET6
setsockopt
SOL_SOCKETSO_REUSEADDRr   r   r%   set_inheritable)r   r[   sock	uds_permsr   messagesock_name_formatr  logger_argsfd_name_formatr  addr_formatprotocol_namerM   rM   rO   bind_socket  st   




zConfig.bind_socketc                 C   s   t | jto| jS rL   )r{   r   r|   r   r   rM   rM   rO   r   ?  s   zConfig.should_reload)rK   N))__name__
__module____qualname__rC   r.   rQ   	CERT_NONEr   r   r|   r   r	   LoopSetupTyper   r   ProtocolHTTPProtocolTypeWSProtocolTypefloatr   LifespanTyper   PathLiker   r   InterfaceTyper   r   r
   r   propertyr   r   r   r   r   r   r   r  r  r   rM   rM   rM   rO   r~      s<   	
 !"#$%&'()*+,-./01
 1

,
U<r~   )Fr   r   r   r   logging.configr   r  rQ   r   pathlibr   typingr   r   r   r   r   r   r	   r
   r   r   r  uvicorn._typesr   uvicorn.importerr   r   uvicorn.loggingr   uvicorn.middleware.asgi2r   !uvicorn.middleware.message_loggerr    uvicorn.middleware.proxy_headersr   uvicorn.middleware.wsgir   r%  r&  r(  r#  r*  CRITICALERRORWARNINGr8   DEBUGr(   r|   r   __annotations__r)   r*   r+   r,   r-   PROTOCOL_TLS_SERVERr.   rC   r   r   r)  rR   rZ   r   r^   ry   r}   r~   rM   rM   rM   rO   <module>   s   
 0	
!
	
$(