fix: restore platform kit version to 1.0.9
All checks were successful
Publish Python Package to Gitea / publish (push) Successful in 25s
All checks were successful
Publish Python Package to Gitea / publish (push) Successful in 25s
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
"""media_assets 共享媒体资源解析测试。"""
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import platform
|
||||
import zipfile
|
||||
from pathlib import Path
|
||||
@@ -25,6 +26,37 @@ def _make_complete_assets(root: Path, *, with_ffmpeg: bool = True, with_ffprobe:
|
||||
(bin_dir / ma._tool_filename("ffprobe")).write_bytes(b"ffprobe")
|
||||
|
||||
|
||||
def _sample_manifest() -> dict:
|
||||
bin_key = ma._platform_bin_key()
|
||||
return {
|
||||
"name": "media-assets",
|
||||
"version": "0.2.0",
|
||||
"directories": {"music": "music", "fonts": "fonts", "watermark": "watermark"},
|
||||
"tools": {
|
||||
"ffmpeg": {
|
||||
bin_key: {
|
||||
"package": "ffmpeg-release-essentials",
|
||||
"archive_type": "zip",
|
||||
"urls": [{"name": "test", "url": "https://example.test/ffmpeg.zip"}],
|
||||
"archive_paths": {
|
||||
"ffmpeg": "*/bin/ffmpeg.exe",
|
||||
"ffprobe": "*/bin/ffprobe.exe",
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def _install_tools_from_manifest(root: Path, warnings: list[str]) -> bool:
|
||||
bin_key = ma._platform_bin_key()
|
||||
bin_dir = root / "bin" / bin_key
|
||||
bin_dir.mkdir(parents=True, exist_ok=True)
|
||||
(bin_dir / ma._tool_filename("ffmpeg")).write_bytes(b"ffmpeg")
|
||||
(bin_dir / ma._tool_filename("ffprobe")).write_bytes(b"ffprobe")
|
||||
return True
|
||||
|
||||
|
||||
def test_media_assets_root_env_priority(tmp_path: Path) -> None:
|
||||
custom = tmp_path / "custom-media"
|
||||
custom.mkdir()
|
||||
@@ -100,20 +132,13 @@ def test_pick_background_music_stable_first(tmp_path: Path, monkeypatch: pytest.
|
||||
|
||||
|
||||
def _build_archive_zip(dest: Path, inner_name: str) -> None:
|
||||
manifest = _sample_manifest()
|
||||
with zipfile.ZipFile(dest, "w") as zf:
|
||||
zf.writestr(f"{inner_name}/README.md", "# media-assets\n")
|
||||
zf.writestr(f"{inner_name}/manifest.json", json.dumps(manifest, ensure_ascii=False))
|
||||
zf.writestr(f"{inner_name}/music/.keep", "")
|
||||
zf.writestr(f"{inner_name}/fonts/.keep", "")
|
||||
zf.writestr(f"{inner_name}/watermark/.keep", "")
|
||||
bin_key = ma._platform_bin_key()
|
||||
zf.writestr(
|
||||
f"{inner_name}/bin/{bin_key}/{ma._tool_filename('ffmpeg')}",
|
||||
b"ffmpeg",
|
||||
)
|
||||
zf.writestr(
|
||||
f"{inner_name}/bin/{bin_key}/{ma._tool_filename('ffprobe')}",
|
||||
b"ffprobe",
|
||||
)
|
||||
|
||||
|
||||
def test_zip_wrapper_layout_detected(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
@@ -129,6 +154,7 @@ def test_zip_wrapper_layout_detected(tmp_path: Path, monkeypatch: pytest.MonkeyP
|
||||
|
||||
monkeypatch.setattr(ma, "_download_zip", _fake_download)
|
||||
monkeypatch.setattr(ma, "_find_git_executable", lambda: None)
|
||||
monkeypatch.setattr(ma, "_try_download_ffmpeg_tools", _install_tools_from_manifest)
|
||||
|
||||
status = ma.ensure_media_assets(env={"JIANGCHANG_DATA_ROOT": str(data_root)})
|
||||
assert target.is_dir()
|
||||
@@ -185,3 +211,23 @@ def test_windows_default_data_root() -> None:
|
||||
with patch.dict("os.environ", {}, clear=True):
|
||||
root = ma.resolve_media_assets_root()
|
||||
assert root == Path(r"D:\jiangchang-data") / "shared" / "media-assets"
|
||||
|
||||
|
||||
def test_manifest_ffmpeg_download(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
root = tmp_path / "data" / "shared" / "media-assets"
|
||||
(root / "music").mkdir(parents=True)
|
||||
(root / "fonts").mkdir(parents=True)
|
||||
(root / "watermark").mkdir(parents=True)
|
||||
(root / "manifest.json").write_text(
|
||||
json.dumps(_sample_manifest(), ensure_ascii=False),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
monkeypatch.setattr(ma, "_try_download_via_zip", lambda *a, **k: False)
|
||||
monkeypatch.setattr(ma, "_try_download_via_git", lambda *a, **k: False)
|
||||
monkeypatch.setattr(ma, "_try_download_ffmpeg_tools", _install_tools_from_manifest)
|
||||
|
||||
status = ma.ensure_media_assets(env={"JIANGCHANG_DATA_ROOT": str(tmp_path / "data")})
|
||||
assert status.ready is True
|
||||
assert status.ffmpeg_path is not None
|
||||
assert status.ffprobe_path is not None
|
||||
|
||||
Reference in New Issue
Block a user