[Phase 1] Task 3: Create config.py — Configuration management #7

Closed
opened 2026-04-02 18:29:22 +02:00 by shoko · 0 comments
Owner

Task 3: Create config.py — Configuration management

Labels: phase-1, architecture
Dependency: None — can start immediately (parallel with Task 1, 2)

Goal

Create centralized configuration management with file-based config and environment variable overrides.

Files to create

  • config.py (at repo root)

Implementation

"""JIGAIDO Configuration Management."""

import json
import os
from pathlib import Path
from typing import Optional

# Default data directory
DEFAULT_DATA_DIR = Path.home() / ".jigaido"

class Config:
    """JIGAIDO configuration with precedence: ENV > config file > defaults."""
    
    def __init__(self):
        self.data_dir: Path = self._resolve_data_dir()
        self.bot_token: Optional[str] = os.environ.get("JIGAIDO_BOT_TOKEN")
    
    def _resolve_data_dir(self) -> Path:
        # Priority: JIGAIDO_DATA_DIR env > config file > default ~/.jigaido
        env_dir = os.environ.get("JIGAIDO_DATA_DIR")
        if env_dir:
            return Path(env_dir)
        
        config_file = Path("~/.jigaido/config.json").expanduser()
        if config_file.exists():
            with open(config_file) as f:
                config_data = json.load(f)
                if "data_dir" in config_data:
                    return Path(config_data["data_dir"])
        
        return DEFAULT_DATA_DIR
    
    def ensure_data_dir(self) -> None:
        """Ensure the data directory exists."""
        self.data_dir.mkdir(parents=True, exist_ok=True)

# Global config instance
config = Config()

Config file format (~/.jigaido/config.json)

{
    "data_dir": "/path/to/custom/data/dir"
}

Environment Variables

  • JIGAIDO_DATA_DIR — Override data directory
  • JIGAIDO_BOT_TOKEN — Telegram bot token (used by telegram-bot app)

Acceptance Criteria

  • Config class loads with correct precedence (ENV > config file > default)
  • config.data_dir returns a valid Path
  • config.ensure_data_dir() creates directory if missing
  • Config file is created at ~/.jigaido/config.json
## Task 3: Create config.py — Configuration management **Labels:** phase-1, architecture **Dependency:** None — can start immediately (parallel with Task 1, 2) ### Goal Create centralized configuration management with file-based config and environment variable overrides. ### Files to create - `config.py` (at repo root) ### Implementation ```python """JIGAIDO Configuration Management.""" import json import os from pathlib import Path from typing import Optional # Default data directory DEFAULT_DATA_DIR = Path.home() / ".jigaido" class Config: """JIGAIDO configuration with precedence: ENV > config file > defaults.""" def __init__(self): self.data_dir: Path = self._resolve_data_dir() self.bot_token: Optional[str] = os.environ.get("JIGAIDO_BOT_TOKEN") def _resolve_data_dir(self) -> Path: # Priority: JIGAIDO_DATA_DIR env > config file > default ~/.jigaido env_dir = os.environ.get("JIGAIDO_DATA_DIR") if env_dir: return Path(env_dir) config_file = Path("~/.jigaido/config.json").expanduser() if config_file.exists(): with open(config_file) as f: config_data = json.load(f) if "data_dir" in config_data: return Path(config_data["data_dir"]) return DEFAULT_DATA_DIR def ensure_data_dir(self) -> None: """Ensure the data directory exists.""" self.data_dir.mkdir(parents=True, exist_ok=True) # Global config instance config = Config() ``` ### Config file format (`~/.jigaido/config.json`) ```json { "data_dir": "/path/to/custom/data/dir" } ``` ### Environment Variables - `JIGAIDO_DATA_DIR` — Override data directory - `JIGAIDO_BOT_TOKEN` — Telegram bot token (used by telegram-bot app) ### Acceptance Criteria - [ ] Config class loads with correct precedence (ENV > config file > default) - [ ] `config.data_dir` returns a valid Path - [ ] `config.ensure_data_dir()` creates directory if missing - [ ] Config file is created at `~/.jigaido/config.json`
shoko added the architecturephase-1 labels 2026-04-02 18:34:40 +02:00
shoko closed this issue 2026-04-02 23:43:57 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: shoko/jigaido#7