Files
MoviePilot/app/sdk/classification.py

50 lines
1.5 KiB
Python

"""插件媒体来源分类扩展协议的稳定公开入口。"""
from copy import deepcopy
from typing import Final, TypeVar, cast
from app.application.chain.context import get_chain_runtime_context
from app.application.classification.execution import ClassificationSubject
from app.schemas.category import (
ClassificationEnrichmentMatch,
ClassificationEnrichmentRequest,
ClassificationEnrichmentResponse,
ClassificationFactValue,
ClassificationFieldDefinition,
)
from app.schemas.event import MediaSourceInfo
MEDIA_SOURCE_CLASSIFICATION_PROTOCOL_VERSION: Final[int] = 2
"""宿主支持的插件媒体来源分类扩展协议版本。"""
_ClassificationSubjectT = TypeVar(
"_ClassificationSubjectT",
bound=ClassificationSubject,
)
def classify_media(media: _ClassificationSubjectT) -> _ClassificationSubjectT:
"""使用当前活动策略分类媒体副本;宿主尚未装配时返回隔离副本。"""
try:
service = get_chain_runtime_context().classification_service
except RuntimeError:
return deepcopy(media)
if service is None:
return deepcopy(media)
return cast(
_ClassificationSubjectT,
service.finalize(media, refresh=True),
)
__all__ = [
"ClassificationEnrichmentMatch",
"ClassificationEnrichmentRequest",
"ClassificationEnrichmentResponse",
"ClassificationFactValue",
"ClassificationFieldDefinition",
"MEDIA_SOURCE_CLASSIFICATION_PROTOCOL_VERSION",
"MediaSourceInfo",
"classify_media",
]