Ë
    >È'jy  ã                   óp   — d dl mZ d dlmZ d dlmZmZmZmZ d dl	m
Z
mZ  G d„ de
«      Zedefd„«       Zy	)
é    )Ú	lru_cache)Ú
quote_plus)ÚFieldÚValidationInfoÚcomputed_fieldÚfield_validator)ÚBaseSettingsÚSettingsConfigDictc                   óx  — e Zd ZU dZ edd¬«      ZdZeed<   dZ	eed<   d	Z
eed
<    eddd¬«      Zeed<    edd¬«      Zeed<    edd¬«      Zeed<    edd¬«      Zeed<    edd¬«      Zeed<   dZeed<   dZeed <   dZeed!<   dZeed"<   dZeed#<    edd$d%d&¬'«      Zeed(<    ed)d*d+d,¬'«      Zeed-<    ed.d*d/¬0«      Zeed1<    ed2d$d3¬0«      Zeed4<   eed5<   eed6<   eed7<   eed8<   eed9<   eed:<    edd;¬«      Zeed<<    ed=d>¬«      Zeed?<    ed=d@¬«      ZeedA<    ed)d$dB¬«      ZeedC<    e ddD¬E«      e!dFedGefdH„«       «       Z" e ddddD¬E«      e!dFedIe#dGefdJ„«       «       Z$e%e&dGefdK„«       «       Z'e%e&dGefdL„«       «       Z(e%e&dGefdM„«       «       Z)e%e&dGefdN„«       «       Z*e%e&dGefdO„«       «       Z+yP)QÚSettingszRApplication settings loaded from environment variables (and optional `.env` file).z.envÚignore)Úenv_fileÚextrazdev-only-change-in-productionÚ
secret_keyÚHS256Ú	algorithmé<   Úaccess_token_expire_minutesé
   é   é   )ÚdefaultÚgeÚleÚbcrypt_roundszapi/v1zILeading path for all versioned API routes (slashes allowed, e.g. api/v1).)r   ÚdescriptionÚ
api_prefixÚadminzOSingle URL segment for the admin panel (no slashes), e.g. admin or nurse-admin.Úadmin_url_nameÚuserz3Single URL segment for the user panel (no slashes).Úuser_url_nameÚhealthz1Single URL segment for the health check endpoint.Úhealth_pathÚ Údb_hosti8  Údb_portÚdb_nameÚdb_userÚdb_passwordé   é2   z9SQLAlchemy pool size for PostgreSQL (ignored for SQLite).)r   r   r   r   Údb_pool_sizeé   r   éd   z7Extra connections beyond pool_size before pool timeout.Údb_max_overflowi  z:Recycle pooled connections after N seconds (0 = disabled).)r   r   r   Údb_pool_recycleé   z:Seconds to wait for a free connection before TimeoutError.Údb_pool_timeoutÚ	smtp_hostÚ	smtp_portÚ	smtp_userÚsmtp_passwordÚ	smtp_fromÚsmtp_tlszLEmail address that receives contact form submissions. Defaults to SMTP_FROM.Úadmin_notify_emailÚuploadszKDirectory for community media (relative to project root, or absolute path).Úcommunity_upload_diruI   URL segment to serve uploaded files, e.g. uploads â†’ /api/v1/uploads/...Úcommunity_uploads_url_segmentéÈ   Úcommunity_max_upload_mbÚafter)ÚmodeÚvÚreturnc                 ó^   — |j                  «       j                  d«      }|st        d«      ‚|S )NÚ/zapi_prefix must not be empty)ÚstripÚ
ValueError)ÚclsrA   s     ú//var/www/html/kelly/kelly-backend/app/config.pyÚ_strip_api_prefixzSettings._strip_api_prefixU   s,   € ð �G‰G‹I�O‰O˜CÓ ˆÙÜÐ;Ó<Ð<Øˆó    Úinfoc                 ó€   — |j                  «       j                  d«      }|rd|v rt        |j                  › d�«      ‚|S )NrD   zH must be a single path segment without slashes (e.g. nurse-admin, user).)rE   rF   Ú
field_name)rG   rA   rK   s      rH   Ú_single_segmentzSettings._single_segment]   sI   € ð �G‰G‹I�O‰O˜CÓ ˆÙ�C˜1‘HÜØ—?‘?Ð#ð $,ð ,óð ð ˆrJ   c           
      óJ  — | j                   r| j                   j                  «       syt        | j                  «      }t        | j                  «      }| j                   j                  «       }| j
                  j                  «       xs d}d|› d|› d|› d| j                  › d|› �
S )Nzsqlite:///./app.dbÚpostgreszpostgresql+psycopg://Ú:Ú@rD   )r%   rE   r   r(   r)   r'   r&   )Úselfr    ÚpasswordÚhostÚnames        rH   Údatabase_urlzSettings.database_urlh   s�   € ð —’ §¡×!3Ñ!3Ô!5Ø'Ü˜$Ÿ,™,Ó'ˆÜ˜d×.Ñ.Ó/ˆØ�|‰|×!Ñ!Ó#ˆØ�|‰|×!Ñ!Ó#Ò1 zˆà# D 6¨¨8¨*°A°d°V¸1¸T¿\¹\¸NÈ!ÈDÈ6ÐRð	
rJ   c                 ó<   — | j                   rd| j                   › �S dS )z/Path prefix for versioned APIs, e.g. `/api/v1`.rD   )r   ©rS   s    rH   Úhttp_api_prefixzSettings.http_api_prefixu   s!   € ð )-¯ª��4—?‘?Ð#Ð$Ð@¸SÐ@rJ   c                 ó    — d| j                   › �S )z5Admin router prefix, e.g. `/admin` or `/nurse-admin`.rD   )r   rY   s    rH   Úadmin_router_prefixzSettings.admin_router_prefix{   s   € ð �4×&Ñ&Ð'Ð(Ð(rJ   c                 ó    — d| j                   › �S )NrD   )r!   rY   s    rH   Úuser_router_prefixzSettings.user_router_prefix�   s   € ð �4×%Ñ%Ð&Ð'Ð'rJ   c                 ó    — d| j                   › �S )z"Health route path, e.g. `/health`.rD   )r#   rY   s    rH   Úhealth_url_pathzSettings.health_url_path†   s   € ð �4×#Ñ#Ð$Ð%Ð%rJ   N),Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   Úmodel_configr   ÚstrÚ__annotations__r   r   Úintr   r   r   r   r!   r#   r%   r&   r'   r(   r)   r,   r/   r0   r2   Úboolr9   r;   r<   r>   r   ÚclassmethodrI   r   rN   r   ÚpropertyrW   rZ   r\   r^   r`   © rJ   rH   r   r      sñ  … Ù\á%¨v¸XÔF€Là5€J�Ó5Ø€IˆsÓØ')Ð Ó)Ù r¨a°BÔ7€M�3Ó7ñ ØØ_ô€J�ó ñ  ØØeô€N�Có ñ ØØIô€M�3ó ñ ØØGô€K�ó ð
 €GˆSÓØ€GˆSÓØ€GˆSÓØ€GˆSÓØ€K�ÓÙØØØØOô	€L�#ó ñ !ØØØØMô	€O�Só ñ !ØØØPô€O�Só ñ
 !ØØØPô€O�Só ð ƒNØƒNØƒNØÓØƒNØƒNÙ#ØØbôÐ˜ó ñ
 !&ØØaô!Ð˜#ó ñ */ØØ_ô*Ð! 3ó ñ $)°¸¸cÔ#BÐ˜SÓBá�\¨Ô0Øð #ð ¨#ò ó ó 1ðñ Ð% ¸ÈGÔTØð ð ¨>ð ¸cò ó ó Uðð Øð	
˜cò 	
ó ó ð	
ð ØðA ò Aó ó ðAð Øð) Sò )ó ó ð)ð Øð( Cò (ó ó ð(ð Øð& ò &ó ó ñ&rJ   r   rB   c                  ó   — t        «       S )N)r   rl   rJ   rH   Úget_settingsrn   �   s
   € ä‹:ÐrJ   N)Ú	functoolsr   Úurllib.parser   Úpydanticr   r   r   r   Úpydantic_settingsr	   r
   r   rn   rl   rJ   rH   Ú<module>rs      s>   ðÝ Ý #ç KÓ Kß >ôB&ˆ|ô B&ðJ ð�hò ó ñrJ   