
    RPf,P              
         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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jN                  ejP                  ejR                  ejT                  ejV                  edZ,de-d<   ddddZ.de-d<   dddddZ/de-d<   ddddZ0d e-d!<   dd"d#d$dZ1d%e-d&<   g dZ2d'e-d(<   e	jf                  Z4d)e-d*<   d+d,d-d.dd/d0d1d2d3d4d5d6d7d8d5d9d7d3d4gd:d,d;d<d:id8gd:d,d;d=d>Z5d?e-d@<    ejl                  dA      Z7	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dHdBZ8dIdCZ9dJdDZ:dKdEZ; G dF dG      Z<y)L    )annotationsN)Path)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accessr0   zlogging.StreamHandlerzext://sys.stderr)	formatterclassstreamr1   zext://sys.stdoutINFO)handlerslevel	propagater7   )uvicornuvicorn.erroruvicorn.access)versiondisable_existing_loggers
formattersr6   loggerszdict[str, Any]LOGGING_CONFIGr:   c                    t        j                  |      }rfdnd }|j                  | ||       t        j                  |      |_        |r|j                  |       |r|j                  |       |S )Nc                      S N )passwords   H/var/www/fastapitest/venv/lib/python3.12/site-packages/uvicorn/config.py<lambda>z$create_ssl_context.<locals>.<lambda>o   s    H     )ssl
SSLContextload_cert_chain
VerifyModeverify_modeload_verify_locationsset_ciphers)	certfilekeyfilerE   ssl_version	cert_reqsca_certsciphersctxget_passwords	     `      rF   create_ssl_contextrX   e   sd     ..
%C)1$tL'<8nnY/CO!!(+ JrH   c                    	 | j                         s| j                         } | j                         S # t        $ r Y yw xY w)NF)is_absoluteresolveis_dirOSError)paths    rF   r\   r\   y   s<    !<<>D{{} s   /2 	>>c           	        t        t        t        t        |j	                                           }| j	                         }t        j
                         }| D ]{  }|dk(  r	|j                  |       t        t        |            r|j                  t        |             I|j                  |      D ]  }t        |      s|j                  |       ! } t        t        |            }t        t        t        |            }t        t        d |            }t        |D ch c]  }t        |      s| c}      }g }t        t        |            D ]q  }	t        |	dz   t        |            D ]T  }
||	   ||
   j                  v r|j                  ||
          ,||
   ||	   j                  v sA|j                  ||	          V s t        t        |      j                  t        |                  }t        t        |            |fS c c}w )Nz.*c                "    | j                         S rC   )r[   )xs    rF   rG   z)resolve_reload_patterns.<locals>.<lambda>   s    QYY[ rH   r,   )listsetmapr   copycwdappendr\   globrangelenparents
difference)patterns_listdirectories_listdirectoriespatternscurrent_working_directorypatternmatchreload_pathchildrenjks              rF   resolve_reload_patternsrx      s   "3s41A1F1F1H'I#JKK',,.H $
  . d? $w- tG}-277@ .%=&&u-.. s;'(Ks4-.Ks0+>?K{Zf[FYZ[KH3{#$ 0q1uc+./ 	0A1~Q!7!77A/Q;q>#9#99A/		00 s;'223x=ABKH++ [s   !H	2H	c                X    | g S t        | t              r| gS t        t        |             S rC   )
isinstancestrrb   rc   )dirss    rF   _normalize_dirsr}      s+    |	$vD	?rH   c            /         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/	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZedd       Z	edd       Z
edd       ZddZddZddZddZedd       Zy)Config	127.0.0.1i@  Nr   i       g      4@TFg      ? i         TLSv1c1                   || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        |xs d| _        || _        || _        || _        || _        | | _        |!| _        |"| _        |#| _        |$| _        |%| _        |&| _         |'| _!        |(| _"        |)| _#        |*| _$        |+| _%        |,| _&        |-| _'        |.xs g | _(        g | _)        |/| _*        |0| _+        d| _,        | j[                          g | _.        g | _/        g | _0        g | _1        |s|s|r!| jd                  stf        ji                  d       | jd                  rwtk        |      }tk        |      }tk        |      }tm        ||      \  | _0        | _.        tm        |g       \  | _1        | _/        | j\                  jo                         }1| j^                  D ]9  }2|1D ]2  }3|2|3k(  s|2|3jp                  v s	 | j\                  js                  |3       4 ; | jb                  D ],  }4|4| j`                  v s| j`                  js                  |4       . | j\                  s;|rtf        ji                  d|       tw        ty        jz                               g| _.        tf        j}                  dt        t        t        t        | j\                                           |%ddlCmD}5 tf        j}                  d|        |5|	       |3d
tx        j                  v r!t        tx        j                  d
         | _        |  |&tx        j                  j                  dd      | _H        n|| _H        | j&                  r&| j*                  dkD  rtf        ji                  d       y y y # tt        $ r Y w xY w)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.)I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
log_config	log_level
access_logr/   	interfacereloadreload_delayworkersproxy_headersserver_headerdate_header	root_pathlimit_concurrencylimit_max_requestsbacklogtimeout_keep_alivetimeout_notifytimeout_graceful_shutdowncallback_notifyssl_keyfilessl_certfilessl_keyfile_passwordrR   ssl_cert_reqsssl_ca_certsssl_ciphersheadersencoded_headersfactoryh11_max_incomplete_event_sizeloadedconfigure_loggingreload_dirsreload_dirs_excludesreload_includesreload_excludesshould_reloadloggerr    r}   rx   re   rk   remove
ValueErrorr   osgetcwdr!   sortedrb   rd   r{   dotenvr   environr*   getforwarded_allow_ips)6selfr   r   r   r   r   r   r   r   r   r   r   r   r   r   env_filer   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   rR   r   r   r   r   r   r   reload_dirs_tmp	directoryreload_directoryrr   r   s6                                                         rF   __init__zConfig.__init__   s   f 				&( 0.&<# $"$$"(|!**&"!2"4"4,)B&.&($8!&*(&.5m:<-J* ')02!*,*,?otGYGYNNx )+6K-o>O-o>O5L_^i5j2D $"2>UVegi>j;D $";"..335O!66 !	(7 !$ $44	EUE]E]8]! ,,334DE!!  // 9d222((//89 ##NNM#
 %)$5#6 KKAtCT%5%5678
 *KK7BH-?0BJJ>rzz*;<=DL&')zz~~6K['YD$':D$;;4<<!+NNQR ,;I  * ! !s   :O	O('O(c                ,    dddd}|| j                      S )Nz2.0z3.0)r   r   r   )r   )r   mappings     rF   asgi_versionzConfig.asgi_versionS  s%     5

 t~~&&rH   c                H    t        | j                  xs | j                        S rC   )boolr   r   r   s    rF   is_sslzConfig.is_ssl\  s    D$$9(9(9::rH   c                N    t        | j                  xs | j                  dkD        S )Nr,   )r   r   r   r   s    rF   use_subprocesszConfig.use_subprocess`  s    DKK34<<!#344rH   c                   t        j                  t        d       | j                  t	        | j                  t
              rw| j                  dv r>| j                  | j                  d   d   d<   | j                  | j                  d   d   d<   t         j                  j                  | j                         n| j                  j                  d      rSt        | j                        5 }t        j                  |      }t         j                  j                  |       d d d        n| j                  j                  d      rSd	d l}t        | j                        5 }|j                  |      }t         j                  j                  |       d d d        n+t         j                  j                  | j                  d
       | j                   t	        | j                   t"              rt$        | j                      }n| j                   }t        j&                  d      j)                  |       t        j&                  d      j)                  |       t        j&                  d      j)                  |       | j*                  d
u r5g t        j&                  d      _        d
t        j&                  d      _        y y # 1 sw Y   xY w# 1 sw Y   xY w)NTRACE)TFr>   r0   r/   r1   z.json)z.yamlz.ymlr   F)r=   r:   r;   zuvicorn.asgi)loggingaddLevelNamer   r   rz   dictr/   config
dictConfigendswithopenjsonloadyaml	safe_load
fileConfigr   r{   r$   	getLoggersetLevelr   r6   r8   )r   fileloaded_configr   r   s        rF   r   zConfig.configure_loggingd  s   _g6??&$//40??m3MQ__DOOL1)<\JLPOODOOL1(;LI))$//:))'2$//* =d$(IIdOMNN--m<= = ))*;< $//* =d$(NN4$8MNN--m<= = ))$//TY)Z>>%$..#.&t~~6	 NN	o.77	B./88Cn-66yA??e#;=G./8<AG./9 $1= == =s   )5J61K6J?Kc           	     \   | j                   rJ | j                  rl| j                  sJ t        | j                  | j                  | j
                  | j                  | j                  | j                  | j                        | _
        nd | _
        | j                  D cg c]5  \  }}|j                         j                  d      |j                  d      f7 }}}dt        |      vr| j                  rdg|z   n|| _        t#        | j$                  t&              r$t)        t*        | j$                           }|| _        n| j$                  | _        t#        | j.                  t&              r$t)        t0        | j.                           }|| _        n| j.                  | _        t)        t4        | j6                           | _        	 t)        | j:                        | _        	 | j=                         | _        | jH                  st@        jK                  d       	 | jN                  d	k(  rtQ        jR                  | j<                        rtU        | j<                  d
      }nktQ        jV                  | j<                        r tY        jZ                  | j<                        }n,t]        | j<                  dd       }tY        jZ                  |      }|rdnd| _'        | jN                  dk(  r"t_        | j<                        | _        d | _        n)| jN                  dk(  rta        | j<                        | _        t@        jc                         td        k  rtg        | j<                        | _        | jh                  r&tk        | j<                  | jl                        | _        d| _         y c c}}w # t>        $ r8}t@        jC                  d|z         tE        jF                  d       Y d }~d }~ww xY w# tL        $ rB}| jH                  r+t@        jC                  d|       tE        jF                  d       Y d }~d }~ww xY w)N)rQ   rP   rE   rR   rS   rT   rU   latin1   server)r   s   uvicornzError loading ASGI app. %sr,   z_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)7r   r   r   rX   r   r   rR   r   r   r   rI   r   lowerencoder   r   r   rz   r   r{   r   r%   http_protocol_classr   r&   ws_protocol_classr'   r   lifespan_classr   
loaded_appr
   r   r   sysexitr   r    	TypeErrorr   inspectisclasshasattr
isfunctionr   iscoroutinefunctiongetattrr   r   getEffectiveLevelr   r   r   r   r   )	r   keyvaluer   r   r   exc
use_asgi_3calls	            rF   r   zConfig.load  s    ;;;;$$$$.@((**22 ,,,,**((/DH DHdhdpdpqV`VY[`CIIK..x8%,,x:PQqq _ 55$:L:L %%7  	 dii%"4^DII5N"O?RD$'+yyD$dggs# 2<3H IDUD"%)WWD"0$--1HI	0:DO

	"oo/DO <<x >>V#t/$T__kB
##DOO4$88I
t
DA$88>
(2WDN>>V#,T__=DO%)D"^^w&-doo>DO##%85dooFDO4T__TXTlTlmDOy r. % 	LL5;<HHQKK	  	||A3G	s6   :N N O  	O%-OO 	P+)7P&&P+c                h    t        t        | j                           }| || j                         y y )N)r   )r   r(   r   r   )r   
loop_setups     rF   setup_event_loopzConfig.setup_event_loop  s.    &8TYY9O&P
!d&9&9: "rH   c                   | j                   r| j                   }t        j                  t        j                  t        j                        }	 |j	                  |       d}t        j                  | j                   |       d}d}dt        j                  |d      z   dz   }| j                   g}nz| j                  rpt        j                  | j                  t        j                  t        j                        }d	}d}	dt        j                  |	d      z   dz   }|j!                         g}nt        j"                  }
d
}| j$                  r d| j$                  v rt        j&                  }
d}t        j                  |
      }|j)                  t        j*                  t        j,                  d       	 |j	                  | j$                  | j.                  f       d| d}dt        j                  |d      z   dz   }| j0                  rdnd}|| j$                  |j!                         d   g}t        j2                  |g|dd|ii |j5                  d       |S # t        $ r5}t        j                  |       t        j                  d       Y d }~d }~ww xY w# t        $ r4}t        j                  |       t        j                  d       Y d }~d }~ww xY w)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   chmodr]   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_names                rF   bind_socketzConfig.bind_socket  s9   8888D==1C1CDD		$!	9-
 QG#1EKK@PW[4\\_xxM88*KWW==&..&:L:LMDKG!N1EKKUY4ZZ]vvM++-.K^^F&KyySDII-,==/DOOF--v/B/BAF		499dii01
 ,K=8OPG1EKKRV4WWZssM'+{{GM($))T5E5E5G5JKKGRkR/=1QRT"K  S!6  S!s0   3I /'J 	J *JJ	K!*KKc                R    t        | j                  t              xr | j                  S rC   )rz   r   r{   r   r   s    rF   r   zConfig.should_reload  s    $((C(8T[[8rH   )`r   z*ASGIApplication | Callable[..., Any] | strr   r{   r   r*   r   
str | Noner   
int | Noner   LoopSetupTyper   z)type[asyncio.Protocol] | HTTPProtocolTyper   z'type[asyncio.Protocol] | WSProtocolTyper   r*   r   r*   r   float | Noner   r(  r   r   r   LifespanTyper   str | os.PathLike[str] | Noner   zdict[str, Any] | str | Noner   zstr | int | Noner   r   r/   zbool | Noner   InterfaceTyper   r   r   list[str] | str | Noner   floatr   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   z%Callable[..., Awaitable[None]] | Noner   r%  r   r*  r   r%  rR   r*   r   r*   r   r%  r   r{   r   zlist[tuple[str, str]] | Noner   r   r   r&  )returnzLiteral['2.0', '3.0'])r.  r   )r.  None)r.  zsocket.socket)__name__
__module____qualname__r@   r+   rI   	CERT_NONEr   propertyr   r   r   r   r   r  r#  r   rD   rH   rF   r   r      si     $:@6<+)-(,'+!'262@&*"&#).2"2626""" 6:(,)-"# 04AE"&6:+// ]]#'"0448cbS7bS bS 	bS
 bS bS bS 8bS 4bS bS bS 'bS &bS !%bS bS  0!bS" 0#bS$ $%bS& 'bS(  )bS* !+bS, -bS. ,/bS0 1bS2 03bS4 05bS6 7bS8 9bS: ;bS< =bS> 4?bS@ AbSB &CbSD 'EbSF GbSH  IbSJ KbSL $.MbSN ?ObSP  QbSR 4SbST )UbSV WbSX YbSZ ![bS\ ]bS^ ._bS` abSb (2cbSH ' ' ; ; 5 5$BLM^;
.` 9 9rH   r   )rP   zstr | os.PathLike[str]rQ   r*  rE   r%  rR   r*   rS   r*   rT   r*  rU   r%  r.  zssl.SSLContext)r^   r   r.  r   )rm   	list[str]rn   r5  r.  ztuple[list[str], list[Path]])r|   r,  r.  r5  )=
__future__r   r   r   r   r   logging.configr   r  rI   r   pathlibr   typingr   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WARNINGr5   DEBUGr$   __annotations__r%   r&   r'   r(   r)   PROTOCOL_TLS_SERVERr+   r@   r   r   rX   r\   rx   r}   r   rD   rH   rF   <module>rI     sI   "      	  
 
  4 4  * F + 4 E C 256 @A*+;<89   ]]LL]]
N  ;8J/+  GRE	2.  -
*-%
!  041	0,  #E
 D33 c 3  % 50
 4Y

 #,(
 ",(
 "+f5Q!6*(0zFQVW5" B 
		?	+$*  	
  ,  (!,Hb9 b9rH   