mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-11-01 12:56:34 +08:00
fix(transmission): 对齐 transmission-rpc 排队状态取值 (#7032)
This commit is contained in:
@@ -20,7 +20,7 @@ from app.schemas.types import (
|
||||
)
|
||||
|
||||
_TRANSMISSION_DOWNLOADING_STATES = {
|
||||
"download_pending",
|
||||
"download pending",
|
||||
"downloading",
|
||||
}
|
||||
_TRANSMISSION_PAUSED_STATES = {
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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():
|
||||
|
||||
50
tests/test_transmission_status.py
Normal file
50
tests/test_transmission_status.py
Normal 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
|
||||
Reference in New Issue
Block a user