Phase 1: initial codes
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
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")
|
||||
Reference in New Issue
Block a user