
    Ojc              
      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j`                  ejb                  ejd                  ejf                  ejh                  e 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,dZ:d$e6d-<   g dZ;d.e6d/<   e	jx                  Z=d0e6d1<   d2Z>d3d4d5d6dd7d8d9d:d;d<d=d>d?d@d=dAd?d;d<gdBd4dCdDdBid@gdBd4dCdEdFZ?dGe6dH<    ej                  dI      ZA	 dP	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dQdJZBdRdKZCdSdLZDdTdMZE G dN dO      ZFy)U    )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__     e/var/www/origus_pro_usr/data/www/origus.pro/core/.venv/lib/python3.12/site-packages/uvicorn/config.pyr   r      s    r   r   )autoh11	httptoolszttp)r   none
websocketszwebsockets-sansiowsproto)r   onoff)r"   r   asynciouvloopzuvloop)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_factoryz*uvicorn.loops.zuvloop:zuvloop_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streamrA   zext://sys.stdoutINFO)handlerslevel	propagaterG   )uvicornuvicorn.erroruvicorn.access)versiondisable_existing_loggers
formattersrF   loggerszdict[str, Any]LOGGING_CONFIGrJ   c                   t        j                  |      }rfdnd }	|j                  | ||	       t        j                  |      |_        |r|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set_alpn_protocols)
certfilekeyfilerT   ssl_version	cert_reqsca_certsciphersalpn_protocolsctxget_passwords
     `       r   create_ssl_contextrg   w   su     ..
%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   rk   rk      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 rS   )rj   )xs    r   rU   z)resolve_reload_patterns.<locals>.<lambda>   s    QYY[ r   r<   )listsetmapr   copycwdappendrk   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 rS   )
isinstancestrrq   rr   )dirss    r   _normalize_dirsr      s+    |	$vD	?r   c            4         e Zd Zd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f4	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 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)"Configz	127.0.0.1i@  Nr   Fi       g      4@Tg      ? r   i         c6                
   || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        |xs d| _        || _        || _        || _        | | _        |!| _        |"| _        |#| _        |$| _        |%| _        |&| _         |'| _!        |(| _"        |)| _#        |*| _$        |+| _%        |,| _&        |-| _'        |.| _(        |/| _)        |0| _*        |1| _+        |2xs g | _,        g | _-        |3| _.        |4| _/        |5| _0        d| _1        | je                          g | _3        g | _4        g | _5        g | _6        |s|s|r!| jn                  stp        js                  d       | jn                  rntu        |      }tu        |      }tu        |      }tw        ||      \  | _5        | _3        tw        |g       \  | _6        | _4        | jf                  jy                         }6| jh                  D ]9  }7|6D ]2  }8|7|8k(  s|7|8jz                  v s	 | jf                  j}                  |8       4 ; | jl                  D ],  }9|9| jj                  v s| jj                  j}                  |9       . | jf                  s2|rtp        js                  d|       t        j                         g| _3        tp        j                  dt        t        t        t        | jf                                           |%ddlGmH}: tp        j                  d|        |:|	       |3d
t        j                  v r!t        t        j                  d
         | _        |  |&t        j                  j                  dd      | _M        n|| _M        | j(                  r&| j,                  dkD  rtp        js                  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_IPSz127.0.0.1,::1z4"workers" flag is ignored when reloading is enabled.)Napphostportudsfdloophttphttp2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   rt   rz   remove
ValueErrorr   ru   r0   sortedrq   rs   r   dotenvr   osenvironr9   getforwarded_allow_ips);selfr   r   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   p 				
&( 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_']D$':D$;;4<<!+NNQR ,;I  * ! !s   O55	PPc                ,    dddd}|| j                      S )Nz2.0z3.0)r+   r*   r,   )r   )r   mappings     r   asgi_versionzConfig.asgi_versionr  s%     5

 t~~&&r   c                d    t        | j                  xs | j                  xs | j                        S rS   )boolr   r   r   r   s    r   is_sslzConfig.is_ssl{  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_subprocess  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)TFrN   r@   r?   rA   z.json)z.yamlz.ymlr   zVInstall the PyYAML package or uvicorn[standard] to use `--log-config` with YAML files.F)rM   rJ   rK   zuvicorn.asgi)loggingaddLevelNamer   r   r   r   PathLikefspathdictr?   config
dictConfigr   endswithopenjsonloadyamlImportError	safe_load
fileConfigr   r3   lower	getLoggersetLevelr   rF   rH   )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           
     v	     j                   rJ  j                  r- j                  dk7  rt        d      t	        d      }| _        ndt         j                  t              r9t	        t        j                   j                   j                               _        n j                   _        t         j
                  dd        j                  \d fd} j                   |      }t        |t        j                        s!t        dt        |      j                          | _        n j"                  rm j$                  sJ t'         j(                   j$                   j*                   j,                   j.                   j0                   j2                         _        nd  _         j4                  D cg c]5  \  }}|j7                         j9                  d      |j9                  d      f7 }}}d	t;        |      vr j<                  rd
g|z   n| _        t         j@                  t              r;t	        tB        j                   j@                   j@                              }| _"        n j@                   _"        t	        tF         jH                            _%         jM                          _'        	  jO                          _'         jP                  stR        jU                  d       	  j^                  dk(  rta        jb                   jN                        rte         jN                  d      }	nWta        jf                   jN                        rti         jN                        }	n"t         jN                  dd       }
ti        |
      }	|	rdnd _/         j^                  dk(  r"tk         jN                         _'        d  _"        n) j^                  dk(  rtm         jN                         _'        tR        jo                         tp        k  rts         jN                         _'         jt                  r&tw         jN                   jx                         _'        d _         y c c}}w # t        $ rF} jP                  r/tR        jW                  d|       tY        jZ                  t\               Y d }~d }~ww xY w)Nr!   zHTTP/2 requires the `zttp` HTTP protocol. Install it with `pip install zttp`, then select it with `http='zttp'`. See https://uvicorn.dev/concepts/http2/ for more information.z6uvicorn.protocols.http.auto_zttp_impl:AutoZttpProtocolrd   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.r_   r^   rT   r`   ra   rb   rc   rd   )	r   RuntimeErrorrg   r   r   r`   r   r   r   )rd   r   s   r   default_factoryz$Config.load.<locals>.default_factory  sp    ((&e 
 * ,,!..!66 $ 0 0"00!.. ,,#1	 	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   r   r   http_protocol_classr   r   r4   r   getattrr   rV   rW   	TypeErrortyper   r   r   rg   r   r   r`   r   r   r   r   r   encoder   r   r   r   r5   ws_protocol_classr6   r   lifespan_classr  
loaded_appr   r   r/   r.   r   r   r   r   inspectisclasshasattr
isfunctionr   r   r   getEffectiveLevelr   r   r   r   r   )r   r  r  contextkeyvaluer   r  r  
use_asgi_3callrd   s   `          @r   r   zConfig.load  s   ;;::yyF" h  #55m"n?RD$		3''9.:L:LTYYX\XaXa:b'cD$'+yyD$+243K3KM]_c+d##/$ ..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  	 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e r&  	*||A3G)	*s   <:Q#<Q) )	R82;R33R8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   r7   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   chmodrl   r   r.   r   r   r   r   r   fromfdgetsocknameAF_INETr   AF_INET6
setsockopt
SOL_SOCKETSO_REUSEADDRr   r   r0   set_inheritable)r   rm   sock	uds_permsr  messagesock_name_formatr-  logger_argsfd_name_formatr*  addr_formatprotocol_names                r   bind_socketzConfig.bind_socket8  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 rS   )r   r   r   r   r   s    r   r   zConfig.should_reloadh  s    $((C(8T[[8r   )jr   z*ASGIApplication | Callable[..., Any] | strr   r   r   r9   r   
str | Noner   
int | Noner   zLoopFactoryType | strr   z/type[asyncio.Protocol] | HTTPProtocolType | strr   r   r   z-type[asyncio.Protocol] | WSProtocolType | strr   r9   r   r9   r   float | Noner   rG  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   rK  r   rK  r   rF  r   r   r   r   r   r   r   rK  r   r   r   rF  r   rF  r   r9   r   r9   r   r9   r   r9   r   rF  r   r9   r   z%Callable[..., Awaitable[None]] | Noner   rI  r   rI  r   rE  r`   r9   r   r9   r   rI  r   rE  r   zGCallable[[Config, Callable[[], ssl.SSLContext]], ssl.SSLContext] | Noner   zlist[tuple[str, str]] | Noner   r   r   rF  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   rP   r:   rV   	CERT_NONEr   propertyr   r   r   r   r  r   r#  r&  rC  r   r   r   r   r   r      s     &,@F<B+)-(,'+!'26ao&*"&#).2"2626""" 6:(,)-)*"# 04*+AE596:+// ]]6:"&gk0448"'mlS7lS lS 	lS
 lS lS $lS >lS lS :lS lS lS 'lS &lS !%lS  !lS" 0#lS$ _%lS& $'lS( )lS*  +lS, !-lS. /lS0 ,1lS2 3lS4 05lS6 07lS8 9lS: ;lS< =lS> ?lS@ 4AlSB ClSD &ElSF 'GlSH $'IlSJ KlSL  MlSN OlSP $.QlSR %(SlST ?UlSV 3WlSX 4YlSZ )[lS\ ]lS^ _lS` 4alSb  clSd eelSf .glSh ilSj (2klSl  mlS\ ' ' W W 5 5*BX&kZ
@.` 9 9r   r   rS   )r^   zstr | os.PathLike[str]r_   rI  rT   rE  r`   r9   ra   r9   rb   rI  rc   rE  rd   zlist[str] | Noner  r  )rm   r   r  r   )r|   	list[str]r}   rP  r  ztuple[list[str], list[Path]])r   rK  r  rP  )G
__future__r   r'   r  r   r   logging.configr   r.  rV   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WSProtocolTyperH  LoopFactoryTyperJ  CRITICALERRORWARNINGrE   DEBUGr3   __annotations__r4   r5   r6   r7   r8   PROTOCOL_TLS_SERVERr:   r   rP   r   r   rg   rk   r   r   r   r   r   r   <module>rj     s{   "      	  
 
 / (  # #  / * F + 4 E C 2  => UV*+HI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g9 g9r   