fix(compat): preserve legacy plugin imports

This commit is contained in:
jxxghp
2026-08-15 07:15:03 +08:00
parent 8a11214a43
commit a2117bafc8
13 changed files with 831 additions and 17 deletions
+75
View File
@@ -0,0 +1,75 @@
"""把旧订阅 Oper 写入调用转交给新的应用服务。"""
from typing import Any, Optional
from app.application.subscribe import add_subscribe, async_add_subscribe
from app.db.models.subscribe import Subscribe
from app.db.oper.subscribe import SubscribeOper as CanonicalSubscribeOper
from app.domain.context import MediaInfo, MusicInfo
class SubscribeOper(CanonicalSubscribeOper):
"""保留旧 ``mediainfo`` 写入签名,同时继承新的查询接口。"""
def add(
self,
mediainfo: Optional[MediaInfo | MusicInfo] = None,
**kwargs: Any,
):
"""
兼容旧订阅写入;应用服务回调的新字典签名直接交给 canonical Oper。
:param mediainfo: 旧调用传入的媒体识别结果
:param kwargs: 旧订阅配置,或新 Oper 的 identity/payload/username
:return: 订阅 ID 与结果说明
"""
if mediainfo is None and "identity" in kwargs and "payload" in kwargs:
identity = kwargs.pop("identity")
payload = kwargs.pop("payload")
username = kwargs.pop("username", None)
if kwargs:
unexpected = ", ".join(sorted(kwargs))
raise TypeError(f"SubscribeOper.add 收到未知参数:{unexpected}")
return super().add(
identity=identity,
payload=payload,
username=username,
)
return add_subscribe(
mediainfo=mediainfo,
subscribe_oper=self,
**kwargs,
)
async def async_add(
self,
mediainfo: Optional[MediaInfo | MusicInfo] = None,
**kwargs: Any,
):
"""
异步兼容旧订阅写入;新字典签名直接交给 canonical Oper。
:param mediainfo: 旧调用传入的媒体识别结果
:param kwargs: 旧订阅配置,或新 Oper 的 identity/payload/username
:return: 订阅 ID 与结果说明
"""
if mediainfo is None and "identity" in kwargs and "payload" in kwargs:
identity = kwargs.pop("identity")
payload = kwargs.pop("payload")
username = kwargs.pop("username", None)
if kwargs:
unexpected = ", ".join(sorted(kwargs))
raise TypeError(f"SubscribeOper.async_add 收到未知参数:{unexpected}")
return await super().async_add(
identity=identity,
payload=payload,
username=username,
)
return await async_add_subscribe(
mediainfo=mediainfo,
subscribe_oper=self,
**kwargs,
)
__all__ = ["Subscribe", "SubscribeOper"]