From ba884f764399996ff6ae341ac971917e34700ca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=B0=B8=E8=B5=AB?= <1259085392@qq.com> Date: Tue, 10 Feb 2026 16:30:47 +0900 Subject: [PATCH] refactor: align ssl helper namespace and confirm usage --- astrbot/core/utils/http_ssl.py | 4 +- astrbot/core/utils/pip_installer.py | 95 ++++++++++++------- astrbot/utils/__init__.py | 1 + .../utils/http_ssl_common.py | 0 .../extension/McpServersSection.vue | 10 +- .../src/components/shared/PersonaForm.vue | 10 +- dashboard/src/views/ConfigPage.vue | 11 ++- dashboard/src/views/ConversationPage.vue | 11 ++- dashboard/src/views/PlatformPage.vue | 11 ++- dashboard/src/views/SessionManagementPage.vue | 11 ++- .../src/views/persona/PersonaManager.vue | 10 +- runtime_bootstrap.py | 2 +- 12 files changed, 120 insertions(+), 56 deletions(-) create mode 100644 astrbot/utils/__init__.py rename http_ssl_common.py => astrbot/utils/http_ssl_common.py (100%) diff --git a/astrbot/core/utils/http_ssl.py b/astrbot/core/utils/http_ssl.py index 3c2ca2ba8..ee0bbc0d0 100644 --- a/astrbot/core/utils/http_ssl.py +++ b/astrbot/core/utils/http_ssl.py @@ -4,7 +4,9 @@ import threading import aiohttp -from http_ssl_common import build_ssl_context_with_certifi as _build_ssl_context +from astrbot.utils.http_ssl_common import ( + build_ssl_context_with_certifi as _build_ssl_context, +) logger = logging.getLogger("astrbot") diff --git a/astrbot/core/utils/pip_installer.py b/astrbot/core/utils/pip_installer.py index 644e6f81b..6be259a1d 100644 --- a/astrbot/core/utils/pip_installer.py +++ b/astrbot/core/utils/pip_installer.py @@ -49,6 +49,57 @@ def _cleanup_added_root_handlers(original_handlers: list[logging.Handler]) -> No handler.close() +def _get_loader_for_package(package: object) -> object | None: + loader = getattr(package, "__loader__", None) + if loader is not None: + return loader + + spec = getattr(package, "__spec__", None) + if spec is None: + return None + return getattr(spec, "loader", None) + + +def _try_register_distlib_finder( + distlib_resources: object, + finder_registry: dict[type, object], + register_finder, + resource_finder: object, + loader: object, + package_name: str, +) -> bool: + loader_type = type(loader) + if loader_type in finder_registry: + return False + + try: + register_finder(loader_type, resource_finder) + except Exception as exc: + logger.warning( + "Failed to patch pip distlib finder for loader %s (%s): %s", + loader_type.__name__, + package_name, + exc, + ) + return False + + updated_registry = getattr(distlib_resources, "_finder_registry", finder_registry) + if isinstance(updated_registry, dict) and loader_type not in updated_registry: + logger.warning( + "Distlib finder patch did not take effect for loader %s (%s).", + loader_type.__name__, + package_name, + ) + return False + + logger.info( + "Patched pip distlib finder for frozen loader: %s (%s)", + loader_type.__name__, + package_name, + ) + return True + + def _patch_distlib_finder_for_frozen_runtime() -> None: global _DISTLIB_FINDER_PATCH_ATTEMPTED @@ -85,43 +136,21 @@ def _patch_distlib_finder_for_frozen_runtime() -> None: except Exception: continue - loader = getattr(package, "__loader__", None) - if loader is None: - loader = getattr(getattr(package, "__spec__", None), "loader", None) + loader = _get_loader_for_package(package) if loader is None: continue - loader_type = type(loader) - if loader_type in finder_registry: - continue - - try: - register_finder(loader, resource_finder) - except Exception as exc: - logger.warning( - "Failed to patch pip distlib finder for loader %s (%s): %s", - loader_type.__name__, - package_name, - exc, - ) - continue - - finder_registry = getattr( - distlib_resources, "_finder_registry", finder_registry - ) - if isinstance(finder_registry, dict) and loader_type not in finder_registry: - logger.warning( - "Distlib finder patch did not take effect for loader %s (%s).", - loader_type.__name__, - package_name, - ) - continue - - logger.info( - "Patched pip distlib finder for frozen loader: %s (%s)", - loader_type.__name__, + if _try_register_distlib_finder( + distlib_resources, + finder_registry, + register_finder, + resource_finder, + loader, package_name, - ) + ): + finder_registry = getattr( + distlib_resources, "_finder_registry", finder_registry + ) class PipInstaller: diff --git a/astrbot/utils/__init__.py b/astrbot/utils/__init__.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/astrbot/utils/__init__.py @@ -0,0 +1 @@ + diff --git a/http_ssl_common.py b/astrbot/utils/http_ssl_common.py similarity index 100% rename from http_ssl_common.py rename to astrbot/utils/http_ssl_common.py diff --git a/dashboard/src/components/extension/McpServersSection.vue b/dashboard/src/components/extension/McpServersSection.vue index 8a0e51803..95b679580 100644 --- a/dashboard/src/components/extension/McpServersSection.vue +++ b/dashboard/src/components/extension/McpServersSection.vue @@ -218,7 +218,10 @@ import axios from 'axios'; import { VueMonacoEditor } from '@guolao/vue-monaco-editor'; import ItemCard from '@/components/shared/ItemCard.vue'; import { useI18n, useModuleI18n } from '@/i18n/composables'; -import { askForConfirmation as askForConfirmationDialog } from '@/utils/confirmDialog'; +import { + askForConfirmation as askForConfirmationDialog, + useConfirmDialog +} from '@/utils/confirmDialog'; export default { name: 'McpServersSection', @@ -229,7 +232,8 @@ export default { setup() { const { t } = useI18n(); const { tm } = useModuleI18n('features/tooluse'); - return { t, tm }; + const confirmDialog = useConfirmDialog(); + return { t, tm, confirmDialog }; }, data() { return { @@ -386,7 +390,7 @@ export default { async deleteServer(server) { const serverName = server.name || server; const message = this.tm('dialogs.confirmDelete', { name: serverName }); - if (!(await askForConfirmationDialog(message, this.$confirm))) { + if (!(await askForConfirmationDialog(message, this.confirmDialog))) { return; } diff --git a/dashboard/src/components/shared/PersonaForm.vue b/dashboard/src/components/shared/PersonaForm.vue index 2dff1da33..931083b30 100644 --- a/dashboard/src/components/shared/PersonaForm.vue +++ b/dashboard/src/components/shared/PersonaForm.vue @@ -307,7 +307,10 @@