Spaces:
Sleeping
Sleeping
Download src/config.py from LeoWalker/learningfocused-mcp: direct link, hf CLI and curl.
- Browser
- Download file 2.68 kB
-
https://huggingface.co/spaces/LeoWalker/learningfocused-mcp/resolve/main/src/config.py
- Command line
-
hf download hf://spaces/LeoWalker/learningfocused-mcp/src/config.py
-
curl -L -o config.py https://huggingface.co/spaces/LeoWalker/learningfocused-mcp/resolve/main/src/config.py
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") | |