
    _j_              
         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e)          Z*ed         Z+ed         Z,ed         Z-ed         Z.ed         Z/ej0        ej1        ej2        ej3        ej4        e dZ5de6d<   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.e6d/<   d0Z>d1d2d3d4dd5d6d7d8d9d:d;d<d=d>d;d?d=d9d:gd@d2dAdBd@id>gd@d2dAdCdDZ?dEe6dF<    ej@        dG          ZAdcdTZBdddXZCded]ZDdfd`ZE G da db          ZFdS )g    )annotationsN)	AwaitableCallable)RawConfigParser)Path)IOAnyLiteral)style)iscoroutinefunction)ASGIApplication)ImportFromStringErrorimport_from_string)TRACE_LOG_LEVEL)ASGI2Middleware)MessageLoggerMiddleware)ProxyHeadersMiddleware)WSGIMiddlewarec                      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__     B/home/drrone/.local/lib/python3.11/site-packages/uvicorn/config.pyr   r      s           r   r   )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;   r<   )defaultaccessr>   zlogging.StreamHandlerzext://sys.stderr)	formatterclassstreamr?   zext://sys.stdoutINFO)handlerslevel	propagaterE   )uvicornuvicorn.erroruvicorn.access)versiondisable_existing_loggers
formattersrD   loggerszdict[str, Any]LOGGING_CONFIGrH   certfilestr | os.PathLike[str]keyfilestr | os.PathLike[str] | Nonepassword
str | Nonessl_version	cert_reqsca_certsciphersreturnssl.SSLContextc                    t          j        |          }rfdnd }|                    | ||           t          j        |          |_        |r|                    |           |r|                    |           |S )Nc                      S Nr   )rS   s   r   <lambda>z$create_ssl_context.<locals>.<lambda>   s    H r   )ssl
SSLContextload_cert_chain
VerifyModeverify_modeload_verify_locationsset_ciphers)	rO   rQ   rS   rU   rV   rW   rX   ctxget_passwords	     `      r   create_ssl_contextrh   u   s     .
%
%C)1;$$$$$tL'<888nY//CO ,!!(+++ !   Jr   pathr   boolc                    	 |                                  s|                                 } |                                 S # t          $ r Y dS w xY w)NF)is_absoluteresolveis_dirOSError)ri   s    r   rn   rn      sX    !! 	"<<>>D{{}}   uus   ;> 
AApatterns_list	list[str]directories_listtuple[list[str], list[Path]]c           	        t          t          t          t          |                                                              }|                                 }t          j                    }| D ]}|dk    r	|                    |           t          t          |                    r#|                    t          |                     ]|                    |          D ]&}t          |          r|                    |           't          t          |                    }t          t          t          |                    }t          t          d |                    }t          d |D                       }g }t          t          |                    D ]}t          |dz   t          |                    D ]c}	||         ||	         j        v r|                    ||	                    3||	         ||         j        v r|                    ||                    dt          t          |                              t          |                              }t          t          |                    |fS )Nz.*c                *    |                                  S r]   )rm   )xs    r   r^   z)resolve_reload_patterns.<locals>.<lambda>   s    QYY[[ r   c                0    h | ]}t          |          |S r   )rn   ).0reload_paths     r   	<setcomp>z*resolve_reload_patterns.<locals>.<setcomp>   s%    ZZZf[FYFYZZZZr   r:   )listsetmapr   copycwdappendrn   globrangelenparents
difference)
rp   rr   directoriespatternscurrent_working_directorypatternmatchchildrenjks
             r   resolve_reload_patternsr      sE   "3s41A1F1F1H1H'I'I#J#JKKK',,..H $

  . . d??   $w--   	.tG}}----277@@ . .%== .&&u---. s;''((Ks4--..Ks00+>>??KZZ{ZZZ[[KH3{##$$ 0 0q1uc+..// 	0 	0A1~Q!777A////Q;q>#999A///		0 s;''223x==AABBKH++r   dirslist[str] | str | Nonec                r    | g S t          | t                    r| gS t          t          |                     S r]   )
isinstancestrr{   r|   )r   s    r   _normalize_dirsr      s7    |	$ vD		??r   c            3         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	f3djdYZedkd\            Z	edld]            Z
edld^            Zdmd`ZdndbZdmdcZdmddZdodfZdpdhZedldi            ZdS )qConfig	127.0.0.1i@  Nr   i       g      4@TFg      ? r   i         app*ASGIApplication | Callable[..., Any] | strhostr   portr7   udsrT   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_deflaterj   lifespanLifespanTypeenv_filerR   
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_passwordrU   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                   || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        |pd| _        || _        || _        || _        || _        | | _        |!| _        |"| _        |#| _        |$| _        |%| _        |&| _         |'| _!        |(| _"        |)| _#        |*| _$        |+| _%        |,| _&        |-| _'        |.| _(        |/| _)        |0| _*        |1pg | _+        g | _,        |2| _-        |3| _.        |4| _/        d| _0        | 1                                 g | _2        g | _3        g | _4        g | _5        |s|s|r!| j6        stn          8                    d           | j6        rts          |          }ts          |          }ts          |          }tu          ||          \  | _4        | _2        tu          |g           \  | _5        | _3        | j2        ;                                }5| j3        D ]B}6|5D ]=}7|6|7k    s	|6|7j<        v r,	 | j2        =                    |7           -# t|          $ r Y 9w xY w>C| j5        D ]%}8|8| j4        v r| j4        =                    |8           &| j2        s6|rtn          8                    d|           t          j@                    g| _2        tn          A                    dt          t          t          t          | j2                                                 |-ddlFmG}9 tn          A                    d|            |9|	           |2d
t          jI        v r$t          t          jI        d
                   | _        |  |&t          jI        K                    dd          | _L        n|| _L        | j        r'| j        dk    rtn          8                    d           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.)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   rU   r   r   r   r   r   encoded_headersr   r   r   loadedconfigure_loggingr   reload_dirs_excludesr   r   should_reloadloggerr-   r   r   r~   r   remove
ValueErrorr   r   r.   sortedr{   r}   r   dotenvr   osenvironr7   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   rU   r   r   r   r   r   r   r   r   reload_dirs_tmp	directoryreload_directoryr   r   s:                                                             r   __init__zConfig.__init__   s   n 				&( 0.&<# $"$$"(|!**&"!2"4)B&"4,)B&*D'.&($8!&*(&#6 .5m:<-J*!2   ')02!*,*, 	? 	o 	tGY 	NNu    #	)+66K-o>>O-o>>O5L_^i5j5j2D $"2>UVegi>j>j;D $";".3355O!6 ! !	(7 ! !$ $444	EUE]8]8]! ,334DEEEE) ! ! ! D! 9^!  / 9 9d222(//888# 0 NNM#  
 %)HJJ< KKAtCT%5667788  
 ******KK7BBBKH----?0BJ>>rz*;<==DL1&')z~~6K['Y'YD$$':D$; 	S4<!++NNQRRRRR	S 	S++s   I33
J ?J rY   Literal['2.0', '3.0']c                (    dddd}|| j                  S )Nz2.0z3.0)r)   r(   r*   )r   )r   mappings     r   asgi_versionzConfig.asgi_versionk  s(     5
 5

 t~&&r   c                F    t          | j        p| j        p| j                  S r]   )rj   r   r   r   r   s    r   is_sslzConfig.is_sslt  s#    D$U(9UT=UVVVr   c                @    t          | j        p
| j        dk              S )Nr:   )rj   r   r   r   s    r   use_subprocesszConfig.use_subprocessx  s    DK34<!#3444r   Nonec                   t          j        t          d           | j        3t	          | j        t
          j                  rt          j        | j                  | _        t	          | j        t                    re| j	        dv r6| j	        | j        d         d         d<   | j	        | j        d         d         d<   t           j
                            | j                   nwt	          | j        t                    rz| j                            d          r`t          | j                  5 }t          j        |          }t           j
                            |           d d d            n# 1 swxY w Y   nt	          | j        t                    r| j                            d          r	 d	d l}n"# t$          $ r}t%          d
          |d }~ww xY wt          | j                  5 }|                    |          }t           j
                            |           d d d            n# 1 swxY w Y   n&t           j
                            | j        d           | j        t	          | j        t                    r%t,          | j                                                 }n| j        }t          j        d                              |           t          j        d                              |           t          j        d                              |           | j        du r4g t          j        d          _        dt          j        d          _        d S d S )NTRACE)TFrL   r>   r=   r?   z.json)z.yamlz.ymlr   zVInstall the PyYAML package or uvicorn[standard] to use `--log-config` with YAML files.F)rK   rH   rI   zuvicorn.asgi)loggingaddLevelNamer   r   r   r   PathLikefspathdictr=   config
dictConfigr   endswithopenjsonloadyamlImportError	safe_load
fileConfigr   r1   lower	getLoggersetLevelr   rD   rF   )r   fileloaded_configr  er   s         r   r   zConfig.configure_logging|  sg   _g666?&$/2;77 ="$)DO"<"<$/400 [?m33MQ_DOL1)<\JLPODOL1(;LI))$/::::DOS11 [do6N6Nw6W6W [$/** =d$(IdOOMN--m<<<= = = = = = = = = = = = = = = DOS11 [do6N6NO`6a6a [KKKK"   %p 
 $/** =d$(NN4$8$8MN--m<<<= = = = = = = = = = = = = = = ))$/TY)ZZZ>%$.#.. +&t~';';'='=>		 N	o..77	BBB.//88CCCn--66yAAA?e##;=G.//8<AG.//999 $#s<   '4E''E+.E+(F- -
G7GG#5H$$H(+H(r	   c                    	 t          | j                  S # t          $ rA}t                              d|z             t          j        t                     Y d}~dS d}~ww xY 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   excs     r   load_appzConfig.load_app  sp    	&%dh///$ 	& 	& 	&LL5;<<<H_%%%%%%%%%	&s    
A!6AA!c           	          j         rJ  j        bd fd}                      |          }t          |t          j                  s$t          dt          |          j                   | _        nV j        rH j	        sJ t           j         j	         j         j         j         j         j                   _        nd  _        d  j        D             }dt%          |          vr j        rdg|z   n| _        t           j        t,                    r:t/          t0                               j         j                            }| _        n j         _        t           j        t,                    r:t/          t8                               j         j                            }| _        n j         _        t/          t<           j                            _          !                                 _"        	  "                                 _"         j#        stH          %                    d	           nR# t
          $ rE} j#        r4tH          &                    d
|           tO          j(        tR                     Y d }~nd }~ww xY w j*        dk    rtW          j,         j"                  rt[           j"        d          }nStW          j.         j"                  rt_           j"                  }n%ta           j"        dd           }t_          |          }|rdnd _*         j*        dk    r!tc           j"                   _"        d  _        n$ j*        dk    rte           j"                   _"        tH          3                                th          k    rtk           j"                   _"         j6        r to           j"         j8                   _"        d _         d S )NrY   rZ   c            	          j         st          d          t           j         j          j         j         j         j         j                  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.rQ   rO   rS   rU   rV   rW   rX   )	r   RuntimeErrorrh   r   r   rU   r   r   r   r   s   r   default_factoryz$Config.load.<locals>.default_factory  si    ( &e  
 * ,!.!6 $ 0"0!. ,   r   z;`ssl_context_factory` must return an `ssl.SSLContext`, got r  c                    g | ]A\  }}|                                                     d           |                    d           fBS )latin1)r  encode)rx   keyvalues      r   
<listcomp>zConfig.load.<locals>.<listcomp>  sF    qqqV`VY[`CIIKK..x88%,,x:P:PQqqqr      server)r&  s   uvicornz_ASGI app factory detected. Using it, but please consider setting the --factory flag explicitly.z"Error loading ASGI app factory: %sr   	__await____call__r(   r)   r*   )trusted_hostsT)rY   rZ   )9r   r   r   r_   r`   	TypeErrortyper   r   r   rh   r   r   rU   r   r   r   r   r  r   r   r   r   r   r2   r   http_protocol_classr   r3   ws_protocol_classr4   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calls	   `        r   r
  zConfig.load  s   ;#/     " ..t_EEGgs~66 x v^bcj^k^k^t v vwww.5DHH[ 	$$$$)(*2 ,,*(  DHH DHqqdhdpqqq _ 5 555$:L5 %%77  	 di%% 	1"4^5G5G	SWS\5]5]"^"^?RD$$'+yD$dgs## 	- 2<3C3CDGTW3U3U V VDUD""%)WD"0$-1HII--//
	"oo//DO < u    	* 	* 	*| *A3GGG)))	* >V##t// 7$T_kBB

#DO44 70AA

t
DAA066
(2?WWDN>V##,T_==DO%)D""^w&&-do>>DO##%%885doFFDO 	n4T_TXTlmmmDOs   >H9 9
J;JJc                     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   s    r   setup_event_loopzConfig.setup_event_loop  s    n
 
 	
r   .Callable[[], asyncio.AbstractEventLoop] | Nonec                L   | j         t          v r t          t          | j                            }nb	 t          | j                   S # t          $ r@}t                              d|z             t          j        t                     Y d }~nd }~ww xY w|d S  || j	                  S )Nz,Error loading custom loop setup function. %s)r   )
r   r5   r   r   r   r,   r  r  r  r   )r   loop_factoryr  s      r   get_loop_factoryzConfig.get_loop_factory  s    9&&6HX\XaIb6c6cLL*)$)444( * * *KcQRRR))))))))* 4|4+>????s   A 
B6B		Bsocket.socketc                &   | j         | j         }t          j        t          j        t          j                  }	 |                    |           d}t          j        | j         |           nJ# t          $ r=}t          	                    |           t          j        t                     Y d }~nd }~ww xY wd}d}dt          |d          z   dz   }| j         g}n| j        at          j        | j        t          j        t          j                  }d}d}	dt          |	d          z   dz   }|                                g}n#t          j        }
d	}| j        rd
| j        v rt          j        }
d}t          j        |
          }|                    t          j        t          j        d           	 |                    | j        | j        f           nJ# t          $ r=}t          	                    |           t          j        t                     Y d }~nd }~ww xY wd| d}dt          |d          z   dz   }| j        rd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)familyr:   httpsr   extracolor_message)r   socketAF_UNIXSOCK_STREAMbindr   chmodro   r   r,   r  r  r  r   r   fromfdgetsocknameAF_INETr   AF_INET6
setsockopt
SOL_SOCKETSO_REUSEADDRr   r   r.   set_inheritable)r   ri   sock	uds_permsr  messagesock_name_formatrG  logger_argsfd_name_formatrD  addr_formatprotocol_names                r   bind_socketzConfig.bind_socket&  s   88D=1CDDD*		$!	9---- * * *S!!!))))))))* QG#1E:JQU4V4V4VVYrrM8*KKW =&.&:LMMDKG!N1E.t4T4T4TTWppM++--.KK^F&Ky -SDI--,=///DOOF-v/BAFFF*		49di01111 * * *S!!!))))))))* QKPPPG1E+D4Q4Q4QQTmmM'+{>GGM($)T5E5E5G5G5JKKGRkRRR/=1QRRRT"""s/   1A+ +
B253B--B2/!G 
H3HHc                D    t          | j        t                    o| j        S r]   )r   r   r   r   r   s    r   r   zConfig.should_reloadV  s    $(C((8T[8r   )hr   r   r   r   r   r7   r   rT   r   r   r   r   r   r   r   r   r   r7   r   r7   r   r   r   r   r   rj   r   r   r   rR   r   r   r   r   r   rj   r=   r   r   r   r   rj   r   r   r   r   r   r   r   r   r   r   r   rj   r   rj   r   rj   r   r   r   r   r   r   r   r   r   r7   r   r7   r   r7   r   r7   r   r   r   r7   r   r   r   rR   r   rR   r   rT   rU   r7   r   r7   r   rR   r   rT   r   r   r   r   r   rj   r   r   r   rj   )rY   r   )rY   rj   )rY   r   )rY   r	   )rY   r<  )rY   r@  )r   r   r   rN   r8   r_   	CERT_NONEr   propertyr   r   r   r   r  r
  r;  r?  r]  r   r   r   r   r   r      s         &,@F<B+)-(,'+!'26ao&*"&#).2"2626""" 6:(,)-)*"# 04*+AE596:+// ]6:"&gk0448"'kjS jS jS jS jSX ' ' ' X' W W W XW 5 5 5 X5*B *B *B *BX& & & &` ` ` `D
 
 
 
@ @ @ @. . . .` 9 9 9 X9 9 9r   r   )rO   rP   rQ   rR   rS   rT   rU   r7   rV   r7   rW   rR   rX   rT   rY   rZ   )ri   r   rY   rj   )rp   rq   rr   rq   rY   rs   )r   r   rY   rq   )G
__future__r   r&   r0  r	  r   logging.configr   rH  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WARNINGrC   DEBUGr1   __annotations__r2   r3   r4   r5   r6   PROTOCOL_TLS_SERVERr8   r  rN   r  r   rh   rn   r   r   r   r   r   r   <module>rz     s_   " " " " " " "         				  



 



 / / / / / / / / ( ( ( ( ( (       # # # # # # # # # #       / / / / / / * * * * * * F F F F F F F F + + + + + + 4 4 4 4 4 4 E E E E E E C C C C C C 2 2 2 2 2 2        56 UV*+=>89  ]L] 
     ;8J" "     GRgE' '     -
*-      2;8	) )     #E"D"D
 D D D D3  3 3 3 3  % 50
 
 4Y
 

 
 #,(
 
 ",(
 
  "+f5QQ!6*(0zFQVWW 5" "    B 
	?	+	+   (   !, !, !, !,H   Z9 Z9 Z9 Z9 Z9 Z9 Z9 Z9 Z9 Z9r   