1
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2026-03-04 16:02:51 +01:00

fix(advanced_dock_area): replace sanitize_namespace with slugify

This commit is contained in:
2026-01-14 16:02:41 +01:00
committed by Jan Wyzula
parent bf7299c31e
commit 7c32d47f52
2 changed files with 13 additions and 11 deletions

View File

@@ -1,7 +1,9 @@
from __future__ import annotations
import os
from typing import Callable, Literal, Mapping, Sequence
from typing import Literal, Mapping, Sequence
import slugify
from bec_lib import bec_logger
from qtpy.QtCore import QTimer, Signal
@@ -21,7 +23,6 @@ from bec_widgets import BECWidget, SafeProperty, SafeSlot
from bec_widgets.cli.rpc.rpc_widget_handler import widget_handler
from bec_widgets.utils import BECDispatcher
from bec_widgets.utils.colors import apply_theme
from bec_widgets.utils.name_utils import sanitize_namespace
from bec_widgets.utils.toolbars.actions import (
ExpandableMenuAction,
MaterialIconAction,
@@ -81,6 +82,7 @@ from bec_widgets.widgets.services.bec_queue.bec_queue import BECQueue
from bec_widgets.widgets.services.bec_status_box.bec_status_box import BECStatusBox
from bec_widgets.widgets.utility.logpanel import LogPanel
from bec_widgets.widgets.utility.visual.dark_mode_button.dark_mode_button import DarkModeButton
from tests.unit_tests.test_modular_toolbar import separator_action
logger = bec_logger.logger
@@ -130,7 +132,7 @@ class AdvancedDockArea(DockAreaWidget):
self._profile_namespace_hint = profile_namespace
self._profile_namespace_auto = auto_profile_namespace
self._profile_namespace_resolved: str | None | object = _PROFILE_NAMESPACE_UNSET
self._instance_id = sanitize_namespace(instance_id) if instance_id else None
self._instance_id = slugify.slugify(instance_id, separator="_") if instance_id else None
self._auto_save_upon_exit = auto_save_upon_exit
self._profile_management_enabled = enable_profile_management
self._restore_initial_profile = restore_initial_profile
@@ -558,7 +560,7 @@ class AdvancedDockArea(DockAreaWidget):
if not candidate:
candidate = self.__class__.__name__
resolved = sanitize_namespace(candidate) if candidate else None
resolved = slugify.slugify(candidate, separator="_") if candidate else None
if not resolved:
resolved = "general"
self._profile_namespace_resolved = resolved # type: ignore[assignment]

View File

@@ -10,12 +10,12 @@ Policy:
from __future__ import annotations
import os
import re
import shutil
from functools import lru_cache
from pathlib import Path
from typing import Literal
import slugify
from bec_lib import bec_logger
from bec_lib.client import BECClient
from bec_lib.plugin_helper import plugin_package_name, plugin_repo_path
@@ -137,7 +137,7 @@ def _profiles_dir(segment: str, namespace: str | None) -> str:
str: Absolute directory path for the requested segment/namespace pair.
"""
base = os.path.join(_settings_profiles_root(), segment)
ns = sanitize_namespace(namespace)
ns = slugify.slugify(namespace, separator="_") if namespace else None
path = os.path.join(base, ns) if ns else base
os.makedirs(path, exist_ok=True)
return path
@@ -154,7 +154,7 @@ def _user_path_candidates(name: str, namespace: str | None) -> list[str]:
Returns:
list[str]: Ordered list of candidate user profile paths (.ini files).
"""
ns = sanitize_namespace(namespace)
ns = slugify.slugify(namespace, separator="_") if namespace else None
primary = os.path.join(_profiles_dir("user", ns), f"{name}.ini")
if not ns:
return [primary]
@@ -173,7 +173,7 @@ def _default_path_candidates(name: str, namespace: str | None) -> list[str]:
Returns:
list[str]: Ordered list of candidate default profile paths (.ini files).
"""
ns = sanitize_namespace(namespace)
ns = slugify.slugify(namespace, separator="_") if namespace else None
primary = os.path.join(_profiles_dir("default", ns), f"{name}.ini")
if not ns:
return [primary]
@@ -452,7 +452,7 @@ def list_profiles(namespace: str | None = None) -> list[str]:
Returns:
list[str]: Sorted unique profile names.
"""
ns = sanitize_namespace(namespace)
ns = slugify.slugify(namespace, separator="_") if namespace else None
def _collect_from(directory: str) -> set[str]:
if not os.path.isdir(directory):
@@ -553,11 +553,11 @@ def _last_profile_key(namespace: str | None, instance: str | None = None) -> str
Returns:
str: Scoped key string.
"""
ns = sanitize_namespace(namespace)
ns = slugify.slugify(namespace, separator="_") if namespace else None
key = SETTINGS_KEYS["last_profile"]
if ns:
key = f"{key}/{ns}"
inst = sanitize_namespace(instance) if instance else ""
inst = slugify.slugify(instance, separator="_") if instance else ""
if inst:
key = f"{key}@{inst}"
return key