o
    j_                  
   @  s~  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mZ d dlmZ d dlmZ d dlmZmZmZ d dlm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( G dd de)Z*ed Z+ed Z,ed Z-ed Z.ed Z/ej0ej1ej2ej3ej4e dZ5de6d< dddddZ7de6d< d dd!d"d#dZ8d$e6d%< d&d&d'dZ9de6d(< dd)d*d+dZ:d$e6d,< g dZ;d-e6d.< e	j<Z=d/e6d0< d1Z>d2d3d4d5dd6d7d8d9d:d;d<d=d>d?d<d@d>d:d;gdAd3dBdCdAid?gdAd3dBdDdEZ?dFe6dG< e@dHZAdhdUdVZBdidZd[ZCdjd`daZDdkdddeZEG dfdg dgZFdS )l    )annotationsN)	AwaitableCallable)RawConfigParser)Path)IOAnyLiteral)style)iscoroutinefunction)ASGIApplication)ImportFromStringErrorimport_from_string)TRACE_LOG_LEVEL)ASGI2Middleware)MessageLoggerMiddleware)ProxyHeadersMiddleware)WSGIMiddlewarec                   @  s   e Zd ZdZdS )UvicornDeprecationWarninga]  A custom deprecation warning for Uvicorn.

    Unlike the built-in DeprecationWarning, this inherits from UserWarning to ensure it is visible by default, helping
    users discover deprecated features without needing to enable warnings explicitly.

    Reference: https://sethmlarson.dev/deprecations-via-warnings-dont-work-for-python-libraries
    N)__name__
__module____qualname____doc__ r   r   L/home/djax/ivt_ai_plugin/venv/lib/python3.10/site-packages/uvicorn/config.pyr      s    r   )autoh11	httptoolszttp)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-uvicorn.protocols.http.zttp_impl:ZttpProtocolz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)r9   r:   )defaultaccessr<   zlogging.StreamHandlerzext://sys.stderr)	formatterclassstreamr=   zext://sys.stdoutINFO)handlerslevel	propagaterC   )uvicornuvicorn.erroruvicorn.access)versiondisable_existing_loggers
formattersrB   loggerszdict[str, Any]LOGGING_CONFIGrF   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 Nr   r   rQ   r   r   <lambda>   s    z$create_ssl_context.<locals>.<lambda>)ssl
SSLContextload_cert_chain
VerifyModeverify_modeload_verify_locationsset_ciphers)	rM   rO   rQ   rS   rT   rU   rV   ctxget_passwordr   rZ   r   create_ssl_contextv   s   
	

re   pathr   boolc                 C  s0   z|   s	|  } |  W S  ty   Y dS w )NF)is_absoluteresolveis_dirOSError)rf   r   r   r   rj      s   
rj   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 rY   )ri   )xr   r   r   r[      s    z)resolve_reload_patterns.<locals>.<lambda>c                 S  s   h | ]}t |r|qS r   )rj   ).0reload_pathr   r   r   	<setcomp>   s    z*resolve_reload_patterns.<locals>.<setcomp>r8   )listsetmapr   copycwdappendrj   globrangelenparents
difference)
rl   rn   directoriespatternscurrent_working_directorypatternmatchchildrenjkr   r   r   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 rY   )
isinstancestrrt   ru   )r   r   r   r   _normalize_dirs   s
   
r   c                3   @  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deejddddd	dd	f3dudYdZZedvd]d^Z	edwd_d`Z
edwdadbZdxdddeZdydgdhZdxdidjZdxdkdlZdzdndoZd{dqdrZedwdsdtZdS )|Config	127.0.0.1i@  Nr   i       g      4@TFg      ? r   i         app*ASGIApplication | Callable[..., Any] | strhostr   portr5   udsrR   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_deflaterg   lifespanLifespanTypeenv_filerP   
log_configJdict[str, Any] | str | os.PathLike[str] | RawConfigParser | IO[Any] | None	log_levelstr | int | None
access_logr;   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limit_max_requests_jitterbacklogtimeout_keep_alivetimeout_notifytimeout_graceful_shutdowntimeout_worker_healthcheckcallback_notify%Callable[..., Awaitable[None]] | Nonessl_keyfilessl_certfilessl_keyfile_passwordrS   ssl_cert_reqsssl_ca_certsssl_ciphersssl_context_factoryGCallable[[Config, Callable[[], ssl.SSLContext]], ssl.SSLContext] | Noneheaderslist[tuple[str, str]] | Nonefactoryh11_max_incomplete_event_sizereset_contextvarsc5           :   
   C  s  || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|pBd| _|| _|| _|| _|| _| | _|!| _|"| _|#| _|$| _|%| _|&| _ |'| _!|(| _"|)| _#|*| _$|+| _%|,| _&|-| _'|.| _(|/| _)|0| _*|1pg | _+g | _,|2| _-|3| _.|4| _/d| _0| 1  g | _2g | _3g | _4g | _5|s|s|r| j6st78d | j6r8t9|}t9|}t9|}t:||\| _4| _2t:|g \| _5| _3| j2; }5| j3D ]$}6|5D ]}7|6|7ks|6|7j<v rz| j2=|7 W q t>y   Y qw qq| j5D ]}8|8| j4v r| j4=|8 q| j2s*|r$t78d| t?@ g| _2t7AdtBtCtDtE| j2 |d urNddlFmG}9 t7Ad| |9|d	 |d u rad
tHjIv ratJtHjId
 | _|  |d u rqtHjIKdd| _Ln|| _L| jr| jdkrt78d d S d S d S )Nr8   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.)Mr   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   rS   r   r   r   r   r   encoded_headersr   r   r   loadedconfigure_loggingr   reload_dirs_excludesr   r   should_reloadloggerr+   r   r   rw   r}   remove
ValueErrorr   rx   r,   sortedrt   rv   r   dotenvr   osenvironr5   getr   ):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   r   r   rS   r   r   r   r   r   r   r   r   reload_dirs_tmp	directoryreload_directoryr   r   r   r   r   __init__   s   7







zConfig.__init__rW   Literal['2.0', '3.0']c                 C  s   dddd}|| j  S )Nz2.0z3.0)r'   r&   r(   )r   )r   mappingr   r   r   asgi_versionl  s
   
zConfig.asgi_versionc                 C  s   t | jp	| jp	| jS rY   )rg   r   r   r   r   r   r   r   is_sslu  s   zConfig.is_sslc                 C  s   t | jp| jdkS )Nr8   )rg   r   r   r   r   r   r   use_subprocessy  s   zConfig.use_subprocessNonec              
   C  s  t td | jd urt| jtjrt| j| _t| jtr@| j	dv r8| j	| jd d d< | j	| jd d d< t j
| j n{t| jtrm| jdrmt| j}t|}t j
| W d    n1 sgw   Y  nNt| jtr| jdrzd	d l}W n ty } ztd
|d }~ww 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)TFrJ   r<   r;   r=   z.json)z.yamlz.ymlr   zVInstall the PyYAML package or uvicorn[standard] to use `--log-config` with YAML files.F)rI   rF   rG   zuvicorn.asgi)loggingaddLevelNamer   r   r   r   PathLikefspathdictr;   config
dictConfigr   endswithopenjsonloadyamlImportError	safe_load
fileConfigr   r/   lower	getLoggersetLevelr   rB   rD   )r   fileloaded_configr   er   r   r   r   r   }  sV   





zConfig.configure_loggingr   c              
   C  sL   zt | jW S  ty% } ztd|  tt W Y d}~dS d}~ww )z/Import the app and return it. Exits on failure.zError loading ASGI app. %sN)r   r   r   r   r*   sysexitSTARTUP_FAILURE)r   excr   r   r   load_app  s   zConfig.load_appc           	   
     sx   j rJ  jd ur+d fdd}  |}t|tjs'tdt|j | _n jrG j	s3J 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rwtt j j}| _n j _t jtrtt j j}| _n j _tt j  _  !  _"z "  _"W n  ty } z j#rt$%d| t&'t( W Y d }~nd }~ww  j#st$)d  j*dkrt+, j"rt- j"d}nt+. j"rt/ j"}nt0 j"dd }t/|}|rdnd _* j*dkrt1 j" _"d  _n j*dkrt2 j" _"t$3 t4kr*t5 j" _" j6r7t7 j" j8d _"d _ d S )NrW   rX   c                	     s2    j stdt j j  j j j j jdS )Nz`default_ssl_context_factory()` requires `ssl_certfile` to be set on `Config`. Either pass `ssl_certfile` (and optionally `ssl_keyfile`) or build the `SSLContext` directly inside `ssl_context_factory` without calling the default factory.rO   rM   rQ   rS   rT   rU   rV   )	r   RuntimeErrorre   r   r   rS   r   r   r   r   r   r   r   default_factory  s   z$Config.load.<locals>.default_factoryz;`ssl_context_factory` must return an `ssl.SSLContext`, got r  c                 S  s(   g | ]\}}|  d |d fqS )latin1)r  encode)rq   keyvaluer   r   r   
<listcomp>  s   ( zConfig.load.<locals>.<listcomp>   server)r  s   uvicornz"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)rW   rX   )9r   r   r   r\   r]   	TypeErrortyper   r   r   re   r   r   rS   r   r   r   r   r   r   r   r   r   r   r0   r   http_protocol_classr   r1   ws_protocol_classr2   r   lifespan_classr  
loaded_appr   r   r*   r  r  r	  r+   r   inspectisclasshasattr
isfunctionr   getattrr   r   getEffectiveLevelr   r   r   r   r   )	r   r  contextr   r  r  r
  
use_asgi_3callr   r   r   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   r   r   r   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t W Y d }~nd }~ww |d u r8d S || j	dS )Nz,Error loading custom loop setup function. %s)r   )
r   r3   r   r   r   r*   r  r  r	  r   )r   loop_factoryr
  r   r   r   get_loop_factory  s   
zConfig.get_loop_factorysocket.socketc              
   C  s  | j d urP| j }ttjtj}z|| d}t| j | W n ty< } zt	| t
t W Y d }~nd }~ww d}d}dt|dd d }| j g}n| jd urst| jtjtj}d}d}	dt|	dd d }| g}njt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
t W Y d }~nd }~ww d| d}dt|dd d }| jrdnd}|| j| d g}tj|g|R dd|ii |d |S )Ni  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)familyr8   httpsr   extracolor_message)r   socketAF_UNIXSOCK_STREAMbindr   chmodrk   r   r*   r  r  r	  r
   r   fromfdgetsocknameAF_INETr   AF_INET6
setsockopt
SOL_SOCKETSO_REUSEADDRr   r   r,   set_inheritable)r   rf   sock	uds_permsr
  messagesock_name_formatr2  logger_argsfd_name_formatr/  addr_formatprotocol_namer   r   r   bind_socket'  sV   






zConfig.bind_socketc                 C  s   t | jto| jS rY   )r   r   r   r   r   r   r   r   r   W  s   zConfig.should_reload)hr   r   r   r   r   r5   r   rR   r   r   r   r   r   r   r   r   r   r5   r   r5   r   r   r   r   r   rg   r   r   r   rP   r   r   r   r   r   rg   r;   r   r   r   r   rg   r   r   r   r   r   r   r   r   r   r   r   rg   r   rg   r   rg   r   r   r   r   r   r   r   r   r   r5   r   r5   r   r5   r   r5   r   r   r   r5   r   r   r   rP   r   rP   r   rR   rS   r5   r   r5   r   rP   r   rR   r   r   r   r   r   rg   r   r   r   rg   )rW   r   )rW   rg   )rW   r   )rW   r   )rW   r)  )rW   r,  )r   r   r   rL   r6   r\   	CERT_NONEr   propertyr   r   r   r   r  r   r(  r+  rH  r   r   r   r   r   r      s     -

,

b

0r   )rM   rN   rO   rP   rQ   rR   rS   r5   rT   r5   rU   rP   rV   rR   rW   rX   )rf   r   rW   rg   )rl   rm   rn   rm   rW   ro   )r   r   rW   rm   )G
__future__r   r$   r  r   r   logging.configr   r3  r\   r  collections.abcr   r   configparserr   pathlibr   typingr   r   r	   uvicorn._ansir
   uvicorn._compatr   uvicorn._typesr   uvicorn.importerr   r   uvicorn.loggingr   uvicorn.middleware.asgi2r   !uvicorn.middleware.message_loggerr    uvicorn.middleware.proxy_headersr   uvicorn.middleware.wsgir   UserWarningr   HTTPProtocolTypeWSProtocolTyper   LoopFactoryTyper   CRITICALERRORWARNINGrA   DEBUGr/   __annotations__r0   r1   r2   r3   r4   PROTOCOL_TLS_SERVERr6   r	  rL   r  r   re   rj   r   r   r   r   r   r   r   <module>   s    
	
!


	
$