NurseCitizenDeveloper's picture
Deploy Open Nursing Validator (Docker)
6d12932 verified
from typing import List, Optional
from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import Field
import os
import logging
logger = logging.getLogger(__name__)
class Settings(BaseSettings):
"""
Application configuration via environment variables.
"""
model_config = SettingsConfigDict(
env_file=".env",
env_file_encoding="utf-8",
extra="ignore"
)
# Application
APP_ENV: str = Field(default="development")
LOG_LEVEL: str = Field(default="INFO")
LOG_FILE: str = Field(default="/tmp/nursing_validator.log")
# Security / Users
# IMPORTANT: In production, these must be set via env vars.
# Default values are provided for development convenience only.
ADMIN_PASSWORD: str = Field(default="change_me_admin")
NURSE_PASSWORD: str = Field(default="change_me_nurse")
CLINICIAN_PASSWORD: str = Field(default="change_me_clinician")
# Database
USE_DATABASE: bool = Field(default=True)
DB_TYPE: str = Field(default="sqlite") # postgres or sqlite
SQLITE_DB_PATH: str = Field(default="nursing_validator.db")
# Postgres Settings
DB_HOST: str = Field(default="localhost")
DB_PORT: str = Field(default="5432")
DB_NAME: str = Field(default="nursing_validator")
DB_USER: str = Field(default="nursing_admin")
DB_PASSWORD: str = Field(default="nursing_password")
DB_POOL_MIN: int = Field(default=2)
DB_POOL_MAX: int = Field(default=20)
# Vector Database
VECTOR_DB_PATH: str = Field(default="chroma_db_fons")
LOCAL_DB_PATH: str = Field(default="/tmp/chroma_db_fons_fast")
EMBEDDING_MODEL: str = Field(default="text-embedding-ada-002")
# Azure OpenAI
AZURE_OPENAI_ENDPOINT: Optional[str] = Field(default=None)
AZURE_OPENAI_API_KEY: Optional[str] = Field(default=None)
AZURE_OPENAI_API_VERSION: Optional[str] = Field(default="2023-05-15")
AZURE_OPENAI_DEPLOYMENT: Optional[str] = Field(default=None)
# Streamlit Specific
STREAMLIT_SERVER_HEADLESS: bool = Field(default=True)
STREAMLIT_SERVER_ENABLE_CORS: bool = Field(default=False)
def is_production(self) -> bool:
return self.APP_ENV.lower() == "production"
def check_security(self):
"""Warn if using default insecure passwords."""
defaults = ["change_me_admin", "change_me_nurse", "change_me_clinician"]
if self.ADMIN_PASSWORD in defaults or \
self.NURSE_PASSWORD in defaults or \
self.CLINICIAN_PASSWORD in defaults:
logger.warning(
"SECURITY WARNING: Default passwords are in use. "
"Set ADMIN_PASSWORD, NURSE_PASSWORD, and CLINICIAN_PASSWORD in .env."
)
# Create a global instance
settings = Settings()
settings.check_security()