o
    ß’Oj¯_  ã                
   @  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œZ7de6d< ddd d!d"dœZ8d#e6d$< d%d%d&dœZ9de6d'< dd(d)d*dœZ:d#e6d+< g d¢Z;d,e6d-< e	j<Z=d.e6d/< d0Z>d1d2d3d4dd5œd6d7d8œd9œd:d;d<d=œd>d;d?d=œd9œd:gd@d2dAœdBd@id>gd@d2dAœdCœdDœZ?dEe6dF< e @dG¡ZAdgdTdU„ZBdhdYdZ„ZCdid_d`„ZDdjdcdd„ZEG dedf„ dfƒZFdS )ké    )Ú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   úT/var/www/html/pharmsmart-cdr-gen/venv/lib/python3.10/site-packages/uvicorn/config.pyr      s    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)r8   r9   )ÚdefaultÚaccessr;   zlogging.StreamHandlerzext://sys.stderr)Ú	formatterÚclassÚstreamr<   zext://sys.stdoutÚINFO)ÚhandlersÚlevelÚ	propagaterB   )Úuvicornúuvicorn.errorúuvicorn.access)ÚversionÚdisable_existing_loggersÚ
formattersrA   Úloggerszdict[str, Any]ÚLOGGING_CONFIGrE   Úcertfileústr | os.PathLike[str]Úkeyfileústr | os.PathLike[str] | NoneÚpasswordú
str | NoneÚssl_versionÚ	cert_reqsÚca_certsÚciphersÚreturnússl.SSLContextc           	        sX   t  |¡}ˆ r‡ fdd„nd }| | ||¡ t  |¡|_|r#| |¡ |r*| |¡ |S )Nc                     s   ˆ S ©Nr   r   ©rP   r   r   Ú<lambda>   s    z$create_ssl_context.<locals>.<lambda>)ÚsslÚ
SSLContextÚload_cert_chainÚ
VerifyModeÚverify_modeÚload_verify_locationsÚset_ciphers)	rL   rN   rP   rR   rS   rT   rU   ÚctxÚget_passwordr   rY   r   Úcreate_ssl_contextu   s   
	

rd   Úpathr   Úboolc                 C  s0   z|   ¡ s	|  ¡ } |  ¡ W S  ty   Y dS w )NF)Úis_absoluteÚresolveÚis_dirÚOSError)re   r   r   r   ri   ‰   s   
ÿri   Ú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 rX   )rh   )Úxr   r   r   rZ   ¦   s    z)resolve_reload_patterns.<locals>.<lambda>c                 S  s   h | ]}t |ƒr|’qS r   )ri   )Ú.0Úreload_pathr   r   r   Ú	<setcomp>§   s    z*resolve_reload_patterns.<locals>.<setcomp>r7   )ÚlistÚsetÚmapr   ÚcopyÚcwdÚappendri   ÚglobÚrangeÚlenÚparentsÚ
difference)
rk   rm   Ú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 rX   )Ú
isinstanceÚstrrs   rt   )r‡   r   r   r   Ú_normalize_dirs¶   s
   
r‹   c                3   @  sô   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	f3dudYdZ„Zedvd]d^„ƒZ	edwd_d`„ƒZ
edwdadb„ƒZdxddde„Zdydgdh„Zdxdidj„Zdxdkdl„Zdzdndo„Zd{dqdr„Zedwdsdt„ƒZdS )|ÚConfigú	127.0.0.1i@  Nr   i   é    g      4@TFg      Ð?Ú r   i   é   é   Úappú*ASGIApplication | Callable[..., Any] | strÚhostrŠ   Úportr4   ÚudsrQ   Úfdú
int | NoneÚloopúLoopFactoryType | strÚhttpú/type[asyncio.Protocol] | HTTPProtocolType | strÚwsú-type[asyncio.Protocol] | WSProtocolType | strÚws_max_sizeÚws_max_queueÚws_ping_intervalúfloat | NoneÚws_ping_timeoutÚws_per_message_deflaterf   ÚlifespanÚLifespanTypeÚenv_filerO   Ú
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_passwordrR   Ú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_contextvarsc5           :   
   C  s  || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|pBd| _|| _|| _|| _|| _| | _|!| _|"| _|#| _|$| _|%| _|&| _ |'| _!|(| _"|)| _#|*| _$|+| _%|,| _&|-| _'|.| _(|/| _)|0| _*|1p†g | _+g | _,|2| _-|3| _.|4| _/d| _0|  1¡  g | _2g | _3g | _4g | _5|s­|s­|rµ| j6sµt7 8d¡ | j6�r8t9|ƒ}t9|ƒ}t9|ƒ}t:||ƒ\| _4| _2t:|g ƒ\| _5| _3| j2 ;¡ }5| j3D ]$}6|5D ]}7|6|7ksï|6|7j<v �rz| j2 =|7¡ W qã t>�y   Y qãw qãqß| j5D ]}8|8| j4v �r| j4 =|8¡ �q| j2�s*|�r$t7 8d|¡ t? @¡ g| _2t7 AdtBtCtDtE| j2ƒƒƒ¡ |d u�rNddlFmG}9 t7 Ad|¡ |9|d	� |d u �rad
tHjIv �ratJtHjId
 ƒ| _|  |d u �rqtHjI Kdd¡| _Ln|| _L| j�r…| jdk�r‡t7 8d¡ d S d S d S )Nr7   FzcCurrent configuration will not reload as not all conditions are met, please refer to documentation.zeProvided reload directories %s did not contain valid directories, watching current working directory.z/Will watch for changes in these directories: %sr   )Úload_dotenvzLoading environment from '%s')Údotenv_pathÚWEB_CONCURRENCYÚFORWARDED_ALLOW_IPSr�   z4"workers" flag is ignored when reloading is enabled.)Mr’   r”   r•   r–   r—   r™   r›   r�   rŸ   r    r¡   r£   r¤   r¥   r¨   rª   r¬   r:   r®   r°   r²   r¶   r·   r¸   r¹   r»   r¼   r½   r¾   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   rÆ   rÇ   rÈ   rR   rÉ   rÊ   rË   rÌ   rÎ   Úencoded_headersrÐ   rÑ   rÒ   ÚloadedÚconfigure_loggingr±   Úreload_dirs_excludesr´   rµ   Úshould_reloadÚloggerr*   r‹   r†   rv   r|   ÚremoveÚ
ValueErrorr   rw   r+   Úsortedrs   ru   rŠ   ÚdotenvrÓ   ÚosÚenvironr4   Ú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È   rR   rÉ   rÊ   rË   rÌ   rÎ   rÐ   rÑ   rÒ   Úreload_dirs_tmpÚ	directoryÚreload_directoryr�   rÓ   r   r   r   Ú__init__¿   sÎ   7

ÿ

ÿýÿ
€ýþ


ÿzConfig.__init__rV   ú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_versionk  s
   ý
zConfig.asgi_versionc                 C  s   t | jp	| jp	| jƒS rX   )rf   rÆ   rÇ   rÌ   ©rä   r   r   r   Úis_sslt  s   zConfig.is_sslc                 C  s   t | jp| jdkƒS )Nr7   )rf   r°   r¶   rì   r   r   r   Úuse_subprocessx  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)TFrI   r;   r:   r<   z.json)z.yamlz.ymlr   zVInstall the PyYAML package or uvicorn[standard] to use `--log-config` with YAML files.F)rH   rE   rF   zuvicorn.asgi)ÚloggingÚaddLevelNamer   r¨   r‰   rá   ÚPathLikeÚfspathÚdictr:   ÚconfigÚ
dictConfigrŠ   ÚendswithÚopenÚjsonÚloadÚyamlÚImportErrorÚ	safe_loadÚ
fileConfigrª   r.   ÚlowerÚ	getLoggerÚsetLevelr¬   rA   rC   )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           	   
     sx  ˆ j rJ ‚ˆ jd ur+d‡ fdd„}ˆ  ˆ |¡}t|tjƒs'tdt|ƒj› �ƒ‚|ˆ _nˆ jrGˆ j	s3J ‚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ƒrwtt ˆ jˆ j¡ƒ}|ˆ _nˆ jˆ _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ãt-ˆ j"dƒ}nt+ .ˆ j"¡rït/ˆ j"ƒ}nt0ˆ j"dd ƒ}t/|ƒ}|rþdndˆ _*ˆ j*dk�rt1ˆ j"ƒˆ _"d ˆ _nˆ j*dk�rt2ˆ j"ƒˆ _"t$ 3¡ t4k�r*t5ˆ j"ƒˆ _"ˆ j6�r7t7ˆ j"ˆ j8d�ˆ _"dˆ _ d S )NrV   rW   c                	     s2   ˆ 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.©rN   rL   rP   rR   rS   rT   rU   )	rÇ   ÚRuntimeErrorrd   rÆ   rÈ   rR   rÉ   rÊ   rË   r   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)rp   Ú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)rV   rW   )9rØ   rÌ   r‰   r[   r\   Ú	TypeErrorÚtyper   rí   rÇ   rd   rÆ   rÈ   rR   rÉ   rÊ   rË   rÎ   rõ   r¸   r×   r›   rŠ   r   r/   rã   Úhttp_protocol_classr�   r0   Úws_protocol_classr1   r¥   Úlifespan_classr
  Ú
loaded_apprÐ   rÜ   r)   r  r  r  r*   r®   ÚinspectÚisclassÚhasattrÚ
isfunctionr   Úgetattrr   r   ÚgetEffectiveLevelr   r   r·   r   rº   )	rä   r  Úcontextr×   r  r  r	  Ú
use_asgi_3Ú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™   r2   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)Úfamilyr7   Úhttpsr›   ÚextraÚcolor_message)r–   ÚsocketÚAF_UNIXÚSOCK_STREAMÚbindrá   Úchmodrj   rÜ   r)   r  r  r  r
   r—   ÚfromfdÚgetsocknameÚAF_INETr”   ÚAF_INET6Ú
setsockoptÚ
SOL_SOCKETÚSO_REUSEADDRr•   rí   r+   Úset_inheritable)rä   re   ÚsockÚ	uds_permsr	  ÚmessageÚsock_name_formatr1  Úlogger_argsÚfd_name_formatr.  Úaddr_formatÚprotocol_namer   r   r   Úbind_socket&  sV   


€þ


€þ
zConfig.bind_socketc                 C  s   t | jtƒo| jS rX   )r‰   r’   rŠ   r°   rì   r   r   r   rÛ   V  s   zConfig.should_reload)hr’   r“   r”   rŠ   r•   r4   r–   rQ   r—   r˜   r™   rš   r›   rœ   r�   rž   rŸ   r4   r    r4   r¡   r¢   r£   r¢   r¤   rf   r¥   r¦   r§   rO   r¨   r©   rª   r«   r¬   rf   r:   r­   r®   r¯   r°   rf   r±   rˆ   r²   r³   r´   rˆ   rµ   rˆ   r¶   r˜   r·   rf   r¸   rf   r¹   rf   rº   rˆ   r»   rŠ   r¼   r˜   r½   r˜   r¾   r4   r¿   r4   rÀ   r4   rÁ   r4   rÂ   r˜   rÃ   r4   rÄ   rÅ   rÆ   rO   rÇ   rO   rÈ   rQ   rR   r4   rÉ   r4   rÊ   rO   rË   rQ   rÌ   rÍ   rÎ   rÏ   rÐ   rf   rÑ   r˜   rÒ   rf   )rV   ré   )rV   rf   )rV   rï   )rV   r   )rV   r(  )rV   r+  )r   r   r   rK   r5   r[   Ú	CERT_NONErè   Úpropertyrë   rí   rî   rÙ   r
  rû   r'  r*  rG  rÛ   r   r   r   r   rŒ   ¾   sˆ    Ë -

,

b

0rŒ   )rL   rM   rN   rO   rP   rQ   rR   r4   rS   r4   rT   rO   rU   rQ   rV   rW   )re   r   rV   rf   )rk   rl   rm   rl   rV   rn   )r‡   rˆ   rV   rl   )GÚ
__future__r   r#   r  rú   rñ   Úlogging.configrá   r2  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ÚWARNINGr@   ÚDEBUGr.   Ú__annotations__r/   r0   r1   r2   r3   ÚPROTOCOL_TLS_SERVERr5   r  rK   r  rÜ   rd   ri   r†   r‹   rŒ   r   r   r   r   Ú<module>   s°    
ú	ýûýüýþúýýúýæ
!


	
$