Files
daily-journal-prompt/backend/app/core/config.py

77 lines
2.2 KiB
Python

"""
Configuration settings for the application.
Uses Pydantic settings management with environment variable support.
"""
import os
from typing import List, Optional
from pydantic_settings import BaseSettings
from pydantic import AnyHttpUrl, validator
class Settings(BaseSettings):
"""Application settings."""
# API Settings
API_V1_STR: str = "/api/v1"
PROJECT_NAME: str = "Daily Journal Prompt Generator API"
VERSION: str = "1.0.0"
DEBUG: bool = False
ENVIRONMENT: str = "development"
# Server Settings
HOST: str = "0.0.0.0"
PORT: int = 8000
# CORS Settings
BACKEND_CORS_ORIGINS: List[AnyHttpUrl] = [
"http://localhost:3000", # Frontend dev server
"http://localhost:80", # Frontend production
]
# API Keys
DEEPSEEK_API_KEY: Optional[str] = None
OPENAI_API_KEY: Optional[str] = None
API_BASE_URL: str = "https://api.deepseek.com"
MODEL: str = "deepseek-chat"
# Application Settings
MIN_PROMPT_LENGTH: int = 500
MAX_PROMPT_LENGTH: int = 1000
NUM_PROMPTS_PER_SESSION: int = 3
CACHED_POOL_VOLUME: int = 20
HISTORY_BUFFER_SIZE: int = 60
FEEDBACK_HISTORY_SIZE: int = 30
# File Paths (relative to project root)
DATA_DIR: str = "data"
PROMPT_TEMPLATE_PATH: str = "data/ds_prompt.txt"
FEEDBACK_TEMPLATE_PATH: str = "data/ds_feedback.txt"
SETTINGS_CONFIG_PATH: str = "data/settings.cfg"
# Data File Names (relative to DATA_DIR)
PROMPTS_HISTORIC_FILE: str = "prompts_historic.json"
PROMPTS_POOL_FILE: str = "prompts_pool.json"
FEEDBACK_HISTORIC_FILE: str = "feedback_historic.json"
# Note: feedback_words.json is deprecated and merged into feedback_historic.json
@validator("BACKEND_CORS_ORIGINS", pre=True)
def assemble_cors_origins(cls, v: str | List[str]) -> List[str] | str:
"""Parse CORS origins from string or list."""
if isinstance(v, str) and not v.startswith("["):
return [i.strip() for i in v.split(",")]
elif isinstance(v, (list, str)):
return v
raise ValueError(v)
class Config:
"""Pydantic configuration."""
env_file = ".env"
case_sensitive = True
extra = "ignore"
# Create global settings instance
settings = Settings()