57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
"""Storage path helpers — multi-instance via BOT_INSTANCE_ID env var.
|
|
|
|
Without BOT_INSTANCE_ID (default):
|
|
db_path("prefix.db") -> bot/db/prefix.db
|
|
jsondb_path("x.json") -> bot/jsondb/x.json
|
|
|
|
With BOT_INSTANCE_ID=prod-a:
|
|
db_path("prefix.db") -> bot/db/prod-a/prefix.db
|
|
jsondb_path("x.json") -> bot/db/prod-a/jsondb/x.json
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
from pathlib import Path
|
|
|
|
_BOT_ROOT = Path(__file__).resolve().parent.parent
|
|
_INSTANCE_ID = os.getenv("BOT_INSTANCE_ID", "").strip()
|
|
|
|
|
|
def _instance_db_dir() -> Path:
|
|
base = _BOT_ROOT / "db"
|
|
if _INSTANCE_ID:
|
|
base = base / _INSTANCE_ID
|
|
base.mkdir(parents=True, exist_ok=True)
|
|
return base
|
|
|
|
|
|
def db_path(filename: str) -> str:
|
|
"""SQLite and other files under bot/db/ (or bot/db/<instance>/)."""
|
|
return str(_instance_db_dir() / filename)
|
|
|
|
|
|
def jsondb_path(filename: str) -> str:
|
|
"""JSON config files — bot/jsondb/ or bot/db/<instance>/jsondb/."""
|
|
if _INSTANCE_ID:
|
|
base = _instance_db_dir() / "jsondb"
|
|
else:
|
|
base = _BOT_ROOT / "jsondb"
|
|
base.mkdir(parents=True, exist_ok=True)
|
|
return str(base / filename)
|
|
|
|
|
|
def bot_root_json_path(filename: str) -> str:
|
|
"""Legacy JSON at bot/<filename> (e.g. ignore.json) — isolated per instance when set."""
|
|
if _INSTANCE_ID:
|
|
return jsondb_path(filename)
|
|
return str(_BOT_ROOT / filename)
|
|
|
|
|
|
def resolve_db_path(path: str) -> str:
|
|
"""Normalize legacy 'db/file.db' strings (safety net for API layer)."""
|
|
if path.startswith("db/"):
|
|
return db_path(path[3:])
|
|
if path.startswith("jsondb/"):
|
|
return jsondb_path(path[7:])
|
|
return path
|