o
    ȝiU                  
   @  sd  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 d dlmZmZmZmZ d dlZd dlm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j0ej1edZ2de3d< ddddZ4de3d< ddddddZ5d e3d!< d"d"d#dZ6de3d$< dd%d&d'dZ7d e3d(< g dZ8d)e3d*< e	j9Z:d+e3d,< d-d.d/d0dd1d2d3d4d5d6d7d8d9d:d7d;d9d5d6gd<d.d=d>d<id:gd<d.d=d?d@Z;dAe3dB< e<dCZ=dcdPdQZ>dddUdVZ?ded[d\Z@dfd_d`ZAG dadb dbZBdS )g    )annotationsN)	Awaitable)RawConfigParser)Path)IOAnyCallableLiteral)iscoroutinefunction)ASGIApplication)ImportFromStringErrorimport_from_string)TRACE_LOG_LEVEL)ASGI2Middleware)MessageLoggerMiddleware)ProxyHeadersMiddleware)WSGIMiddleware)autoh11	httptools)r   none
websocketszwebsockets-sansio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[str, str]HTTP_PROTOCOLSz8uvicorn.protocols.websockets.auto:AutoWebSocketsProtocolz>uvicorn.protocols.websockets.websockets_impl:WebSocketProtocolzLuvicorn.protocols.websockets.websockets_sansio_impl:WebSocketsSansIOProtocolz4uvicorn.protocols.websockets.wsproto_impl:WSProtocolzdict[str, str | None]WS_PROTOCOLSzuvicorn.lifespan.on:LifespanOnz uvicorn.lifespan.off:LifespanOffLIFESPANz$uvicorn.loops.auto:auto_loop_factoryz*uvicorn.loops.asyncio:asyncio_loop_factoryz(uvicorn.loops.uvloop:uvloop_loop_factoryLOOP_FACTORIESz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/   r0   )defaultaccessr2   zlogging.StreamHandlerzext://sys.stderr)	formatterclassstreamr3   zext://sys.stdoutINFO)handlerslevel	propagater9   )uvicornuvicorn.erroruvicorn.access)versiondisable_existing_loggers
formattersr8   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 rP   rG   rP   J/var/www/html/ocr-read/venv/lib/python3.10/site-packages/uvicorn/config.py<lambda>s   s    z$create_ssl_context.<locals>.<lambda>)ssl
SSLContextload_cert_chain
VerifyModeverify_modeload_verify_locationsset_ciphers)	rC   rE   rG   rI   rJ   rK   rL   ctxget_passwordrP   rQ   rR   create_ssl_contexti   s   
	

r]   pathr   boolc                 C  s0   z|   s	|  } |  W S  ty   Y dS w )NF)is_absoluteresolveis_dirOSError)r^   rP   rP   rR   rb   }   s   
rb   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 rO   )ra   )xrP   rP   rR   rS      s    z)resolve_reload_patterns.<locals>.<lambda>c                 S  s   h | ]}t |r|qS rP   )rb   ).0reload_pathrP   rP   rR   	<setcomp>   s    z*resolve_reload_patterns.<locals>.<setcomp>r.   )listsetmapr   copycwdappendrb   globrangelenparents
difference)
rd   rf   directoriespatternscurrent_working_directorypatternmatchchildrenjkrP   rP   rR   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 rO   )
isinstancestrrl   rm   )r   rP   rP   rR   _normalize_dirs   s
   
r   c                0   @  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deejdddd	df0dndUdVZedodYdZZ	edpd[d\Z
edpd]d^Zdqd`daZdqdbdcZdqdddeZdrdgdhZdsdjdkZedpdldmZdS )tConfig	127.0.0.1i@  Nr   i       g      4@TFg      ? i         TLSv1app*ASGIApplication | Callable[..., Any] | strhostr   portr,   udsrH   fd
int | NoneloopLoopFactoryType | strhttp/type[asyncio.Protocol] | HTTPProtocolType | strws-type[asyncio.Protocol] | WSProtocolType | strws_max_sizews_max_queuews_ping_intervalfloat | Nonews_ping_timeoutws_per_message_deflater_   lifespanLifespanTypeenv_filerF   
log_config7dict[str, Any] | str | RawConfigParser | IO[Any] | None	log_levelstr | int | None
access_logr1   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timeout_worker_healthcheckcallback_notify%Callable[..., Awaitable[None]] | Nonessl_keyfilessl_certfilessl_keyfile_passwordrI   ssl_cert_reqsssl_ca_certsssl_ciphersheaderslist[tuple[str, str]] | Nonefactoryh11_max_incomplete_event_sizec2           7   
   C  s  || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|pBd| _|| _|| _|| _|| _| | _|!| _|"| _|#| _|$| _|%| _|&| _ |'| _!|(| _"|)| _#|*| _$|+| _%|,| _&|-| _'|.| _(|/pg | _)g | _*|0| _+|1| _,d| _-| .  g | _/g | _0g | _1g | _2|s|s|r| j3st45d | j3r,t6|}t6|}t6|}t7||\| _1| _/t7|g \| _2| _0| j/8 }2| j0D ]"}3|2D ]}4|3|4ks|3|4j9v rz| j/:|4 W q t;y   Y qw qq| j2D ]}5|5| j1v r
| j1:|5 q| j/s|rt45d| t<= g| _/t4>dt?t@tAtB| j/ |d urBddlCmD}6 t4>d| |6|d	 |d u rUd
tEjFv rUtGtEjFd
 | _|  |d u retEjFHdd| _In|| _I| jry| jdkr{t45d 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.)Jr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rI   r   r   r   r   encoded_headersr   r   loadedconfigure_loggingr   reload_dirs_excludesr   r   should_reloadloggerr"   r   r   ro   ru   remove
ValueErrorr   rp   r#   sortedrl   rn   r   dotenvr   osenvironr,   getr   )7selfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rI   r   r   r   r   r   r   reload_dirs_tmp	directoryreload_directoryrz   r   rP   rP   rR   __init__   s   4







zConfig.__init__rM   Literal['2.0', '3.0']c                 C  s   dddd}|| j  S )Nz2.0z3.0)r   r   r   )r   )r   mappingrP   rP   rR   asgi_versionY  s
   
zConfig.asgi_versionc                 C  s   t | jp| jS rO   )r_   r   r   r   rP   rP   rR   is_sslb  s   zConfig.is_sslc                 C  s   t | jp| jdkS )Nr.   )r_   r   r   r   rP   rP   rR   use_subprocessf  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@   r2   r1   r3   z.json)z.yamlz.ymlr   F)r?   r<   r=   zuvicorn.asgi)loggingaddLevelNamer   r   r   dictr1   config
dictConfigr   endswithopenjsonloadyaml	safe_load
fileConfigr   r&   	getLoggersetLevelr   r8   r:   )r   fileloaded_configr   r   rP   rP   rR   r   j  s@   





zConfig.configure_loggingc              
   C  sn  | 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rQtt| j| j}|| _n| j| _t| jtritt| j| 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r2t3| j| j4d| _d| _ d S )N)rE   rC   rG   rI   rJ   rK   rL   c                 S  s(   g | ]\}}|  d |d fqS )latin1)lowerencode)ri   keyvaluerP   rP   rR   
<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   rI   r   r   r   rT   r   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
   getattrr   r   getEffectiveLevelr   r   r   r   r   )r   r   r  r  exc
use_asgi_3callrP   rP   rR   r     s   







zConfig.loadc                 C  s   t d)Na  The `setup_event_loop` method was replaced by `get_loop_factory` in uvicorn 0.36.0.
None of those methods are supposed to be used directly. If you are doing it, please let me know here: https://github.com/Kludex/uvicorn/discussions/2706. Thank you, and sorry for the inconvenience.)AttributeErrorr   rP   rP   rR   setup_event_loop  s   zConfig.setup_event_loop.Callable[[], asyncio.AbstractEventLoop] | Nonec              
   C  s|   | j tv rtt| j  }n%zt| j W S  ty1 } ztd|  td W Y d }~nd }~ww |d u r8d S || jdS )Nz,Error loading custom loop setup function. %sr.   )r   )	r   r*   r   r   r   r!   r  r  r   )r   loop_factoryr  rP   rP   rR   get_loop_factory  s   
zConfig.get_loop_factory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   chmodrc   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_namerP   rP   rR   bind_socket  sV   




zConfig.bind_socketc                 C  s   t | jto| jS rO   )r   r   r   r   r   rP   rP   rR   r   #  s   zConfig.should_reload)br   r   r   r   r   r,   r   rH   r   r   r   r   r   r   r   r   r   r,   r   r,   r   r   r   r   r   r_   r   r   r   rF   r   r   r   r   r   r_   r1   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   r   r   rF   r   rF   r   rH   rI   r,   r   r,   r   rF   r   r   r   r   r   r_   r   r   )rM   r   )rM   r_   )rM   r   )rM   r  )rM   r  )__name__
__module____qualname__rB   r-   rT   	CERT_NONEr   propertyr   r   r   r   r   r  r  r4  r   rP   rP   rP   rR   r      s     '

&
O

0r   )rC   rD   rE   rF   rG   rH   rI   r,   rJ   r,   rK   rF   rL   rH   rM   rN   )r^   r   rM   r_   )rd   re   rf   re   rM   rg   )r   r   rM   re   )C
__future__r   r   r  r   r   logging.configr   r  rT   r  collections.abcr   configparserr   pathlibr   typingr   r   r   r	   r"  uvicorn._compatr
   uvicorn._typesr   uvicorn.importerr   r   uvicorn.loggingr   uvicorn.middleware.asgi2r   !uvicorn.middleware.message_loggerr    uvicorn.middleware.proxy_headersr   uvicorn.middleware.wsgir   HTTPProtocolTypeWSProtocolTyper   LoopFactoryTyper   CRITICALERRORWARNINGr7   DEBUGr&   __annotations__r'   r(   r)   r*   r+   PROTOCOL_TLS_SERVERr-   rB   r   r   r]   rb   r   r   r   rP   rP   rP   rR   <module>   s    	
!


	
$