Source code for oci_policy_analysis.presentation.qt.preferences

"""Qt preferences using the shared application settings file."""

from oci_policy_analysis.application.services.settings_service import SettingsService
from oci_policy_analysis.presentation.qt.themes import COLOR_THEMES


[docs] def load_preferences() -> dict: """Read existing settings and supply safe Qt defaults without loading OCI. Returns: dict: Shared settings with Qt defaults; saved log levels apply unless --verbose overrides them. """ settings = SettingsService.load().get() if settings.get('global_log_level') not in {'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'}: settings['global_log_level'] = 'INFO' settings.setdefault('log_levels', {}) settings.setdefault('usage_tracking_enabled', True) if settings.get('qt_theme') not in {'Light', 'Dark'}: settings['qt_theme'] = 'Light' if settings.get('qt_color_theme') not in COLOR_THEMES: settings['qt_color_theme'] = 'Forest' if settings.get('font_size') not in {'Small', 'Medium', 'Large', 'Extra Large'}: settings['font_size'] = 'Medium' return settings
[docs] def save_preferences(settings: dict, keys: tuple[str, ...]) -> None: """Merge only requested preferences, preserving other interfaces' settings. Args: settings: Current settings containing requested values. keys: Explicit settings to persist. Raises: OSError: Shared settings writer did not retain the requested values. """ service = SettingsService.load() updates = {key: settings[key] for key in keys if key in settings} service.update(updates) service.save() saved = SettingsService.load().get() if any(saved.get(key) != value for key, value in updates.items()): raise OSError('Could not save application preferences')