113 Zeilen
4.1 KiB
Python
113 Zeilen
4.1 KiB
Python
"""
|
|
Configuration for GUI refactoring
|
|
Manages feature flags and refactoring settings
|
|
"""
|
|
|
|
import os
|
|
import json
|
|
from pathlib import Path
|
|
from utils.logger import logger
|
|
|
|
class RefactoringConfig:
|
|
"""Manages refactoring feature flags"""
|
|
|
|
CONFIG_FILE = "refactoring_config.json"
|
|
DEFAULT_FLAGS = {
|
|
'USE_GITEA_HANDLER': True, # Enable for Progress Bar support
|
|
'USE_PROCESS_HANDLER': True, # Enable for better logging
|
|
'USE_PROJECT_HANDLER': False,
|
|
'USE_UI_HELPERS': False,
|
|
'ENABLE_DEBUG_LOGGING': False,
|
|
'FORCE_ORIGINAL_IMPLEMENTATION': False # Emergency override
|
|
}
|
|
|
|
def __init__(self):
|
|
self.config_path = Path.home() / ".claude_project_manager" / self.CONFIG_FILE
|
|
self.flags = self.DEFAULT_FLAGS.copy()
|
|
self._load_config()
|
|
self._check_env_overrides()
|
|
|
|
def _load_config(self):
|
|
"""Load configuration from file"""
|
|
try:
|
|
if self.config_path.exists():
|
|
with open(self.config_path, 'r') as f:
|
|
loaded_flags = json.load(f)
|
|
# Only update known flags
|
|
for key, value in loaded_flags.items():
|
|
if key in self.flags:
|
|
self.flags[key] = value
|
|
logger.info(f"Loaded refactoring flag: {key} = {value}")
|
|
except Exception as e:
|
|
logger.error(f"Failed to load refactoring config: {e}")
|
|
|
|
def _check_env_overrides(self):
|
|
"""Check for environment variable overrides"""
|
|
# Global override
|
|
if os.getenv('CPM_USE_NEW_HANDLERS'):
|
|
logger.info("Enabling all refactored handlers via environment variable")
|
|
for key in ['USE_GITEA_HANDLER', 'USE_PROCESS_HANDLER',
|
|
'USE_PROJECT_HANDLER', 'USE_UI_HELPERS']:
|
|
self.flags[key] = True
|
|
|
|
# Individual overrides
|
|
for flag in self.flags:
|
|
env_var = f"CPM_{flag}"
|
|
if os.getenv(env_var):
|
|
value = os.getenv(env_var).lower() in ('true', '1', 'yes')
|
|
self.flags[flag] = value
|
|
logger.info(f"Override from env: {flag} = {value}")
|
|
|
|
def save_config(self):
|
|
"""Save current configuration to file"""
|
|
try:
|
|
self.config_path.parent.mkdir(parents=True, exist_ok=True)
|
|
with open(self.config_path, 'w') as f:
|
|
json.dump(self.flags, f, indent=2)
|
|
logger.info(f"Saved refactoring config to {self.config_path}")
|
|
except Exception as e:
|
|
logger.error(f"Failed to save refactoring config: {e}")
|
|
|
|
def get(self, flag_name: str, default=None):
|
|
"""Get a flag value"""
|
|
return self.flags.get(flag_name, default)
|
|
|
|
def set(self, flag_name: str, value: bool):
|
|
"""Set a flag value"""
|
|
if flag_name in self.flags:
|
|
self.flags[flag_name] = value
|
|
logger.info(f"Set refactoring flag: {flag_name} = {value}")
|
|
else:
|
|
logger.warning(f"Unknown refactoring flag: {flag_name}")
|
|
|
|
def enable_handler(self, handler_name: str):
|
|
"""Enable a specific handler"""
|
|
# Map handler names to flags
|
|
handler_map = {
|
|
'gitea': 'USE_GITEA_HANDLER',
|
|
'process': 'USE_PROCESS_HANDLER',
|
|
'project': 'USE_PROJECT_HANDLER',
|
|
'ui': 'USE_UI_HELPERS' # Note: not _HANDLER suffix
|
|
}
|
|
flag_name = handler_map.get(handler_name.lower())
|
|
if flag_name and flag_name in self.flags:
|
|
self.set(flag_name, True)
|
|
else:
|
|
logger.warning(f"Unknown handler: {handler_name}")
|
|
|
|
def disable_all(self):
|
|
"""Disable all refactoring features"""
|
|
for flag in self.flags:
|
|
if flag.startswith('USE_'):
|
|
self.flags[flag] = False
|
|
logger.info("All refactoring features disabled")
|
|
|
|
def get_status(self):
|
|
"""Get status of all flags"""
|
|
return {
|
|
"config_file": str(self.config_path),
|
|
"flags": self.flags.copy()
|
|
}
|
|
|
|
# Global instance
|
|
refactoring_config = RefactoringConfig() |