From b37b2ccc73a466931f1a7cca0bdb2cc188ec0f9c Mon Sep 17 00:00:00 2001 From: David Gwilliam Date: Wed, 18 Mar 2026 03:56:31 -0700 Subject: [PATCH] refactor: move effects_plugins to engine/effects/plugins - Move effects_plugins/ to engine/effects/plugins/ - Update imports in engine/app.py - Update imports in all test files - Follows capability-based deps architecture Closes #27 --- engine/app.py | 2 +- .../effects/plugins}/__init__.py | 2 +- .../effects/plugins}/border.py | 0 .../effects/plugins}/crop.py | 0 .../effects/plugins}/fade.py | 0 .../effects/plugins}/firehose.py | 0 .../effects/plugins}/glitch.py | 0 .../effects/plugins}/hud.py | 0 .../effects/plugins}/noise.py | 0 .../effects/plugins}/tint.py | 0 tests/test_benchmark.py | 2 +- tests/test_border_effect.py | 3 +-- tests/test_crop_effect.py | 3 +-- tests/test_glitch_effect.py | 22 ++++++++++--------- tests/test_hud.py | 7 +++--- tests/test_tint_effect.py | 2 +- 16 files changed, 21 insertions(+), 22 deletions(-) rename {effects_plugins => engine/effects/plugins}/__init__.py (92%) rename {effects_plugins => engine/effects/plugins}/border.py (100%) rename {effects_plugins => engine/effects/plugins}/crop.py (100%) rename {effects_plugins => engine/effects/plugins}/fade.py (100%) rename {effects_plugins => engine/effects/plugins}/firehose.py (100%) rename {effects_plugins => engine/effects/plugins}/glitch.py (100%) rename {effects_plugins => engine/effects/plugins}/hud.py (100%) rename {effects_plugins => engine/effects/plugins}/noise.py (100%) rename {effects_plugins => engine/effects/plugins}/tint.py (100%) diff --git a/engine/app.py b/engine/app.py index 78a6cd7..ffdaf90 100644 --- a/engine/app.py +++ b/engine/app.py @@ -5,7 +5,7 @@ Application orchestrator — pipeline mode entry point. import sys import time -import effects_plugins +import engine.effects.plugins as effects_plugins from engine import config from engine.display import DisplayRegistry from engine.effects import PerformanceMonitor, get_registry, set_monitor diff --git a/effects_plugins/__init__.py b/engine/effects/plugins/__init__.py similarity index 92% rename from effects_plugins/__init__.py rename to engine/effects/plugins/__init__.py index f09a6c5..2cb92c9 100644 --- a/effects_plugins/__init__.py +++ b/engine/effects/plugins/__init__.py @@ -18,7 +18,7 @@ def discover_plugins(): continue try: - module = __import__(f"effects_plugins.{module_name}", fromlist=[""]) + module = __import__(f"engine.effects.plugins.{module_name}", fromlist=[""]) for attr_name in dir(module): attr = getattr(module, attr_name) if ( diff --git a/effects_plugins/border.py b/engine/effects/plugins/border.py similarity index 100% rename from effects_plugins/border.py rename to engine/effects/plugins/border.py diff --git a/effects_plugins/crop.py b/engine/effects/plugins/crop.py similarity index 100% rename from effects_plugins/crop.py rename to engine/effects/plugins/crop.py diff --git a/effects_plugins/fade.py b/engine/effects/plugins/fade.py similarity index 100% rename from effects_plugins/fade.py rename to engine/effects/plugins/fade.py diff --git a/effects_plugins/firehose.py b/engine/effects/plugins/firehose.py similarity index 100% rename from effects_plugins/firehose.py rename to engine/effects/plugins/firehose.py diff --git a/effects_plugins/glitch.py b/engine/effects/plugins/glitch.py similarity index 100% rename from effects_plugins/glitch.py rename to engine/effects/plugins/glitch.py diff --git a/effects_plugins/hud.py b/engine/effects/plugins/hud.py similarity index 100% rename from effects_plugins/hud.py rename to engine/effects/plugins/hud.py diff --git a/effects_plugins/noise.py b/engine/effects/plugins/noise.py similarity index 100% rename from effects_plugins/noise.py rename to engine/effects/plugins/noise.py diff --git a/effects_plugins/tint.py b/engine/effects/plugins/tint.py similarity index 100% rename from effects_plugins/tint.py rename to engine/effects/plugins/tint.py diff --git a/tests/test_benchmark.py b/tests/test_benchmark.py index ef6f494..da28e58 100644 --- a/tests/test_benchmark.py +++ b/tests/test_benchmark.py @@ -37,8 +37,8 @@ class TestBenchmarkNullDisplay: """Effects should meet minimum processing throughput.""" import time - from effects_plugins import discover_plugins from engine.effects import EffectContext, get_registry + from engine.effects.plugins import discover_plugins discover_plugins() registry = get_registry() diff --git a/tests/test_border_effect.py b/tests/test_border_effect.py index a7fac37..c3fb8c7 100644 --- a/tests/test_border_effect.py +++ b/tests/test_border_effect.py @@ -2,8 +2,7 @@ Tests for BorderEffect. """ - -from effects_plugins.border import BorderEffect +from engine.effects.plugins.border import BorderEffect from engine.effects.types import EffectContext diff --git a/tests/test_crop_effect.py b/tests/test_crop_effect.py index aa99baf..238d2ff 100644 --- a/tests/test_crop_effect.py +++ b/tests/test_crop_effect.py @@ -2,8 +2,7 @@ Tests for CropEffect. """ - -from effects_plugins.crop import CropEffect +from engine.effects.plugins.crop import CropEffect from engine.effects.types import EffectContext diff --git a/tests/test_glitch_effect.py b/tests/test_glitch_effect.py index 43738b5..7b7c9a5 100644 --- a/tests/test_glitch_effect.py +++ b/tests/test_glitch_effect.py @@ -36,7 +36,7 @@ class TestGlitchEffectStability: def test_glitch_preserves_line_count(self, effect_context, stable_buffer): """Glitch should not change the number of lines in buffer.""" - from effects_plugins.glitch import GlitchEffect + from engine.effects.plugins.glitch import GlitchEffect effect = GlitchEffect() result = effect.process(stable_buffer, effect_context) @@ -50,7 +50,7 @@ class TestGlitchEffectStability: Note: Effects may add ANSI color codes, so we check VISIBLE length (stripped). """ - from effects_plugins.glitch import GlitchEffect + from engine.effects.plugins.glitch import GlitchEffect effect = GlitchEffect() @@ -69,7 +69,7 @@ class TestGlitchEffectStability: Regression test: Previously glitch used \\033[{row};1H which caused conflicts with HUD and border rendering. """ - from effects_plugins.glitch import GlitchEffect + from engine.effects.plugins.glitch import GlitchEffect effect = GlitchEffect() result = effect.process(stable_buffer, effect_context) @@ -86,7 +86,7 @@ class TestGlitchEffectStability: self, effect_context, stable_buffer ): """Glitch output should be deterministic given the same random seed.""" - from effects_plugins.glitch import GlitchEffect + from engine.effects.plugins.glitch import GlitchEffect effect = GlitchEffect() effect.config = EffectConfig(enabled=True, intensity=1.0) @@ -127,9 +127,9 @@ class TestEffectViewportStability: def test_effect_chain_preserves_dimensions(self): """Effect chain should preserve buffer dimensions.""" - from effects_plugins.fade import FadeEffect - from effects_plugins.glitch import GlitchEffect - from effects_plugins.noise import NoiseEffect + from engine.effects.plugins.fade import FadeEffect + from engine.effects.plugins.glitch import GlitchEffect + from engine.effects.plugins.noise import NoiseEffect ctx = EffectContext( terminal_width=80, @@ -152,7 +152,9 @@ class TestEffectViewportStability: assert len(buffer) == original_len, ( f"{effect.name} changed line count from {original_len} to {len(buffer)}" ) - for i, (orig_w, new_line) in enumerate(zip(original_widths, buffer, strict=False)): + for i, (orig_w, new_line) in enumerate( + zip(original_widths, buffer, strict=False) + ): visible_len = len(strip_ansi(new_line)) assert visible_len == orig_w, ( f"{effect.name} changed line {i} visible width from {orig_w} to {visible_len}" @@ -181,7 +183,7 @@ class TestEffectTestMatrix: pytest.skip("Border handled by display") else: effect_module = __import__( - f"effects_plugins.{effect_name}", + f"engine.effects.plugins.{effect_name}", fromlist=[f"{effect_name.title()}Effect"], ) effect_class = getattr(effect_module, f"{effect_name.title()}Effect") @@ -213,7 +215,7 @@ class TestEffectTestMatrix: """Effects should not use cursor positioning (causes display conflicts).""" try: effect_module = __import__( - f"effects_plugins.{effect_name}", + f"engine.effects.plugins.{effect_name}", fromlist=[f"{effect_name.title()}Effect"], ) effect_class = getattr(effect_module, f"{effect_name.title()}Effect") diff --git a/tests/test_hud.py b/tests/test_hud.py index 195815c..22cfcf9 100644 --- a/tests/test_hud.py +++ b/tests/test_hud.py @@ -1,11 +1,10 @@ - from engine.effects.performance import PerformanceMonitor, set_monitor from engine.effects.types import EffectContext def test_hud_effect_adds_hud_lines(): """Test that HUD effect adds HUD lines to the buffer.""" - from effects_plugins.hud import HudEffect + from engine.effects.plugins.hud import HudEffect set_monitor(PerformanceMonitor()) @@ -51,7 +50,7 @@ def test_hud_effect_adds_hud_lines(): def test_hud_effect_shows_current_effect(): """Test that HUD displays the correct effect name.""" - from effects_plugins.hud import HudEffect + from engine.effects.plugins.hud import HudEffect set_monitor(PerformanceMonitor()) @@ -80,7 +79,7 @@ def test_hud_effect_shows_current_effect(): def test_hud_effect_shows_intensity(): """Test that HUD displays intensity percentage.""" - from effects_plugins.hud import HudEffect + from engine.effects.plugins.hud import HudEffect set_monitor(PerformanceMonitor()) diff --git a/tests/test_tint_effect.py b/tests/test_tint_effect.py index c015167..c7df3c3 100644 --- a/tests/test_tint_effect.py +++ b/tests/test_tint_effect.py @@ -1,6 +1,6 @@ import pytest -from effects_plugins.tint import TintEffect +from engine.effects.plugins.tint import TintEffect from engine.effects.types import EffectConfig