fix(transmission): 对齐 transmission-rpc 排队状态取值 (#7032)

This commit is contained in:
Cat
2026-10-16 22:10:38 +08:00
committed by GitHub
parent f825134cd0
commit 6b50942ebc
5 changed files with 58 additions and 16 deletions

View File

@@ -20,7 +20,7 @@ from app.schemas.types import (
)
_TRANSMISSION_DOWNLOADING_STATES = {
"download_pending",
"download pending",
"downloading",
}
_TRANSMISSION_PAUSED_STATES = {

View File

@@ -143,7 +143,7 @@ class Transmission:
if not self.trc:
return None
try:
torrents, error = self.get_torrents(status=["seeding", "seed_pending"], ids=ids, tags=tags)
torrents, error = self.get_torrents(status=["seeding", "seed pending"], ids=ids, tags=tags)
return None if error else torrents or []
except Exception as err:
logger.error(f"获取已完成的种子列表出错:{str(err)}")
@@ -159,7 +159,7 @@ class Transmission:
return None
try:
torrents, error = self.get_torrents(ids=ids,
status=["downloading", "download_pending"],
status=["downloading", "download pending"],
tags=tags)
return None if error else torrents or []
except Exception as err:

View File

@@ -680,7 +680,7 @@ def test_all_torrents_include_completed_and_downloading_states():
total_size=1024,
labels=[],
progress=100,
status="seed_pending",
status="seed pending",
),
SimpleNamespace(
name="Downloading",

View File

@@ -1,17 +1,9 @@
import sys
from types import ModuleType
from unittest.mock import patch
sys.modules.setdefault("qbittorrentapi", ModuleType("qbittorrentapi"))
setattr(sys.modules["qbittorrentapi"], "TorrentFilesList", list)
sys.modules.setdefault("transmission_rpc", ModuleType("transmission_rpc"))
setattr(sys.modules["transmission_rpc"], "File", object)
sys.modules.setdefault("psutil", ModuleType("psutil"))
from app.chain.base import ChainBase # noqa: E402
from app.domain.context import MediaInfo # noqa: E402
from app.domain.meta.metabase import MetaBase # noqa: E402
from app.schemas.types import MediaSource, MediaType # noqa: E402
from app.chain.base import ChainBase
from app.domain.context import MediaInfo
from app.domain.meta.metabase import MetaBase
from app.schemas.types import MediaSource, MediaType
def test_recognize_media_uses_meta_episode_group():

View File

@@ -0,0 +1,50 @@
"""Transmission 任务状态过滤与 transmission-rpc 7 原始状态值的对齐回归。"""
from types import SimpleNamespace
from unittest.mock import MagicMock
import pytest
from transmission_rpc.torrent import Status
from app.modules.transmission import TransmissionModule
from app.modules.transmission.transmission import Transmission
from app.schemas.types import DownloadTaskState
def _client(*torrents: SimpleNamespace) -> Transmission:
"""构造只返回给定任务的离线 Transmission 客户端。"""
client = Transmission.__new__(Transmission)
client.trc = MagicMock()
client.trc.get_torrents.return_value = list(torrents)
return client
def test_completed_torrents_include_queued_seeding():
"""排队做种(seed pending)的任务已下载完成,必须进入待整理列表。"""
seeding = SimpleNamespace(status=Status.SEEDING, labels=[])
queued = SimpleNamespace(status=Status.SEED_PENDING, labels=[])
downloading = SimpleNamespace(status=Status.DOWNLOADING, labels=[])
assert _client(seeding, queued, downloading).get_completed_torrents() == [seeding, queued]
def test_downloading_torrents_include_queued_download():
"""排队下载(download pending)的任务仍属于下载中列表。"""
downloading = SimpleNamespace(status=Status.DOWNLOADING, labels=[])
queued = SimpleNamespace(status=Status.DOWNLOAD_PENDING, labels=[])
seeding = SimpleNamespace(status=Status.SEEDING, labels=[])
assert _client(downloading, queued, seeding).get_downloading_torrents() == [downloading, queued]
@pytest.mark.parametrize("status, expected", [
(Status.DOWNLOAD_PENDING, DownloadTaskState.DOWNLOADING),
(Status.DOWNLOADING, DownloadTaskState.DOWNLOADING),
(Status.STOPPED, DownloadTaskState.PAUSED),
(Status.SEED_PENDING, DownloadTaskState.COMPLETED),
])
def test_normalize_state_uses_transmission_rpc_status_values(status: Status, expected: DownloadTaskState):
"""排队下载的任务不得被归一为已完成。"""
normalize = getattr(TransmissionModule, "_TransmissionModule__normalize_torrent_state")
assert normalize(status) == expected.value