a
    dtS                  
   @   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=ee1ej>f eee1ej>f  ee1 e2e2eee1ej>f  ee1 ej?d9d:d;Z@e
eAd<d=d>ZBee1 ee1 eee1 ee
 f d?d@dAZCeee1 e1df ee1 dBdCdDZDG dEdF dFZEdS )G    N)Path)
Any	AwaitableCallableDictListLiteralOptionalTupleTypeUnion)ASGIApplication)ImportFromStringErrorimport_from_string)TRACE_LOG_LEVEL)ASGI2Middleware)MessageLoggerMiddleware)ProxyHeadersMiddleware)WSGIMiddleware)autoZh11Z	httptools)r   noneZ
websocketsZwsproto)r   onoff)r   r   asyncioZ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)r+   r,   )defaultaccessr.   zlogging.StreamHandlerzext://sys.stderr)	formatterclassstreamr/   zext://sys.stdoutINFO)handlerslevel	propagater5   )Zuvicornuvicorn.erroruvicorn.access)versiondisable_existing_loggers
formattersr4   loggersLOGGING_CONFIGr7   )certfilekeyfilepasswordssl_version	cert_reqsca_certsciphersreturnc           	         sX   t |} r fddnd }|| || t ||_|rF|| |rT|| |S )Nc                      s    S N rG   r@   rG   W/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/uvicorn/config.py<lambda>x       z$create_ssl_context.<locals>.<lambda>)ssl
SSLContextload_cert_chain
VerifyModeverify_modeload_verify_locationsset_ciphers)	r>   r?   r@   rA   rB   rC   rD   ctxget_passwordrG   rH   rI   create_ssl_contextn   s    	


rU   )pathrE   c                 C   s4   z|   s|  } |  W S  ty.   Y dS 0 d S )NF)is_absoluteresolveis_dirOSError)rV   rG   rG   rI   rY      s    
rY   )patterns_listdirectories_listrE   c           
      C   sX  t ttt| }|  }t }| D ]V}|dkr8q*|| tt|r^|t| q*||D ]}t|rh|| qhq*t t|}t tt|}t tdd |}t dd |D }g }t	t
|D ]`}t	|d t
|D ]H}	|| ||	 jv r|||	  q||	 || jv r|||  qqt t|t|}t t||fS )Nz.*c                 S   s   |   S rF   )rX   )xrG   rG   rI   rJ      rK   z)resolve_reload_patterns.<locals>.<lambda>c                 S   s   h | ]}t |r|qS rG   )rY   ).0Zreload_pathrG   rG   rI   	<setcomp>   rK   z*resolve_reload_patterns.<locals>.<setcomp>r*   )listsetmapr   copycwdappendrY   globrangelenparents
difference)
r[   r\   directoriespatternsZcurrent_working_directorypatternmatchchildrenjkrG   rG   rI   resolve_reload_patterns   s6    
rr   )dirsrE   c                 C   s(   | d u rg S t | tr| gS tt| S rF   )
isinstancestrr`   ra   )rs   rG   rG   rI   _normalize_dirs   s
    
rv   c                3   @   sV  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/edee	f e	e
ee	 ee
 eeeej ef eeej ef e
e
ee ee eeeee	ejf  eeee	ef e	f  eee	e
f  eee eeeeee	 e	f  eeeee	 e	f  eeee	 e	f  ee
 eeeeeee	 e	f  e	ee
 ee
 e
e
e
ee
 eeded f  ee	 eee	ejf  ee	 e
e
ee	 e	eeee	e	f   eee
 d0ddZeed dddZ eedddZ!eedddZ"ddddZ#dddd Z$ddd!d"Z%e&j&dd#d$Z'eedd%d&Z(dS )'Config	127.0.0.1i@  Nr   i       g      4@TFg      ? i         TLSv1r   .)0app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_logr-   	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_passwordrA   ssl_cert_reqsssl_ca_certsssl_ciphersheadersfactoryh11_max_incomplete_event_sizec1           6   
   C   s  || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|pd| _|| _|| _|| _|| _| | _|!| _|"| _|#| _|$| _|%| _|&| _ |'| _!|(| _"|)| _#|*| _$|+| _%|,| _&|-| _'|.pg | _(g | _)|/| _*|0| _+d| _,| -  g | _.g | _/g | _0g | _1|sH|sH|rZ| j2sZt34d | j2rjt5|}t5|}t5|}t6||\| _0| _.t6|g \| _1| _/| j.7 }1| j/D ]N}2|1D ]B}3|2|3ks|2|3j8v rz| j.9|3 W n t:y   Y n0 qq| j1D ]}4|4| j0v r| j09|4 q| j.sN|r>t34d| t;t<= g| _.t3>dt?t@tAtB| j. |d urddlCmD}5 t3>d| |5|d	 |d u rd
t<jEv rtFt<jEd
 | _|  |d u rt<jEGdd| _Hn|| _H| jr | jdkr t34d 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')Zdotenv_pathZWEB_CONCURRENCYZFORWARDED_ALLOW_IPSrx   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   r-   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rA   r   r   r   r   encoded_headersr   r   loadedconfigure_loggingr   Zreload_dirs_excludesr   r   should_reloadloggerr   rv   rr   rc   ri   remove
ValueErrorr   osgetcwdr    sortedr`   rb   ru   Zdotenvr   environintgetr   )6selfr~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r-   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rA   r   r   r   r   r   r   Zreload_dirs_tmp	directoryZreload_directoryrm   r   rG   rG   rI   __init__   s    3







zConfig.__init__)2.03.0)rE   c                 C   s   dddd}|| j  S )Nr   r   )r   r   r   )r   )r   mappingrG   rG   rI   asgi_versionl  s
    zConfig.asgi_versionc                 C   s   t | jp| jS rF   )boolr   r   r   rG   rG   rI   is_sslu  s    zConfig.is_sslc                 C   s   t | jp| jdkS )Nr*   )r   r   r   r   rG   rG   rI   use_subprocessy  s    zConfig.use_subprocessc                 C   s  t td | jd ur t| jtrf| jdv rV| j| jd d d< | j| jd d d< t j| j n| j	drt
| j&}t|}t j| W d    n1 s0    Y  nl| j	drd	d l}t
| j&}||}t j| W d    n1 s0    Y  nt jj| jd
d | jd ur|t| jtrFt| j }n| j}t d| t d| t d| | jd
u rg t d_d
t d_d S )NTRACE)TFr;   r.   r-   r/   z.json)z.yamlz.ymlr   F)r:   r7   r8   zuvicorn.asgi)loggingaddLevelNamer   r   rt   dictr-   config
dictConfigendswithopenjsonloadyamlZ	safe_load
fileConfigr   ru   r#   	getLoggersetLevelr   r4   r6   )r   fileZloaded_configr   r   rG   rG   rI   r   }  sF    

,
.zConfig.configure_loggingc              
   C   sv  | j r
J | jrB| jsJ t| j| j| j| j| j| j| j	d| _
nd | _
dd | jD }dt|vrt| jrtdg| n|| _t| jtrtt| j }|| _n| j| _t| jtrtt| j }|| _n| j| _tt| j | _zt| j| _W n> ty, } z$td|  t !d W Y d }~n
d }~0 0 z|  | _W nD t"y } z*| j#rltd| t !d W Y d }~nd }~0 0 | j#st$d	 | j%d
kr t&'| jrt(| jd}n4t&)| jrt*+| j}nt,| jdd }t*+|}|rdnd| _%| j%dkr t-| j| _d | _n| j%dkr8t.| j| _t/ t0krRt1| j| _| j2rlt3| j| j4d| _d| _ d S )N)r?   r>   r@   rA   rB   rC   rD   c                 S   s(   g | ] \}}|  d |d fqS )latin1)lowerencode)r^   keyvaluerG   rG   rI   
<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   rU   r   r   rA   r   r   r   rL   r   r   r   r   rt   r   ru   r   r$   http_protocol_classr   r%   ws_protocol_classr&   r   Zlifespan_classr~   Z
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   excZ
use_asgi_3callrG   rG   rI   r     s    




  
zConfig.loadc                 C   s&   t t| j }|d ur"|| jd d S )N)r   )r   r'   r   r   )r   Z
loop_setuprG   rG   rI   setup_event_loop  s    zConfig.setup_event_loopc              
   C   s  | j r| j }ttjtj}z || d}t| j | W n8 tyt } z t	| t
d W Y d }~n
d }~0 0 d}d}dtj|dd d }| j g}n"| jrt| jtjtj}d	}d}	dtj|	dd d }| g}ntj}
d
}| jrd| jv rtj}
d}tj|
d}|tjtjd z|| j| jf W n: tyz } z t	| t
d W Y d }~n
d }~0 0 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)Z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   chmodrZ   r   r   r   r   clickstyler   fromfdgetsocknameAF_INETr   AF_INET6
setsockopt
SOL_SOCKETSO_REUSEADDRr   r   r    set_inheritable)r   rV   sockZ	uds_permsr   messageZsock_name_formatr   Zlogger_argsZfd_name_formatr   Zaddr_formatZprotocol_namerG   rG   rI   bind_socket  sl    

 
 
zConfig.bind_socketc                 C   s   t | jto| jS rF   )rt   r~   ru   r   r   rG   rG   rI   r   ?  s    zConfig.should_reload))__name__
__module____qualname__r=   r)   rL   	CERT_NONEr   r   ru   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   rG   rG   rG   rI   rw      s    1,U<rw   )Fr   r   r   r   logging.configr   r   rL   r   pathlibr   typingr   r   r   r   r   r   r	   r
   r   r   r   Zuvicorn._typesr   Zuvicorn.importerr   r   Zuvicorn.loggingr   Zuvicorn.middleware.asgi2r   Z!uvicorn.middleware.message_loggerr   Z uvicorn.middleware.proxy_headersr   Zuvicorn.middleware.wsgir   r
  r  r  r  r  CRITICALERRORWARNINGr3   DEBUGr#   ru   r   __annotations__r$   r%   r&   r'   r(   PROTOCOL_TLS_SERVERr)   r=   r   r   r  rM   rU   r   rY   rr   rv   rw   rG   rG   rG   rI   <module>   s   
0	!

("