k8s-tool/k8s_tool/config.py
2025-10-25 21:11:59 +03:00

88 lines
3.1 KiB
Python

"""Configuration manager for k8s-tool."""
import json
import os
from pathlib import Path
from typing import List, Dict, Any
from rich.console import Console
console = Console()
class ConfigManager:
"""Manage application configuration."""
def __init__(self):
"""Initialize configuration manager."""
self.config_dir = Path.home() / ".config" / "k8s-tool"
self.config_file = self.config_dir / "k8s-tool.cfg"
self._ensure_config_dir()
self.config = self._load_config()
def _ensure_config_dir(self):
"""Ensure configuration directory exists."""
try:
self.config_dir.mkdir(parents=True, exist_ok=True)
except Exception as e:
console.print(f"[yellow]Warning:[/yellow] Could not create config directory: {e}")
def _load_config(self) -> Dict[str, Any]:
"""Load configuration from file."""
if not self.config_file.exists():
return {"favorites": []}
try:
with open(self.config_file, 'r') as f:
return json.load(f)
except Exception as e:
console.print(f"[yellow]Warning:[/yellow] Could not load config: {e}")
return {"favorites": []}
def _save_config(self):
"""Save configuration to file."""
try:
with open(self.config_file, 'w') as f:
json.dump(self.config, f, indent=2)
except Exception as e:
console.print(f"[red]Error:[/red] Could not save config: {e}")
def get_favorites(self) -> List[str]:
"""Get list of favorite namespaces."""
return self.config.get("favorites", [])
def add_favorite(self, namespace: str) -> bool:
"""Add namespace to favorites."""
favorites = self.config.get("favorites", [])
if namespace not in favorites:
favorites.append(namespace)
self.config["favorites"] = sorted(favorites)
self._save_config()
console.print(f"[green]✓[/green] Added [cyan]{namespace}[/cyan] to favorites")
return True
else:
console.print(f"[yellow]![/yellow] [cyan]{namespace}[/cyan] is already in favorites")
return False
def remove_favorite(self, namespace: str) -> bool:
"""Remove namespace from favorites."""
favorites = self.config.get("favorites", [])
if namespace in favorites:
favorites.remove(namespace)
self.config["favorites"] = favorites
self._save_config()
console.print(f"[green]✓[/green] Removed [cyan]{namespace}[/cyan] from favorites")
return True
else:
console.print(f"[yellow]![/yellow] [cyan]{namespace}[/cyan] is not in favorites")
return False
def is_favorite(self, namespace: str) -> bool:
"""Check if namespace is in favorites."""
return namespace in self.config.get("favorites", [])
def clear_favorites(self):
"""Clear all favorites."""
self.config["favorites"] = []
self._save_config()
console.print("[green]✓[/green] Cleared all favorites")