o
    ]~#gqQ                  
   @  sN  U 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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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Z/de0d< ddddZ1de0d< dddddZ2de0d< ddd dZ3d!e0d"< dd#d$d%dZ4d&e0d'< g dZ5d(e0d)< e	j6Z7d*e0d+< d,d-d.d/dd0d1d2d3d4d5d6d7d8d9d6d:d8d4d5gd;d-d<d=d;id9gd;d-d<d>d?Z8d@e0dA< e9dBZ:dbdOdPZ;dcdTdUZ<dddZd[Z=ded^d_Z>G d`da daZ?dS )f    )annotationsN)RawConfigParser)Path)IOAny	AwaitableCallableLiteral)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tracezdict[str, int]
LOG_LEVELSz,uvicorn.protocols.http.auto:AutoHTTPProtocolz+uvicorn.protocols.http.h11_impl:H11Protocolz7uvicorn.protocols.http.httptools_impl:HttpToolsProtocolzdict[HTTPProtocolType, str]HTTP_PROTOCOLSz8uvicorn.protocols.websockets.auto:AutoWebSocketsProtocolz>uvicorn.protocols.websockets.websockets_impl:WebSocketProtocolz4uvicorn.protocols.websockets.wsproto_impl:WSProtocolz dict[WSProtocolType, str | None]WS_PROTOCOLSzuvicorn.lifespan.on:LifespanOnz uvicorn.lifespan.off:LifespanOffzdict[LifespanType, str]LIFESPANz"uvicorn.loops.auto:auto_loop_setupz#uvicorn.loops.asyncio:asyncio_setupz!uvicorn.loops.uvloop:uvloop_setupzdict[LoopSetupType, str | None]LOOP_SETUPSzlist[InterfaceType]
INTERFACESint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accessr1   zlogging.StreamHandlerzext://sys.stderr)	formatterclassstreamr2   zext://sys.stdoutINFO)handlerslevel	propagater8   )uvicornuvicorn.erroruvicorn.access)versiondisable_existing_loggers
formattersr7   loggerszdict[str, Any]LOGGING_CONFIGr;   certfilestr | os.PathLike[str]keyfilestr | os.PathLike[str] | Nonepassword
str | Nonessl_version	cert_reqsca_certsciphersreturnssl.SSLContextc           	        sX   t |} r fddnd }|| || t ||_|r#|| |r*|| |S )Nc                     s    S N rO   rF   rO   s/var/www/static.ux5.de/https/Moving-Object-Detection-with-OpenCV/env/lib/python3.10/site-packages/uvicorn/config.py<lambda>p   s    z$create_ssl_context.<locals>.<lambda>)ssl
SSLContextload_cert_chain
VerifyModeverify_modeload_verify_locationsset_ciphers)	rB   rD   rF   rH   rI   rJ   rK   ctxget_passwordrO   rP   rQ   create_ssl_contextf   s   
	

r\   pathr   boolc                 C  s0   z|   s	|  } |  W S  ty   Y dS w )NF)is_absoluteresolveis_dirOSError)r]   rO   rO   rQ   ra   z   s   
ra   patterns_list	list[str]directories_listtuple[list[str], list[Path]]c           
      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 rN   )r`   )xrO   rO   rQ   rR      s    z)resolve_reload_patterns.<locals>.<lambda>c                 S  s   h | ]}t |r|qS rO   )ra   ).0reload_pathrO   rO   rQ   	<setcomp>   s    z*resolve_reload_patterns.<locals>.<setcomp>r-   )listsetmapr   copycwdappendra   globrangelenparents
difference)
rc   re   directoriespatternscurrent_working_directorypatternmatchchildrenjkrO   rO   rQ   resolve_reload_patterns   s:   

r~   dirslist[str] | str | Nonec                 C  s(   | d u rg S t | tr| gS tt| S rN   )
isinstancestrrk   rl   )r   rO   rO   rQ   _normalize_dirs   s
   
r   c                /   @  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/djdTdUZedkdXdYZ	edldZd[Z
edld\d]Zdmd_d`ZdmdadbZdmdcddZdndfdgZedldhdiZdS )oConfig	127.0.0.1i@  Nr   i       g      4@TFg      ? i         TLSv1app*ASGIApplication | Callable[..., Any] | strhostr   portr+   udsrG   fd
int | NoneloopLoopSetupTypehttp)type[asyncio.Protocol] | HTTPProtocolTypews'type[asyncio.Protocol] | WSProtocolTypews_max_sizews_max_queuews_ping_intervalfloat | Nonews_ping_timeoutws_per_message_deflater^   lifespanLifespanTypeenv_filerE   
log_config7dict[str, Any] | str | RawConfigParser | IO[Any] | None	log_levelstr | int | None
access_logr0   bool | None	interfaceInterfaceTypereloadreload_dirsr   reload_delayfloat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%Callable[..., Awaitable[None]] | Nonessl_keyfilessl_certfilessl_keyfile_passwordrH   ssl_cert_reqsssl_ca_certsssl_ciphersheaderslist[tuple[str, str]] | None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   r0   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rH   r   r   r   r   encoded_headersr   r   loadedconfigure_loggingr   reload_dirs_excludesr   r   should_reloadloggerr!   r   r~   rn   rt   remove
ValueErrorr   osgetcwdr"   sortedrk   rm   r   dotenvr   environr+   getr   )6selfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r0   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rH   r   r   r   r   r   r   reload_dirs_tmp	directoryreload_directoryry   r   rO   rO   rQ   __init__   s   3







zConfig.__init__rL   Literal['2.0', '3.0']c                 C  s   dddd}|| j  S )Nz2.0z3.0)r   r   r   )r   )r   mappingrO   rO   rQ   asgi_versionT  s
   
zConfig.asgi_versionc                 C  s   t | jp| jS rN   )r^   r   r   r   rO   rO   rQ   is_ssl]  s   zConfig.is_sslc                 C  s   t | jp| jdkS )Nr-   )r^   r   r   r   rO   rO   rQ   use_subprocessa  s   zConfig.use_subprocessNonec                 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 ngt| jt	r_| j
dr_t| j}t|}t j| W d    n1 sYw   Y  n:t| jt	r| j
drd	d l}t| j}||}t j| W d    n1 sw   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)TFr?   r1   r0   r2   z.json)z.yamlz.ymlr   F)r>   r;   r<   zuvicorn.asgi)loggingaddLevelNamer   r   r   dictr0   config
dictConfigr   endswithopenjsonloadyaml	safe_load
fileConfigr   r%   	getLoggersetLevelr   r7   r9   )r   fileloaded_configr   r   rO   rO   rQ   r   e  s@   





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)rD   rB   rF   rH   rI   rJ   rK   c                 S  s(   g | ]\}}|  d |d fqS )latin1)lowerencode)rh   keyvaluerO   rO   rQ   
<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   r\   r   r   rH   r   r   r   rS   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callrO   rO   rQ   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_setuprO   rO   rQ   setup_event_loop  s   zConfig.setup_event_loopsocket.socketc              
   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   chmodrb   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_namerO   rO   rQ   bind_socket  sV   




zConfig.bind_socketc                 C  s   t | jto| jS rN   )r   r   r   r   r   rO   rO   rQ   r     s   zConfig.should_reload)`r   r   r   r   r   r+   r   rG   r   r   r   r   r   r   r   r   r   r+   r   r+   r   r   r   r   r   r^   r   r   r   rE   r   r   r   r   r   r^   r0   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   rE   r   rE   r   rG   rH   r+   r   r+   r   rG   r   r   r   r   r   r^   r   r   )rL   r   )rL   r^   )rL   r   )rL   r  )__name__
__module____qualname__rA   r,   rS   	CERT_NONEr   propertyr   r   r   r   r   r  r1  r   rO   rO   rO   rQ   r      s|     %

&
O
0r   )rB   rC   rD   rE   rF   rG   rH   r+   rI   r+   rJ   rE   rK   rG   rL   rM   )r]   r   rL   r^   )rc   rd   re   rd   rL   rf   )r   r   rL   rd   )@
__future__r   r   r  r   r   logging.configr   r  rS   r  configparserr   pathlibr   typingr   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   HTTPProtocolTypeWSProtocolTyper   r   r   CRITICALERRORWARNINGr6   DEBUGr%   __annotations__r&   r'   r(   r)   r*   PROTOCOL_TLS_SERVERr,   rA   r   r   r\   ra   r~   r   r   rO   rO   rO   rQ   <module>   s    	
!


	
$