2a6863cf70
* test: add tests for star base class and config management - Add Star base class safety helper tests - Expand config management unit tests - Update cron manager tests Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * test: fix plugin_manager test isolation issues - Use local mock plugin instead of real network requests - Clear sys.modules cache for entire data module tree - Clear star_map and star_registry in teardown - Use pytest_asyncio.fixture for async fixture support Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * test: fix test isolation and compatibility issues - test_main.py: fix version comparison and path assertions for Windows - test_smoke.py: add missing apscheduler.triggers mock modules - test_tool_loop_agent_runner.py: update assertion for new interrupt behavior - test_api_key_open_api.py: use unique session IDs to avoid test conflicts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * test: add unit tests for _version_info comparisons * test: enhance plugin manager tests with mock implementations and improved assertions * test: add mock plugin builder and updater for plugin management tests * fix: resolve pipeline and star import cycles (#5353) * fix: resolve pipeline and star import cycles - Add bootstrap.py and stage_order.py to break circular dependencies - Export Context, PluginManager, StarTools from star module - Update pipeline __init__ to defer imports - Split pipeline initialization into separate bootstrap module Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: add logging for get_config() failure in Star class * fix: reorder logger initialization in base.py --------- Co-authored-by: whatevertogo <whatevertogo@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> * test: update cron job scheduling tests and refactor star base tests for clarity * test: expand star base tests for comprehensive coverage - Add tests for Star class initialization and context handling - Add tests for text_to_image with/without config - Add tests for html_render method - Add tests for initialize/terminate lifecycle methods - Add type hint validation tests for Context - Add circular import prevention tests Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: address PR review feedback - use TYPE_CHECKING instead of Any - pipeline/context.py: Use TYPE_CHECKING to import PluginManager instead of Any - pipeline/__init__.py: Add TYPE_CHECKING imports for __all__ exports to satisfy static analyzers - star/register/star_handler.py: Use TYPE_CHECKING to import AstrAgentContext instead of Any - tests: Remove invalid type hint tests that tested incorrect assumptions Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: improve TYPE_CHECKING pattern for circular import resolution - star/register/star_handler.py: Use AstrAgentContext instead of Any in generic types - star/context.py: Remove unnecessary else branch with CronJobManager = Any (with __future__ annotations, TYPE_CHECKING imports are sufficient) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: whatevertogo <whatevertogo@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com>
110 lines
3.3 KiB
Python
110 lines
3.3 KiB
Python
"""Pipeline package exports.
|
|
|
|
This module intentionally avoids eager imports of all pipeline stage modules to
|
|
prevent import-time cycles. Stage classes remain available via lazy attribute
|
|
resolution for backward compatibility.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from importlib import import_module
|
|
from typing import TYPE_CHECKING, Any
|
|
|
|
from astrbot.core.message.message_event_result import (
|
|
EventResultType,
|
|
MessageEventResult,
|
|
)
|
|
|
|
from .stage_order import STAGES_ORDER
|
|
|
|
if TYPE_CHECKING:
|
|
from .content_safety_check.stage import ContentSafetyCheckStage
|
|
from .preprocess_stage.stage import PreProcessStage
|
|
from .process_stage.stage import ProcessStage
|
|
from .rate_limit_check.stage import RateLimitStage
|
|
from .respond.stage import RespondStage
|
|
from .result_decorate.stage import ResultDecorateStage
|
|
from .session_status_check.stage import SessionStatusCheckStage
|
|
from .waking_check.stage import WakingCheckStage
|
|
from .whitelist_check.stage import WhitelistCheckStage
|
|
|
|
_LAZY_EXPORTS = {
|
|
"ContentSafetyCheckStage": (
|
|
"astrbot.core.pipeline.content_safety_check.stage",
|
|
"ContentSafetyCheckStage",
|
|
),
|
|
"PreProcessStage": (
|
|
"astrbot.core.pipeline.preprocess_stage.stage",
|
|
"PreProcessStage",
|
|
),
|
|
"ProcessStage": (
|
|
"astrbot.core.pipeline.process_stage.stage",
|
|
"ProcessStage",
|
|
),
|
|
"RateLimitStage": (
|
|
"astrbot.core.pipeline.rate_limit_check.stage",
|
|
"RateLimitStage",
|
|
),
|
|
"RespondStage": (
|
|
"astrbot.core.pipeline.respond.stage",
|
|
"RespondStage",
|
|
),
|
|
"ResultDecorateStage": (
|
|
"astrbot.core.pipeline.result_decorate.stage",
|
|
"ResultDecorateStage",
|
|
),
|
|
"SessionStatusCheckStage": (
|
|
"astrbot.core.pipeline.session_status_check.stage",
|
|
"SessionStatusCheckStage",
|
|
),
|
|
"WakingCheckStage": (
|
|
"astrbot.core.pipeline.waking_check.stage",
|
|
"WakingCheckStage",
|
|
),
|
|
"WhitelistCheckStage": (
|
|
"astrbot.core.pipeline.whitelist_check.stage",
|
|
"WhitelistCheckStage",
|
|
),
|
|
}
|
|
|
|
# Type-checking imports to satisfy static analyzers for __all__ exports
|
|
if TYPE_CHECKING:
|
|
from .content_safety_check.stage import ContentSafetyCheckStage
|
|
from .preprocess_stage.stage import PreProcessStage
|
|
from .process_stage.stage import ProcessStage
|
|
from .rate_limit_check.stage import RateLimitStage
|
|
from .respond.stage import RespondStage
|
|
from .result_decorate.stage import ResultDecorateStage
|
|
from .session_status_check.stage import SessionStatusCheckStage
|
|
from .waking_check.stage import WakingCheckStage
|
|
from .whitelist_check.stage import WhitelistCheckStage
|
|
|
|
__all__ = [
|
|
"ContentSafetyCheckStage",
|
|
"EventResultType",
|
|
"MessageEventResult",
|
|
"PreProcessStage",
|
|
"ProcessStage",
|
|
"RateLimitStage",
|
|
"RespondStage",
|
|
"ResultDecorateStage",
|
|
"SessionStatusCheckStage",
|
|
"STAGES_ORDER",
|
|
"WakingCheckStage",
|
|
"WhitelistCheckStage",
|
|
]
|
|
|
|
|
|
def __getattr__(name: str) -> Any:
|
|
if name not in _LAZY_EXPORTS:
|
|
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
module_path, attr_name = _LAZY_EXPORTS[name]
|
|
module = import_module(module_path)
|
|
value = getattr(module, attr_name)
|
|
globals()[name] = value
|
|
return value
|
|
|
|
|
|
def __dir__() -> list[str]:
|
|
return sorted(set(globals()) | set(__all__))
|