
    Oj                     x    S r SSKJr  SSKJr  SSKJr  SSKJrJ	r	   " S S\5      r
\S\
4S	 j5       r\" 5       rg
)a  
config.py

Centralized application configuration for LeafDoctor AI.

Configuration values are loaded from the .env file using
pydantic-settings.

Example .env

APP_NAME=LeafDoctor AI
APP_VERSION=1.0.0

DB_HOST=localhost
DB_PORT=5432
DB_NAME=leafdoctor
DB_USER=postgres
DB_PASSWORD=postgres

GEMINI_API_KEY=xxxxxxxxxxxxxxxxxxxx

UPLOAD_DIR=uploads
DATA_DIR=data

LOG_LEVEL=INFO
DEBUG=False
    )	lru_cache)Path)Field)BaseSettingsSettingsConfigDictc                      \ rS rSr% Sr\" SSSSS9rSr\\	S	'   S
r
\\	S'   Sr\\	S'   Sr\\	S'   \" SSS9r\\	S'   \" SSS9r\\	S'   \" SSS9r\\	S'   \" SSS9r\\	S'   \" SSS9r\\	S'   \" SSS9r\\	S'   Sr\\	S'   S r\\	S!'   S"r\\	S#'   \" \5      R9                  5       R:                  r\\	S$'   S%r\\	S&'   S'r \\	S('   S)r!\\	S*'   S+r"\#\S4   \	S,'   \$S-\4S. j5       r%\$S-\4S/ j5       r&\$S-\4S0 j5       r'S1r(g2)3Settings$   z
Application settings.
z.envzutf-8Tignore)env_fileenv_file_encodingcase_sensitiveextrazLeafDoctor AIAPP_NAMEz1.0.0APP_VERSIONFDEBUGINFO	LOG_LEVEL.zPostgreSQL Host)descriptionDB_HOSTzPostgreSQL PortDB_PORTzDatabase NameDB_NAMEzDatabase UserDB_USERzDatabase PasswordDB_PASSWORDzGoogle Gemini API KeyGEMINI_API_KEYzgemini-2.5-flashGEMINI_MODELg?GEMINI_TEMPERATUREi   GEMINI_MAX_OUTPUT_TOKENSBASE_DIRuploads
UPLOAD_DIRdataDATA_DIR
   MAX_UPLOAD_SIZE_MB)z.jpgz.jpegz.pngz.webpALLOWED_IMAGE_EXTENSIONSreturnc           
          SU R                    SU R                   SU R                   SU R                   SU R                   3
$ )Nzpostgresql+psycopg2://:@/)r   r   r   r   r   )selfs    &/var/www/html/leaf-doctor-v1/config.pydatabase_urlSettings.database_urlg   sI     %||nA ||nA||nA||n	
    c                 X    U R                   U R                  -  nUR                  SSS9  U$ NT)parentsexist_ok)r   r!   mkdirr,   paths     r-   upload_pathSettings.upload_pathr   s)    }}t.

4$
/r0   c                 X    U R                   U R                  -  nUR                  SSS9  U$ r2   )r   r#   r5   r6   s     r-   	data_pathSettings.data_pathx   s)    }}t}},

4$
/r0    N))__name__
__module____qualname____firstlineno____doc__r   model_configr   str__annotations__r   r   boolr   r   r   r   intr   r   r   r   r   r   floatr   r   __file__resolveparentr   r!   r#   r%   r&   tuplepropertyr.   r8   r;   __static_attributes__r=   r0   r-   r	   r	   $   s    &!	L $Hc#KE4Is *;<GS<*;<GS</:GS:/:GS:S.ABKB  1HINCI*L#* ##$'c' (^++-44Hd4JHc ! 1eCHo  
c 
 
 T  
 4  r0   r	   r'   c                      [        5       $ )z(
Returns a singleton Settings instance.
)r	   r=   r0   r-   get_settingsrP      s    
 :r0   N)rB   	functoolsr   pathlibr   pydanticr   pydantic_settingsr   r   r	   rP   settingsr=   r0   r-   <module>rV      sK   8     >X| Xv h   >r0   