
    1Rj_              
      @   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j`                  ejb                  ejd                  ejf                  ejh                  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	jx                  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      ZA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dNdHZBdOdIZCdPdJZDdQdKZE G dL dM      ZFy)R    )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y)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__     V/var/www/html/meridian/meridian-ai/venv/lib/python3.12/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   c                    t        j                  |      }rfdnd }|j                  | ||       t        j                  |      |_        |r|j                  |       |r|j                  |       |S )Nc                      S Nr   )passwords   r   <lambda>z$create_ssl_context.<locals>.<lambda>   s    H r   )ssl
SSLContextload_cert_chain
VerifyModeverify_modeload_verify_locationsset_ciphers)	certfilekeyfilerR   ssl_version	cert_reqsca_certsciphersctxget_passwords	     `      r   create_ssl_contextrc   u   sd     ..
%C)1$tL'<8nnY/CO!!(+ Jr   c                    	 | j                         s| j                         } | j                         S # t        $ r Y yw xY w)NF)is_absoluteresolveis_dirOSError)paths    r   rg   rg      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 rQ   )rf   )xs    r   rS   z)resolve_reload_patterns.<locals>.<lambda>   s    QYY[ r   r:   )listsetmapr   copycwdappendrg   globrangelenparents
difference)patterns_listdirectories_listdirectoriespatternscurrent_working_directorypatternmatchreload_pathchildrenjks              r   resolve_reload_patternsr      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 rQ   )
isinstancestrrm   rn   )dirss    r   _normalize_dirsr      s+    |	$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	f3	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 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d dZd!dZedd       Zy)"Config	127.0.0.1i@  Nr   i       g      4@TFg      ? r   i         c5                   || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        |xs d| _        || _        || _        || _        || _        | | _        |!| _        |"| _        |#| _        |$| _        |%| _        |&| _         |'| _!        |(| _"        |)| _#        |*| _$        |+| _%        |,| _&        |-| _'        |.| _(        |/| _)        |0| _*        |1xs g | _+        g | _,        |2| _-        |3| _.        |4| _/        d| _0        | jc                          g | _2        g | _3        g | _4        g | _5        |s|s|r!| jl                  stn        jq                  d       | jl                  rnts        |      }ts        |      }ts        |      }tu        ||      \  | _4        | _2        tu        |g       \  | _5        | _3        | jd                  jw                         }5| jf                  D ]9  }6|5D ]2  }7|6|7k(  s|6|7jx                  v s	 | jd                  j{                  |7       4 ; | jj                  D ],  }8|8| jh                  v s| jh                  j{                  |8       . | jd                  s2|rtn        jq                  d|       t        j                         g| _2        tn        j                  dt        t        t        t        | jd                                           |%ddlFmG}9 tn        j                  d|        |9|	       |3d
t        j                  v r!t        t        j                  d
         | _        |  |&t        j                  j                  dd      | _L        n|| _L        | j&                  r&| j*                  dkD  rtn        jq                  d       y y y # t|        $ 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.)M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limit_max_requests_jitterbacklogtimeout_keep_alivetimeout_notifytimeout_graceful_shutdowntimeout_worker_healthcheckcallback_notifyssl_keyfilessl_certfilessl_keyfile_passwordr]   ssl_cert_reqsssl_ca_certsssl_ciphersssl_context_factoryheadersencoded_headersfactoryh11_max_incomplete_event_sizereset_contextvarsloadedconfigure_loggingreload_dirsreload_dirs_excludesreload_includesreload_excludesshould_reloadloggerr-   r   r   rp   rv   remove
ValueErrorr   rq   r.   sortedrm   ro   r   dotenvr   osenvironr7   getforwarded_allow_ips):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   r   r   r]   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!*,*,?otGYGYNNu )+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#
 %)HHJ< 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     r   asgi_versionzConfig.asgi_versionk  s%     5

 t~~&&r   c                d    t        | j                  xs | j                  xs | j                        S rQ   )boolr   r   r   r   s    r   is_sslzConfig.is_sslt  s)    D$$U(9(9UT=U=UVVr   c                N    t        | j                  xs | j                  dkD        S )Nr:   )r   r   r   r   s    r   use_subprocesszConfig.use_subprocessx  s    DKK34<<!#344r   c                   t        j                  t        d       | j                  t	        | j                  t
        j                        r$t        j                  | j                        | _        t	        | j                  t              rw| j                  dv r>| j                  | j                  d   d   d<   | j                  | j                  d   d   d<   t         j                  j                  | j                         n<t	        | j                  t              rn| j                  j                  d      rSt        | j                        5 }t        j                   |      }t         j                  j                  |       d d d        nt	        | j                  t              ro| j                  j                  d      rT	 d	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*                  j/                            }n| j*                  }t        j0                  d      j3                  |       t        j0                  d      j3                  |       t        j0                  d      j3                  |       | j4                  du r5g t        j0                  d      _        dt        j0                  d      _        y y # 1 sw Y   xY w# t$        $ r}t%        d
      |d }~ww xY w# 1 sw Y   8xY w)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|  s   _g6??&$//2;;7"$))DOO"<$//40??m3MQ__DOOL1)<\JLPOODOOL1(;LI))$//:DOOS1doo6N6Nw6W$//* =d$(IIdOMNN--m<= = DOOS1doo6N6NO`6a $//* =d$(NN4$8MNN--m<= = ))$//TY)Z>>%$..#.&t~~';';'=>	 NN	o.77	B./88Cn-66yA??e#;=G./8<AG./9 $7= = # %p
= =s0   5M?M 1M+M	M(M##M(+M5c                    	 t        | j                        S # t        $ r;}t        j	                  d|z         t        j                  t               Y d}~y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  sG    	&%dhh//$ 	&LL5;<HH_%%	&s    	A1AAc           	          j                   rJ  j                  [d fd} j                   |      }t        |t        j                        s!t        dt        |      j                         | _        n 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.                  t0              r;t3        t4        j7                   j.                   j.                              }| _        n j.                   _        t         j:                  t0              r;t3        t<        j7                   j:                   j:                              }| _        n j:                   _        t3        t@         jB                            _"         jG                          _$        	  jI                          _$         jJ                  stL        jO                  d       	  jX                  d	k(  rt[        j\                   jH                        rt_         jH                  d
      }	nWt[        j`                   jH                        rtc         jH                        }	n"te         jH                  dd       }
tc        |
      }	|	rdnd _,         jX                  dk(  r"tg         jH                         _$        d  _        n) jX                  dk(  rti         jH                         _$        tL        jk                         tl        k  rto         jH                         _$         jp                  r&ts         jH                   jt                         _$        d _         y c c}}w # t
        $ rF} jJ                  r/tL        jQ                  d|       tS        jT                  tV               Y d }~d }~ww xY w)Nc            	          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.r\   r[   rR   r]   r^   r_   r`   )	r   RuntimeErrorrc   r   r   r]   r   r   r   r   s   r   default_factoryz$Config.load.<locals>.default_factory  sm    ((&e 
 * ,,!..!66 $ 0 0"00!.. ,, r   z;`ssl_context_factory` must return an `ssl.SSLContext`, got r  latin1   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)returnssl.SSLContext);r   r   r   rT   rU   	TypeErrortyper   r   r   rc   r   r   r]   r   r   r   r   r   encoder   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  contextkeyvaluer   r  r  r   
use_asgi_3calls   `          r   r   zConfig.load  sT   ;;##/" ..t_EGgs~~6"]^bcj^k^t^t]u vww.5DH[[$$$$)((**22 ,,,,**((DH DHdhdpdpqV`VY[`CIIK..x8%,,x:PQqq _ 55$:L:L %%7  	 dii%"4^5G5G		SWS\S\5]"^?RD$'+yyD$dggs# 2<3C3CDGGTWW3U VDUD"%)WWD"0$--1HI--/
	"oo/DO <<u >>V#t/$T__kB
##DOO40A
t
DA06
(2WDN>>V#,T__=DO%)D"^^w&-doo>DO##%85dooFDO4T__TXTlTlmDOq r2  	*||A3G)	*s   :P+P 	Q'!;Q""Q'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   c                F   | j                   t        v rt        t        | j                            }n	 t        | j                         S y  || j                        S # t        $ r;}t        j                  d|z         t        j                  t               Y d }~Ud }~ww xY w)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    99&6HX\XaXaIb6cL*)$))44 4+>+>?? ) *KcQR))*s   A 	B %1BB c                   | j                   | j                   }t        j                  t        j                  t        j                        }	 |j	                  |       d}t        j                  | j                   |       d}d}dt        |d      z   dz   }| j                   g}nf| j                  ft        j                  | j                  t        j                  t        j                        }d}d}	dt        |	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        |d      z   dz   }| j0                  rdnd}|| j$                  |j!                         d   g}t        j2                  |g|dd|ii |j5                  d       |S # t        $ r9}t        j                  |       t        j                  t               Y d }~d }~ww xY w# t        $ r8}t        j                  |       t        j                  t               Y d }~d }~ww xY w)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   chmodrh   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_formatr)  logger_argsfd_name_formatr&  addr_formatprotocol_names                r   bind_socketzConfig.bind_socket&  s5   8888D==1C1CDD*		$!	9-
 QG#1E:JQU4VVYrrM88*KWW ==&..&:L:LMDKG!N1E.t4TTWppM++-.K^^F&KyySDII-,==/DOOF--v/B/BAF*		499dii01
 ,K=8OPG1E+D4QQTmmM'+{{GM($))T5E5E5G5JKKGRkR/=1QRT"K  *S!))*6  *S!))*s0   3H9 'I> 9	I;.I66I;>	J?.J::J?c                R    t        | j                  t              xr | j                  S rQ   )r   r   r   r   r   s    r   r   zConfig.should_reloadV  s    $((C(8T[[8r   )hr   z*ASGIApplication | Callable[..., Any] | strr   r   r   r7   r   
str | Noner   
int | Noner   zLoopFactoryType | strr   z/type[asyncio.Protocol] | HTTPProtocolType | strr   z-type[asyncio.Protocol] | WSProtocolType | strr   r7   r   r7   r   float | Noner   rC  r   r   r   LifespanTyper   str | os.PathLike[str] | Noner   zJdict[str, Any] | str | os.PathLike[str] | RawConfigParser | IO[Any] | Noner   zstr | int | Noner   r   r=   zbool | Noner   InterfaceTyper   r   r   list[str] | str | Noner   floatr   rG  r   rG  r   rB  r   r   r   r   r   r   r   rG  r   r   r   rB  r   rB  r   r7   r   r7   r   r7   r   r7   r   rB  r   r7   r   z%Callable[..., Awaitable[None]] | Noner   rE  r   rE  r   rA  r]   r7   r   r7   r   rE  r   rA  r   zGCallable[[Config, Callable[[], ssl.SSLContext]], ssl.SSLContext] | Noner   zlist[tuple[str, str]] | Noner   r   r   rB  r   r   )r	  zLiteral['2.0', '3.0'])r	  r   )r	  None)r	  r	   )r	  z.Callable[[], asyncio.AbstractEventLoop] | None)r	  zsocket.socket)r   r   r   rN   r8   rT   	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7jS jS 	jS
 jS jS $jS >jS :jS jS jS 'jS &jS !%jS jS  0!jS" _#jS$ $%jS& 'jS(  )jS* !+jS, -jS. ,/jS0 1jS2 03jS4 05jS6 7jS8 9jS: ;jS< =jS> 4?jS@ AjSB &CjSD 'EjSF $'GjSH IjSJ  KjSL MjSN $.OjSP %(QjSR ?SjST 3UjSV 4WjSX )YjSZ [jS\ ]jS^ 4_jS`  ajSb ecjSd .ejSf gjSh (2ijSj  kjSX ' ' W W 5 5*BX&`D
@.` 9 9r   r   )r[   zstr | os.PathLike[str]r\   rE  rR   rA  r]   r7   r^   r7   r_   rE  r`   rA  r	  r
  )ri   r   r	  r   )rx   	list[str]ry   rL  r	  ztuple[list[str], list[Path]])r   rG  r	  rL  )G
__future__r   r&   r  r   r   logging.configr   r*  rT   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WSProtocolTyperD  LoopFactoryTyperF  CRITICALERRORWARNINGrC   DEBUGr1   __annotations__r2   r3   r4   r5   r6   PROTOCOL_TLS_SERVERr8   r   rN   r   r   rc   rg   r   r   r   r   r   r   <module>rf     sf   "      	  
 
 / (  # #  / * F + 4 E C 2  56 UV*+=>89   ]]LL]]
N  ;8J"  GRgE'#  -
*-.  2;8	)%  #E
 D33 c 3  % 50
 4Y

 #,(
 ",(
 "+f5Q!6*(0zFQVW5" B 
		?	+$*  	
  ,  (!,HZ9 Z9r   