Files
StockMind/stockmind/utils/config.py
T
2026-05-26 11:04:27 -04:00

71 lines
2.1 KiB
Python

import os
from pathlib import Path
from dotenv import load_dotenv
_env_loaded = False
def _load_env():
global _env_loaded
if not _env_loaded:
env_path = Path(__file__).parent.parent.parent / ".env"
load_dotenv(env_path)
_env_loaded = True
class Config:
def __init__(self):
_load_env()
self._db_session = None
def get(self, key: str, default: str = "") -> str:
_load_env()
return os.getenv(key, default)
def get_setting(self, key: str, default: str = "") -> str:
from db.database import get_session
from db.models import Setting
try:
with get_session() as session:
row = session.query(Setting).filter_by(key=key).first()
if row:
return row.value
except Exception:
pass
return default
def set_setting(self, key: str, value: str) -> None:
from db.database import get_session
from db.models import Setting
with get_session() as session:
row = session.query(Setting).filter_by(key=key).first()
if row:
row.value = value
else:
session.add(Setting(key=key, value=value))
session.commit()
@property
def anthropic_key(self) -> str:
return self.get("ANTHROPIC_API_KEY") or self.get_setting("anthropic_api_key")
@property
def news_api_key(self) -> str:
return self.get("NEWS_API_KEY") or self.get_setting("news_api_key")
@property
def schwab_app_key(self) -> str:
return self.get("SCHWAB_APP_KEY") or self.get_setting("schwab_app_key")
@property
def schwab_app_secret(self) -> str:
return self.get("SCHWAB_APP_SECRET") or self.get_setting("schwab_app_secret")
@property
def robinhood_username(self) -> str:
return self.get("ROBINHOOD_USERNAME") or self.get_setting("robinhood_username")
@property
def robinhood_password(self) -> str:
return self.get("ROBINHOOD_PASSWORD") or self.get_setting("robinhood_password")