mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 15:38:19 +08:00
fix: preserve legacy model query ABI
This commit is contained in:
+29
-11
@@ -4,6 +4,7 @@ from sqlalchemy import Boolean, Index, Integer, String, Text, select, update
|
||||
from sqlalchemy.orm import Mapped, Session, mapped_column
|
||||
|
||||
from app.db.base import Base, execute_dml, get_id_column
|
||||
from app.db.decorators import run_legacy_sync_query
|
||||
|
||||
|
||||
def _get_for_user_statement(
|
||||
@@ -86,30 +87,47 @@ class AgentTask(Base):
|
||||
@classmethod
|
||||
def get_for_user(
|
||||
cls,
|
||||
db: Session,
|
||||
task_id: int,
|
||||
db: Session | int | None = None,
|
||||
task_id: int | None = None,
|
||||
user_id: Optional[str] = None,
|
||||
) -> Optional["AgentTask"]:
|
||||
"""
|
||||
按任务 ID 和可选用户 ID 查询 Agent 定时任务。
|
||||
按任务 ID 和可选用户 ID 查询,并保留无 Session 的旧插件调用方式。
|
||||
"""
|
||||
return db.execute(
|
||||
_get_for_user_statement(cls, task_id=task_id, user_id=user_id)
|
||||
).scalars().first()
|
||||
if task_id is None and isinstance(db, int):
|
||||
task_id, db = db, None
|
||||
if task_id is None:
|
||||
raise TypeError("task_id is required")
|
||||
|
||||
def query(session: Session) -> Optional["AgentTask"]:
|
||||
"""在给定会话中读取单个 Agent 任务。"""
|
||||
return session.execute(
|
||||
_get_for_user_statement(cls, task_id=task_id, user_id=user_id)
|
||||
).scalars().first()
|
||||
|
||||
if isinstance(db, Session):
|
||||
return query(db)
|
||||
return run_legacy_sync_query(query)
|
||||
|
||||
@classmethod
|
||||
def list_for_user(
|
||||
cls,
|
||||
db: Session,
|
||||
db: Session | None = None,
|
||||
user_id: Optional[str] = None,
|
||||
enabled: Optional[bool] = None,
|
||||
) -> list["AgentTask"]:
|
||||
"""
|
||||
按用户和启用状态查询 Agent 定时任务。
|
||||
按用户和启用状态查询,并保留无 Session 的旧插件调用方式。
|
||||
"""
|
||||
return list(db.execute(
|
||||
_list_for_user_statement(cls, user_id=user_id, enabled=enabled)
|
||||
).scalars().all())
|
||||
def query(session: Session) -> list["AgentTask"]:
|
||||
"""在给定会话中读取 Agent 任务列表。"""
|
||||
return list(session.execute(
|
||||
_list_for_user_statement(cls, user_id=user_id, enabled=enabled)
|
||||
).scalars().all())
|
||||
|
||||
if isinstance(db, Session):
|
||||
return query(db)
|
||||
return run_legacy_sync_query(query)
|
||||
|
||||
@classmethod
|
||||
def update_task(
|
||||
|
||||
+41
-11
@@ -5,7 +5,7 @@ from sqlalchemy.orm import Mapped, Session, mapped_column
|
||||
from datetime import datetime
|
||||
|
||||
from app.db.base import Base, get_id_column
|
||||
from app.db.decorators import db_query, async_db_query
|
||||
from app.db.decorators import async_db_query, db_query, run_legacy_sync_query
|
||||
|
||||
|
||||
def _get_by_user_id_statement(model: type["PassKey"], user_id: int):
|
||||
@@ -51,11 +51,26 @@ class PassKey(Base):
|
||||
transports: Mapped[Optional[str]] = mapped_column(String, nullable=True)
|
||||
|
||||
@classmethod
|
||||
def get_by_user_id(cls, db: Session, user_id: int):
|
||||
"""获取用户的所有PassKey"""
|
||||
return list(db.execute(
|
||||
_get_by_user_id_statement(cls, user_id)
|
||||
).scalars().all())
|
||||
def get_by_user_id(
|
||||
cls,
|
||||
db: Session | int | None = None,
|
||||
user_id: int | None = None,
|
||||
):
|
||||
"""获取用户的所有 PassKey,并保留无 Session 的旧插件调用方式。"""
|
||||
if user_id is None and isinstance(db, int):
|
||||
user_id, db = db, None
|
||||
if user_id is None:
|
||||
raise TypeError("user_id is required")
|
||||
|
||||
def query(session: Session):
|
||||
"""在给定会话中执行启用凭证查询。"""
|
||||
return list(session.execute(
|
||||
_get_by_user_id_statement(cls, user_id)
|
||||
).scalars().all())
|
||||
|
||||
if isinstance(db, Session):
|
||||
return query(db)
|
||||
return run_legacy_sync_query(query)
|
||||
|
||||
@classmethod
|
||||
@async_db_query
|
||||
@@ -67,11 +82,26 @@ class PassKey(Base):
|
||||
return list(result.scalars().all())
|
||||
|
||||
@classmethod
|
||||
def get_by_credential_id(cls, db: Session, credential_id: str):
|
||||
"""根据凭证ID获取PassKey"""
|
||||
return db.execute(
|
||||
_get_by_credential_id_statement(cls, credential_id)
|
||||
).scalars().first()
|
||||
def get_by_credential_id(
|
||||
cls,
|
||||
db: Session | str | None = None,
|
||||
credential_id: str | None = None,
|
||||
):
|
||||
"""按凭证 ID 获取 PassKey,并保留无 Session 的旧插件调用方式。"""
|
||||
if credential_id is None and isinstance(db, str):
|
||||
credential_id, db = db, None
|
||||
if credential_id is None:
|
||||
raise TypeError("credential_id is required")
|
||||
|
||||
def query(session: Session):
|
||||
"""在给定会话中执行启用凭证查询。"""
|
||||
return session.execute(
|
||||
_get_by_credential_id_statement(cls, credential_id)
|
||||
).scalars().first()
|
||||
|
||||
if isinstance(db, Session):
|
||||
return query(db)
|
||||
return run_legacy_sync_query(query)
|
||||
|
||||
@classmethod
|
||||
@async_db_query
|
||||
|
||||
Reference in New Issue
Block a user