learningfocused-mcp / src /config.py
LeoWalker's picture
MCP source
33516f7 verified
Raw History Blame Contribute Delete
2.68 kB
import os
from pathlib import Path
from dotenv import load_dotenv
# Load environment variables (no filesystem side-effects)
load_dotenv()
# Project Root
# src/config.py -> parent is src/ -> parent is project_root
PROJECT_ROOT = Path(__file__).resolve().parent.parent
# Data Directories
DOWNLOADS_DIR = PROJECT_ROOT / "podcast_downloads"
TRANSCRIPTS_DIR = PROJECT_ROOT / "transcripts"
SEGMENTED_DIR = PROJECT_ROOT / "segmented_transcripts"
METADATA_DIR = PROJECT_ROOT / "metadata_output"
COMBINED_DIR = PROJECT_ROOT / "combined_summaries"
# Local PersistentClient path. Cloud Run hydrates the GCS snapshot here (or
# to CHROMA_DIR if that env var is set). Not Chroma Cloud.
_chroma_override = os.getenv("CHROMA_DIR")
CHROMA_DIR = (
Path(_chroma_override).expanduser() if _chroma_override else PROJECT_ROOT / "chroma_db"
)
# Daily ingest run ledger (TASK-19). Also mirrored to gs://.../ingest_ledger/.
LEDGER_DIR = PROJECT_ROOT / "ingest_ledger"
# Substack/article artifact directories (parallel to podcast artifacts)
SUBSTACK_DIR = PROJECT_ROOT / "substack_articles"
SUBSTACK_METADATA_DIR = SUBSTACK_DIR / "metadata"
SUBSTACK_HTML_DIR = SUBSTACK_DIR / "html"
SUBSTACK_TEXT_DIR = SUBSTACK_DIR / "text"
ARTICLE_SUMMARIES_DIR = PROJECT_ROOT / "article_summaries"
# YouTube artifact directories (gitignored; see docs/youtube_pipeline.md)
YOUTUBE_DIR = PROJECT_ROOT / "youtube_videos"
YOUTUBE_METADATA_DIR = YOUTUBE_DIR / "metadata"
YOUTUBE_CAPTIONS_DIR = YOUTUBE_DIR / "captions"
YOUTUBE_AUDIO_DIR = YOUTUBE_DIR / "audio"
YOUTUBE_TRANSCRIPTS_DIR = YOUTUBE_DIR / "transcripts"
YOUTUBE_SEGMENTED_DIR = YOUTUBE_DIR / "segmented"
YOUTUBE_SUMMARIES_DIR = PROJECT_ROOT / "youtube_summaries"
DATA_DIRS = [
DOWNLOADS_DIR,
TRANSCRIPTS_DIR,
SEGMENTED_DIR,
METADATA_DIR,
COMBINED_DIR,
SUBSTACK_METADATA_DIR,
SUBSTACK_HTML_DIR,
SUBSTACK_TEXT_DIR,
ARTICLE_SUMMARIES_DIR,
YOUTUBE_METADATA_DIR,
YOUTUBE_CAPTIONS_DIR,
YOUTUBE_AUDIO_DIR,
YOUTUBE_TRANSCRIPTS_DIR,
YOUTUBE_SEGMENTED_DIR,
YOUTUBE_SUMMARIES_DIR,
LEDGER_DIR,
]
def ensure_data_dirs() -> None:
"""Create expected data directories.
Best practice: this should be called explicitly by entrypoints (run/process_all),
not executed as a side-effect of importing `src.config`.
"""
for directory in DATA_DIRS:
directory.mkdir(parents=True, exist_ok=True)
# External Config
RSS_FEED_URL = "https://rss.art19.com/future-of-education"
SUBSTACK_FEED_URL = "https://futureofeducation.substack.com/feed"
# Database Config
NEO4J_URI = os.getenv("NEO4J_URI")
NEO4J_USERNAME = os.getenv("NEO4J_USERNAME")
NEO4J_PASSWORD = os.getenv("NEO4J_PASSWORD")