diff --git a/apps/api/app/services/ai_service.py b/apps/api/app/services/ai_service.py index 13e465b2f..6e1291a11 100755 --- a/apps/api/app/services/ai_service.py +++ b/apps/api/app/services/ai_service.py @@ -12,7 +12,6 @@ from __future__ import annotations -import json import logging from typing import Any, Dict, List, Optional diff --git a/apps/worker/video_processing/chroma_key_engine.py b/apps/worker/video_processing/chroma_key_engine.py index 7499b2f61..d95df928f 100755 --- a/apps/worker/video_processing/chroma_key_engine.py +++ b/apps/worker/video_processing/chroma_key_engine.py @@ -9,12 +9,11 @@ from __future__ import annotations import logging -from typing import Optional +from packages.domain.chroma_key_config import CHROMA_KEY_PRESETS # noqa: F401 +from packages.domain.chroma_key_config import apply_chroma_key_if_needed # noqa: F401 from packages.domain.chroma_key_config import ( - CHROMA_KEY_PRESETS, ChromaKeyConfig, - apply_chroma_key_if_needed, ) from packages.domain.chroma_key_config import ( # noqa: F401 — 向后兼容 build_chromakey_filter as _build_chromakey_filter_base, diff --git a/apps/worker/video_processing/color_grade_engine.py b/apps/worker/video_processing/color_grade_engine.py index da5b44d8d..9fb367373 100755 --- a/apps/worker/video_processing/color_grade_engine.py +++ b/apps/worker/video_processing/color_grade_engine.py @@ -195,17 +195,3 @@ class ColorGradeEngine: # ── 便捷函数 ────────────────────────────────────────────────────────────────── - - -def get_preset_names() -> list[tuple[str, str]]: - """获取所有预设名称列表. - - Returns: - [(preset_key, display_name), ...] - """ - return [(key, PRESET_DISPLAY_NAMES.get(key, key)) for key in PRESET_PARAMS.keys()] - - -def get_preset_params(preset: str) -> dict[str, float] | None: - """获取指定预设的参数.""" - return PRESET_PARAMS.get(preset) diff --git a/apps/worker/video_processing/ffmpeg_utils.py b/apps/worker/video_processing/ffmpeg_utils.py index 6cac1228b..9436c489f 100755 --- a/apps/worker/video_processing/ffmpeg_utils.py +++ b/apps/worker/video_processing/ffmpeg_utils.py @@ -22,11 +22,9 @@ from shared.ffmpeg_utils import ( # noqa: F401 # xfade 转场纯逻辑已抽离到 domain 层,这里 re-export 保持向后兼容 from packages.domain.xfade_builder import DEFAULT_TRANSITION_DURATION as _default_transition_duration_base # noqa: F401 -from packages.domain.xfade_builder import ( - SUPPORTED_TRANSITIONS, - XFADE_TRANSITION_MAP, - XFade_TRANSITION_NAMES, -) +from packages.domain.xfade_builder import SUPPORTED_TRANSITIONS # noqa: F401 +from packages.domain.xfade_builder import XFADE_TRANSITION_MAP # noqa: F401 +from packages.domain.xfade_builder import XFade_TRANSITION_NAMES # noqa: F401 from packages.domain.xfade_builder import build_xfade_filter_chain as _build_xfade_filter_chain_base from packages.domain.xfade_builder import chain_filters as _chain_filters_base from packages.domain.xfade_builder import resolve_xfade_transition as _resolve_xfade_transition_base diff --git a/apps/worker/video_processing/noise_reduction_engine.py b/apps/worker/video_processing/noise_reduction_engine.py index e55220d62..e8db5bb64 100755 --- a/apps/worker/video_processing/noise_reduction_engine.py +++ b/apps/worker/video_processing/noise_reduction_engine.py @@ -9,16 +9,21 @@ from __future__ import annotations import logging +# isort: off from packages.domain.noise_reduction_config import ( NoiseReductionConfig, - NoiseReductionLevel, + NoiseReductionLevel, # noqa: F401 ) from packages.domain.noise_reduction_config import ( apply_noise_reduction_if_needed as _apply_noise_reduction_if_needed_base, ) -from packages.domain.noise_reduction_config import build_afftdn_filter as _build_afftdn_filter_base # noqa: F401 — 向后兼容 +from packages.domain.noise_reduction_config import ( + build_afftdn_filter as _build_afftdn_filter_base, +) # noqa: F401 — 向后兼容 from packages.domain.noise_reduction_config import build_arnndn_filter as _build_arnndn_filter_base +# isort: on + logger = logging.getLogger(__name__) diff --git a/apps/worker/video_processing/pip_engine.py b/apps/worker/video_processing/pip_engine.py index 74733853a..e4e2d3feb 100755 --- a/apps/worker/video_processing/pip_engine.py +++ b/apps/worker/video_processing/pip_engine.py @@ -18,22 +18,13 @@ from pathlib import Path # 向后兼容:POSITION_BOTTOM_CENTER 也从 pip_config 再导出 from packages.domain.pip_config import POSITION_BOTTOM_CENTER # noqa: E402, F401 +from packages.domain.pip_config import PiPConfig # noqa: F401 from packages.domain.pip_config import ( ANIMATION_FADE, - ANIMATION_SCALE, ANIMATION_SLIDE_BOTTOM, ANIMATION_SLIDE_LEFT, ANIMATION_SLIDE_RIGHT, ANIMATION_SLIDE_TOP, - POSITION_BOTTOM_LEFT, - POSITION_BOTTOM_RIGHT, - POSITION_CENTER, - POSITION_CENTER_LEFT, - POSITION_CENTER_RIGHT, - POSITION_TOP_CENTER, - POSITION_TOP_LEFT, - POSITION_TOP_RIGHT, - PiPConfig, PiPLayerConfig, ) from packages.domain.pip_config import ( # noqa: F401 — 向后兼容:保留模块级导出 diff --git a/apps/worker/video_processing/render_subtitles.py b/apps/worker/video_processing/render_subtitles.py index 9b8f58e63..06c780463 100755 --- a/apps/worker/video_processing/render_subtitles.py +++ b/apps/worker/video_processing/render_subtitles.py @@ -13,9 +13,6 @@ from pathlib import Path from typing import Any from packages.domain.ass_subtitle_builder import ( - TITLE_MARGIN_BOTTOM, - TITLE_MARGIN_SIDE, - TITLE_MARGIN_TOP, build_ass_content, ) from packages.domain.ass_subtitle_builder import build_ass_style as _build_ass_style_base # noqa: F401 — 向后兼容 diff --git a/apps/worker/video_processing/sticker_engine.py b/apps/worker/video_processing/sticker_engine.py index 131287b0e..148c88963 100755 --- a/apps/worker/video_processing/sticker_engine.py +++ b/apps/worker/video_processing/sticker_engine.py @@ -14,16 +14,20 @@ import logging from pathlib import Path from typing import Any +# isort: off from packages.domain.sticker_config import ( - POSITION_PRESETS, - STICKER_CATEGORIES, + POSITION_PRESETS, # noqa: F401 + STICKER_CATEGORIES, # noqa: F401 ImageStickerConfig, StickerOverlayResult, TextStickerConfig, ) -from packages.domain.sticker_config import get_sticker_categories as _get_sticker_categories_base # noqa: F401 向后兼容导出 +from packages.domain.sticker_config import ( + get_sticker_categories as _get_sticker_categories_base, +) # noqa: F401 向后兼容导出 from packages.domain.sticker_config import parse_stickers_from_config as _parse_stickers_base from packages.domain.sticker_config import ( + # isort: on resolve_sticker_position, ) diff --git a/apps/worker/video_processing/subtitle_render_engine.py b/apps/worker/video_processing/subtitle_render_engine.py index a227205aa..f37f8ba6f 100755 --- a/apps/worker/video_processing/subtitle_render_engine.py +++ b/apps/worker/video_processing/subtitle_render_engine.py @@ -25,28 +25,22 @@ from __future__ import annotations import logging from pathlib import Path +from typing import Any from video_processing.path_security import PathSecurityError, is_in_allowed_dirs, safe_resolve_path from packages.domain.subtitle_style import ( ALLOWED_SUBTITLE_EXTENSIONS, - DEFAULT_COLOR, - DEFAULT_FONT, DEFAULT_FONT_SIZE, - DEFAULT_MAX_CHARS_PER_LINE, DEFAULT_POSITION, - DEFAULT_STROKE_COLOR, - DEFAULT_STROKE_WIDTH, - POSITION_ALIASES, - POSITION_ALIGNMENT, SubtitleSegment, SubtitleStyle, ) from packages.domain.subtitle_style import escape_ass_text as _escape_ass_text # noqa: F401 向后兼容导出 from packages.domain.subtitle_style import format_ass_time as _format_ass_time -from packages.domain.subtitle_style import hex_to_ass_bgr as _hex_to_ass_bgr -from packages.domain.subtitle_style import hex_to_ass_color as _hex_to_ass_color -from packages.domain.subtitle_style import opacity_to_ass_alpha as _opacity_to_ass_alpha +from packages.domain.subtitle_style import hex_to_ass_bgr as _hex_to_ass_bgr # noqa: F401 +from packages.domain.subtitle_style import hex_to_ass_color as _hex_to_ass_color # noqa: F401 +from packages.domain.subtitle_style import opacity_to_ass_alpha as _opacity_to_ass_alpha # noqa: F401 from packages.domain.subtitle_style import wrap_text as _wrap_text logger = logging.getLogger(__name__) diff --git a/apps/worker/video_processing/trim_engine.py b/apps/worker/video_processing/trim_engine.py index 5e3a78ec6..6b9417de5 100755 --- a/apps/worker/video_processing/trim_engine.py +++ b/apps/worker/video_processing/trim_engine.py @@ -15,16 +15,14 @@ from __future__ import annotations import logging from typing import Any +from packages.domain.trim_config import MIN_TRIM_DURATION # noqa: F401 +from packages.domain.trim_config import extract_trim_from_clip_config # noqa: F401 from packages.domain.trim_config import ( - MIN_TRIM_DURATION, TrimConfig, TrimSegment, ) from packages.domain.trim_config import build_audio_trim_filter as _build_audio_trim_filter # noqa: F401 — 向后兼容 from packages.domain.trim_config import build_video_trim_filter as _build_video_trim_filter -from packages.domain.trim_config import ( - extract_trim_from_clip_config, -) from packages.domain.trim_config import parse_segments_from_config as _parse_segments_from_config from packages.domain.trim_config import resolve_segments as _resolve_segments diff --git a/apps/worker/video_processing/unified_render_service.py b/apps/worker/video_processing/unified_render_service.py index 3a35dda9a..c8f6229c8 100755 --- a/apps/worker/video_processing/unified_render_service.py +++ b/apps/worker/video_processing/unified_render_service.py @@ -53,7 +53,6 @@ from video_processing.tts_engine import TtsEngine from video_processing.watermark_engine import WatermarkConfig, WatermarkEngine from packages.domain.render_layer_utils import LAYER_Z_INDEX as _IMPORTED_LAYER_Z_INDEX -from packages.domain.render_layer_utils import can_pass_through as _can_pass_through_pure from packages.domain.render_layer_utils import clip_adjusted_duration as _clip_adjusted_duration_pure from packages.domain.render_layer_utils import clip_effective_duration as _clip_effective_duration_pure from packages.domain.render_layer_utils import clip_playback_speed as _clip_playback_speed_pure diff --git a/apps/worker/video_processing/watermark_engine.py b/apps/worker/video_processing/watermark_engine.py index 797571b33..c92f3bb6a 100755 --- a/apps/worker/video_processing/watermark_engine.py +++ b/apps/worker/video_processing/watermark_engine.py @@ -14,10 +14,9 @@ from __future__ import annotations import logging -from typing import Any +from packages.domain.watermark_config import WATERMARK_POSITIONS # noqa: F401 from packages.domain.watermark_config import ( - WATERMARK_POSITIONS, WatermarkConfig, ) from packages.domain.watermark_config import ( # noqa: F401 — 向后兼容 diff --git a/packages/domain/pip_config.py b/packages/domain/pip_config.py index e843504cb..522d696a9 100755 --- a/packages/domain/pip_config.py +++ b/packages/domain/pip_config.py @@ -186,7 +186,7 @@ class PiPConfig: """最大 z_index.""" if not self.layers: return 0 - return max(l.z_index for l in self.layers) + return max(layer.z_index for layer in self.layers) # ── 纯逻辑工具函数 ─────────────────────────────────────────────────────────── diff --git a/packages/domain/subtitle_style.py b/packages/domain/subtitle_style.py index 481e0d83c..293f684ab 100755 --- a/packages/domain/subtitle_style.py +++ b/packages/domain/subtitle_style.py @@ -6,7 +6,7 @@ from __future__ import annotations -from dataclasses import dataclass, field +from dataclasses import dataclass from typing import Any # ── 常量 ────────────────────────────────────────────────────────────────────── diff --git a/packages/domain/trim_config.py b/packages/domain/trim_config.py index 2cf912390..dee801748 100755 --- a/packages/domain/trim_config.py +++ b/packages/domain/trim_config.py @@ -11,7 +11,7 @@ from __future__ import annotations import logging -from dataclasses import dataclass, field +from dataclasses import dataclass from typing import Any logger = logging.getLogger(__name__) diff --git a/packages/domain/watermark_config.py b/packages/domain/watermark_config.py index 5aa05b47d..3373b317b 100755 --- a/packages/domain/watermark_config.py +++ b/packages/domain/watermark_config.py @@ -10,7 +10,7 @@ from __future__ import annotations import logging -from dataclasses import dataclass, field +from dataclasses import dataclass from typing import Any logger = logging.getLogger(__name__) diff --git a/tests/unit/test_color_grade_config.py b/tests/unit/test_color_grade_config.py index 0bc89a985..0af8a336d 100755 --- a/tests/unit/test_color_grade_config.py +++ b/tests/unit/test_color_grade_config.py @@ -39,7 +39,7 @@ class TestConstants: def test_preset_params_complete(self): assert set(PRESET_PARAMS.keys()) == VALID_PRESETS - for preset, params in PRESET_PARAMS.items(): + for _preset, params in PRESET_PARAMS.items(): assert set(params.keys()) == set(ALL_PARAM_KEYS) def test_default_params_keys(self): @@ -54,7 +54,7 @@ class TestConstants: assert min_val <= DEFAULT_PARAMS[key] <= max_val def test_all_presets_within_ranges(self): - for preset, params in PRESET_PARAMS.items(): + for _preset, params in PRESET_PARAMS.items(): for key in ALL_PARAM_KEYS: min_val, max_val = PARAM_RANGES[key] assert min_val <= params[key] <= max_val, f"{preset}.{key}={params[key]} out of range" diff --git a/tests/unit/test_pip_config.py b/tests/unit/test_pip_config.py index 6249b0e33..c2deafd2d 100755 --- a/tests/unit/test_pip_config.py +++ b/tests/unit/test_pip_config.py @@ -208,7 +208,7 @@ class TestPiPConfigFromDict: } ) assert cfg.layer_count == 3 - assert [l.source for l in cfg.layers] == ["bottom", "mid", "top"] + assert [layer.source for layer in cfg.layers] == ["bottom", "mid", "top"] def test_invalid_layer_skipped(self): cfg = PiPConfig.from_dict( diff --git a/tests/unit/test_sticker_config.py b/tests/unit/test_sticker_config.py index b42b2ea6b..e6048abc9 100755 --- a/tests/unit/test_sticker_config.py +++ b/tests/unit/test_sticker_config.py @@ -23,7 +23,7 @@ class TestConstants: assert len(POSITION_PRESETS) == 9 def test_position_presets_normalized(self): - for name, (x, y) in POSITION_PRESETS.items(): + for _name, (x, y) in POSITION_PRESETS.items(): assert 0.0 <= x <= 1.0 assert 0.0 <= y <= 1.0