o
    òT·jŠc  ã                
   @  s„  U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZmZ d dlmZ d dlmZ d dlmZmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZ d dlm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z( G dd„ de)ƒZ*ed Z+ed Z,ed Z-ed Z.ed Z/ej0ej1ej2ej3ej4e dœZ5de6d< dddddœZ7de6d< d dd!d"d#dœZ8d$e6d%< d&d&d'dœZ9de6d(< dd)d*d+d,dœZ:d$e6d-< g d¢Z;d.e6d/< e	j<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 @dI¡ZA	dkdldXdY„ZBdmd]d^„ZCdndcdd„ZDdodgdh„ZEG didj„ djƒZFdS )pé    )ÚannotationsN)Ú	AwaitableÚCallable)ÚRawConfigParser)ÚPath)ÚIOÚAnyÚLiteral)Ústyle)Úiscoroutinefunction)ÚASGIApplication)ÚImportFromStringErrorÚimport_from_string)ÚTRACE_LOG_LEVEL)ÚASGI2Middleware)ÚMessageLoggerMiddleware)ÚProxyHeadersMiddleware)ÚWSGIMiddlewarec                   @  s   e Zd ZdZdS )ÚUvicornDeprecationWarninga]  A custom deprecation warning for Uvicorn.

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

    Reference: https://sethmlarson.dev/deprecations-via-warnings-dont-work-for-python-libraries
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úQ/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/uvicorn/config.pyr      s    r   )ÚautoÚh11Ú	httptoolsÚzttp)r   ÚnoneÚ
websocketszwebsockets-sansioÚwsproto)r   ÚonÚoff)r   r   ÚasyncioÚuvloopÚ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Ústreamr>   zext://sys.stdoutÚINFO)ÚhandlersÚlevelÚ	propagaterD   )Úuvicornúuvicorn.errorúuvicorn.access)ÚversionÚdisable_existing_loggersÚ
formattersrC   Úloggerszdict[str, Any]ÚLOGGING_CONFIGrG   Úcertfileústr | os.PathLike[str]Úkeyfileústr | os.PathLike[str] | NoneÚpasswordú
str | NoneÚssl_versionÚ	cert_reqsÚca_certsÚciphersÚalpn_protocolsúlist[str] | NoneÚreturnússl.SSLContextc           
        sf   t  |¡}ˆ r‡ fdd„nd }	| | ||	¡ t  |¡|_|r#| |¡ |r*| |¡ |r1| |¡ |S )Nc                     s   ˆ S ©Nr   r   ©rR   r   r   Ú<lambda>‚   s    z$create_ssl_context.<locals>.<lambda>)ÚsslÚ
SSLContextÚload_cert_chainÚ
VerifyModeÚverify_modeÚload_verify_locationsÚset_ciphersÚset_alpn_protocols)
rN   rP   rR   rT   rU   rV   rW   rX   ÚctxÚget_passwordr   r]   r   Úcreate_ssl_contextw   s   




ri   Úpathr   Úboolc                 C  s0   z|   ¡ s	|  ¡ } |  ¡ W S  ty   Y dS w )NF)Úis_absoluteÚresolveÚis_dirÚOSError)rj   r   r   r   rn   Ž   s   
ÿrn   Úpatterns_listú	list[str]Údirectories_listútuple[list[str], list[Path]]c           
      C  sV  t ttt| ¡ ƒƒƒ}|  ¡ }t ¡ }| D ]+}|dkrq| |¡ tt|ƒƒr/| t|ƒ¡ q| |¡D ]}t|ƒr?| |¡ q4qt t|ƒƒ}t tt|ƒƒ}t tdd„ |ƒƒ}t dd„ |D ƒƒ}g }t	t
|ƒƒD ]/}t	|d t
|ƒƒD ]#}	|| ||	 jv r†| ||	 ¡ qs||	 || jv r–| || ¡ qsqht t|ƒ t|ƒ¡ƒ}t t|ƒƒ|fS )Nz.*c                 S  s   |   ¡ S r\   )rm   )Úxr   r   r   r^   «   s    z)resolve_reload_patterns.<locals>.<lambda>c                 S  s   h | ]}t |ƒr|’qS r   )rn   )Ú.0Úreload_pathr   r   r   Ú	<setcomp>¬   s    z*resolve_reload_patterns.<locals>.<setcomp>r9   )ÚlistÚsetÚmapr   ÚcopyÚcwdÚappendrn   ÚglobÚrangeÚlenÚparentsÚ
difference)
rp   rr   ÚdirectoriesÚpatternsÚcurrent_working_directoryÚpatternÚmatchÚchildrenÚjÚkr   r   r   Úresolve_reload_patterns—   s:   

€þ€ür‹   Údirsúlist[str] | str | Nonec                 C  s(   | d u rg S t | tƒr| gS tt| ƒƒS r\   )Ú
isinstanceÚstrrx   ry   )rŒ   r   r   r   Ú_normalize_dirs»   s
   
r�   c                4   @  sö   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f4dvdZd[„Zedwd^d_„ƒZ	edxd`da„ƒZ
edxdbdc„ƒZdydedf„Zdzdhdi„Zdydjdk„Zdydldm„Zd{dodp„Zd|drds„Zedxdtdu„ƒZdS )}ÚConfigz	127.0.0.1i@  Nr   Fi   é    g      4@Tg      Ð?Ú r   i   é   é   Úappú*ASGIApplication | Callable[..., Any] | strÚhostr�   Úportr6   ÚudsrS   Úfdú
int | NoneÚloopúLoopFactoryType | strÚhttpú/type[asyncio.Protocol] | HTTPProtocolType | strÚhttp2rk   Úwsú-type[asyncio.Protocol] | WSProtocolType | strÚws_max_sizeÚws_max_queueÚws_ping_intervalúfloat | NoneÚws_ping_timeoutÚws_per_message_deflateÚlifespanÚLifespanTypeÚenv_filerQ   Ú
log_configúJdict[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_passwordrT   Ússl_cert_reqsÚssl_ca_certsÚssl_ciphersÚssl_context_factoryúGCallable[[Config, Callable[[], ssl.SSLContext]], ssl.SSLContext] | NoneÚheadersúlist[tuple[str, str]] | NoneÚfactoryÚh11_max_incomplete_event_sizeÚreset_contextvarsc6           ;   
   C  s  || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|pEd| _|| _|| _|| _| | _|!| _|"| _|#| _|$| _|%| _|&| _ |'| _!|(| _"|)| _#|*| _$|+| _%|,| _&|-| _'|.| _(|/| _)|0| _*|1| _+|2p‰g | _,g | _-|3| _.|4| _/|5| _0d| _1|  2¡  g | _3g | _4g | _5g | _6|s°|s°|r¸| j7s¸t8 9d¡ | j7�r;t:|ƒ}t:|ƒ}t:|ƒ}t;||ƒ\| _5| _3t;|g ƒ\| _6| _4| j3 <¡ }6| j4D ]$}7|6D ]}8|7|8ksò|7|8j=v �rz| j3 >|8¡ W qæ t?�y   Y qæw qæqâ| j6D ]}9|9| j5v �r| j5 >|9¡ �q
| j3�s-|�r't8 9d|¡ t@ A¡ g| _3t8 BdtCtDtEtF| j3ƒƒƒ¡ |d u�rQddlGmH}: t8 Bd|¡ |:|d	� |d u �rdd
tIjJv �rdtKtIjJd
 ƒ| _|  |d u �rttIjJ Ldd¡| _Mn|| _M| j�rˆ| jdk�rŠt8 9d¡ d S d S d S )Nr9   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.)Nr–   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Í   rT   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-   Úsortedrx   rz   r�   ÚdotenvrØ   ÚosÚenvironr6   Ú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Ì   rÍ   rT   rÎ   rÏ   rÐ   rÑ   rÓ   rÕ   rÖ   r×   Úreload_dirs_tmpÚ	directoryÚreload_directoryr†   rØ   r   r   r   Ú__init__Ä   sÐ   8

ÿ

ÿýÿ
€ýþ


ÿzConfig.__init__rZ   úLiteral['2.0', '3.0']c                 C  s   ddddœ}|| j  S )Nz2.0z3.0)r(   r'   r)   )r³   )ré   Úmappingr   r   r   Úasgi_versionr  s
   ý
zConfig.asgi_versionc                 C  s   t | jp	| jp	| jƒS r\   )rk   rË   rÌ   rÑ   ©ré   r   r   r   Úis_ssl{  s   zConfig.is_sslc                 C  s   t | jp| jdkƒS )Nr9   )rk   rµ   r»   rñ   r   r   r   Úuse_subprocess  s   zConfig.use_subprocessÚNonec              
   C  sü  t  td¡ | jd ur»t| jtjƒrt | j¡| _t| jtƒr@| j	dv r8| j	| jd d d< | j	| jd d d< t j
 | j¡ n{t| jtƒrm| j d¡rmt| jƒ�}t |¡}t j
 |¡ W d   ƒ n1 sgw   Y  nNt| jtƒr²| j d¡r²zd	d l}W n ty� } ztd
ƒ|‚d }~ww t| jƒ�}| |¡}t j
 |¡ W d   ƒ n1 s¬w   Y  n	t j
j| jdd� | jd urét| jtƒrÎt| j ¡  }n| j}t  d¡ |¡ t  d¡ |¡ t  d¡ |¡ | jdu rüg t  d¡_dt  d¡_d S d S )NÚTRACE)TFrK   r=   r<   r>   z.json)z.yamlz.ymlr   zVInstall the PyYAML package or uvicorn[standard] to use `--log-config` with YAML files.F)rJ   rG   rH   zuvicorn.asgi)ÚloggingÚaddLevelNamer   r­   rŽ   ræ   ÚPathLikeÚfspathÚdictr<   ÚconfigÚ
dictConfigr�   ÚendswithÚopenÚjsonÚloadÚyamlÚImportErrorÚ	safe_loadÚ
fileConfigr¯   r0   ÚlowerÚ	getLoggerÚsetLevelr±   rC   rE   )ré   ÚfileÚloaded_configr  Úer¯   r   r   r   rÞ   ƒ  sV   


þ€ÿþ€ÿ
þ€

þzConfig.configure_loggingr   c              
   C  sL   zt | jƒW S  ty% } zt d| ¡ t t¡ W Y d}~dS d}~ww )z/Import the app and return it. Exits on failure.zError loading ASGI app. %sN)r   r–   r   rá   r+   ÚsysÚexitÚSTARTUP_FAILURE)ré   Úexcr   r   r   Úload_app¯  s   €þzConfig.load_appc           	   
     s²  ˆj rJ ‚ˆjrˆjdkrtdƒ‚tdƒ}|ˆ_ntˆjtƒr+tt 	ˆjˆj¡ƒˆ_nˆjˆ_t
ˆjdd ƒ‰ ˆjd ur]d‡ ‡fdd„}ˆ ˆ|¡}t|tjƒsYtd	t|ƒj› �ƒ‚|ˆ_n ˆjrzˆjseJ ‚tˆjˆjˆjˆjˆjˆjˆjˆ d
�ˆ_nd ˆ_dd„ ˆjD ƒ}dt|ƒvr“ˆjr“dg| n|ˆ_tˆjtƒrªtt 	ˆjˆj¡ƒ}|ˆ_ nˆjˆ_ tt!ˆj" ƒˆ_#ˆ $¡ ˆ_%zˆ %¡ ˆ_%W n  tyâ } zˆj&rØt' (d|¡ t) *t+¡ W Y d }~nd }~ww ˆj&sët' ,d¡ ˆj-dk�rt. /ˆj%¡rþt0ˆj%dƒ}nt. 1ˆj%¡�rt2ˆj%ƒ}nt
ˆj%dd ƒ}t2|ƒ}|�rdndˆ_-ˆj-dk�r.t3ˆj%ƒˆ_%d ˆ_ nˆj-dk�r:t4ˆj%ƒˆ_%t' 5¡ t6k�rGt7ˆj%ƒˆ_%ˆj8�rTt9ˆj%ˆj:d�ˆ_%dˆ_ d S )Nr   z®HTTP/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:AutoZttpProtocolrX   rZ   r[   c                
     s4   ˆj stdƒ‚tˆjˆj ˆjˆjˆjˆjˆjˆ d�S )Nzí`default_ssl_context_factory()` requires `ssl_certfile` to be set on `Config`. Either pass `ssl_certfile` (and optionally `ssl_keyfile`) or build the `SSLContext` directly inside `ssl_context_factory` without calling the default factory.©rP   rN   rR   rT   rU   rV   rW   rX   )	rÌ   ÚRuntimeErrorri   rË   rÍ   rT   rÎ   rÏ   rÐ   r   ©rX   ré   r   r   Údefault_factoryË  s   ÿøz$Config.load.<locals>.default_factoryz;`ssl_context_factory` must return an `ssl.SSLContext`, got r  c                 S  s(   g | ]\}}|  ¡  d ¡| d ¡f‘qS )Úlatin1)r  Úencode)ru   ÚkeyÚvaluer   r   r   Ú
<listcomp>ð  s   ( zConfig.load.<locals>.<listcomp>ó   server)r  s   uvicornz"Error loading ASGI app factory: %sz_ASGI app factory detected. Using it, but please consider setting the --factory flag explicitly.r   Ú	__await__Ú__call__r'   r(   r)   )Útrusted_hostsT)rZ   r[   );rÝ   r¡   rŸ   rã   r   Úhttp_protocol_classrŽ   r�   r1   rè   ÚgetattrrÑ   r_   r`   Ú	TypeErrorÚtyper   rò   rÌ   ri   rË   rÍ   rT   rÎ   rÏ   rÐ   rÓ   rú   r½   rÜ   r¢   r2   Úws_protocol_classr3   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  ÚcontextrÜ   r!  r  Ú
use_asgi_3Úcallr   r  r   r   ·  s�   

ÿ


ø
ÿý

€ýÿ
zConfig.loadc                 C  s   t dƒ‚)Na  The `setup_event_loop` method was replaced by `get_loop_factory` in uvicorn 0.36.0.
None of those methods are supposed to be used directly. If you are doing it, please let me know here: https://github.com/Kludex/uvicorn/discussions/2706. Thank you, and sorry for the inconvenience.)ÚAttributeErrorrñ   r   r   r   Úsetup_event_loop$  s   ÿzConfig.setup_event_loopú.Callable[[], asyncio.AbstractEventLoop] | Nonec              
   C  s|   | j tv rtt| j  ƒ}n%zt| j ƒW S  ty1 } zt d| ¡ t t¡ W Y d }~nd }~ww |d u r8d S || j	d�S )Nz,Error loading custom loop setup function. %s)ró   )
r�   r4   r   r   rá   r+   r  r  r  ró   )ré   Úloop_factoryr  r   r   r   Úget_loop_factory+  s   
€þzConfig.get_loop_factoryúsocket.socketc              
   C  sä  | j d urP| j }t tjtj¡}z| |¡ d}t | j |¡ W n ty< } zt 	|¡ t
 t¡ W Y d }~nd }~ww d}d}dt|dd� d }| j g}n�| jd urst | jtjtj¡}d}d}	dt|	dd� d }| ¡ g}njtj}
d	}| jr…d
| jv r…tj}
d}tj|
d�}| tjtjd¡ z| | j| jf¡ W n ty» } zt 	|¡ t
 t¡ W Y d }~nd }~ww d|› d�}dt|dd� d }| j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)Úfamilyr9   Ú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é   rj   ÚsockÚ	uds_permsr  ÚmessageÚsock_name_formatr7  Úlogger_argsÚfd_name_formatr4  Úaddr_formatÚprotocol_namer   r   r   Úbind_socket8  sV   


€þ


€þ
zConfig.bind_socketc                 C  s   t | jtƒo| jS r\   )rŽ   r–   r�   rµ   rñ   r   r   r   rà   h  s   zConfig.should_reload)jr–   r—   r˜   r�   r™   r6   rš   rS   r›   rœ   r�   rž   rŸ   r    r¡   rk   r¢   r£   r¤   r6   r¥   r6   r¦   r§   r¨   r§   r©   rk   rª   r«   r¬   rQ   r­   r®   r¯   r°   r±   rk   r<   r²   r³   r´   rµ   rk   r¶   r�   r·   r¸   r¹   r�   rº   r�   r»   rœ   r¼   rk   r½   rk   r¾   rk   r¿   r�   rÀ   r�   rÁ   rœ   rÂ   rœ   rÃ   r6   rÄ   r6   rÅ   r6   rÆ   r6   rÇ   rœ   rÈ   r6   rÉ   rÊ   rË   rQ   rÌ   rQ   rÍ   rS   rT   r6   rÎ   r6   rÏ   rQ   rÐ   rS   rÑ   rÒ   rÓ   rÔ   rÕ   rk   rÖ   rœ   r×   rk   )rZ   rî   )rZ   rk   )rZ   rô   )rZ   r   )rZ   r.  )rZ   r1  )r   r   r   rM   r7   r_   Ú	CERT_NONErí   Úpropertyrð   rò   ró   rÞ   r  r   r-  r0  rM  rà   r   r   r   r   r‘   Ã   sŠ    Ê /

,

m

0r‘   r\   )rN   rO   rP   rQ   rR   rS   rT   r6   rU   r6   rV   rQ   rW   rS   rX   rY   rZ   r[   )rj   r   rZ   rk   )rp   rq   rr   rq   rZ   rs   )rŒ   r�   rZ   rq   )GÚ
__future__r   r$   r$  rÿ   rö   Úlogging.configræ   r8  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ÚWARNINGrB   ÚDEBUGr0   Ú__annotations__r1   r2   r3   r4   r5   ÚPROTOCOL_TLS_SERVERr7   r  rM   r  rá   ri   rn   r‹   r�   r‘   r   r   r   r   Ú<module>   s¶    
ú	üûýûýþúýýúýæ
!ø

	
$