test(krisp): scope importlib.metadata.version mock to imports only
The four krisp test files installed a process-wide mock of importlib.metadata.version with `patch(...).start()` at module level and never called .stop(). Once any of these files was collected, the mock leaked across the rest of the test session, returning '0.0.0-dev' for every version check. This corrupted unrelated tests that triggered transformers' import-time dependency check (e.g. lazy imports of LocalSmartTurnAnalyzerV3) — transformers saw tqdm=='0.0.0-dev' and refused to load. Wrap the pipecat imports in `with patch(...)` so the mock is active during import (where pipecat's krisp version check needs it) and torn down before any tests run.
This commit is contained in:
@@ -12,10 +12,6 @@ from unittest.mock import MagicMock, patch
|
|||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
# Mock package version check before importing pipecat (development mode)
|
|
||||||
_version_patcher = patch("importlib.metadata.version", return_value="0.0.0-dev")
|
|
||||||
_version_patcher.start()
|
|
||||||
|
|
||||||
# Mock krisp_audio before any pipecat import that loads krisp_instance / VIVA IP strategy
|
# Mock krisp_audio before any pipecat import that loads krisp_instance / VIVA IP strategy
|
||||||
mock_krisp_audio = MagicMock()
|
mock_krisp_audio = MagicMock()
|
||||||
mock_krisp_audio.SamplingRate.Sr8000Hz = 8000
|
mock_krisp_audio.SamplingRate.Sr8000Hz = 8000
|
||||||
@@ -37,18 +33,22 @@ sys.modules["pipecat_ai_krisp"] = mock_pipecat_krisp
|
|||||||
sys.modules["pipecat_ai_krisp.audio"] = MagicMock()
|
sys.modules["pipecat_ai_krisp.audio"] = MagicMock()
|
||||||
sys.modules["pipecat_ai_krisp.audio.krisp_processor"] = MagicMock()
|
sys.modules["pipecat_ai_krisp.audio.krisp_processor"] = MagicMock()
|
||||||
|
|
||||||
from pipecat.frames.frames import (
|
# The version patch is scoped to just the import so it doesn't leak across the
|
||||||
BotStartedSpeakingFrame,
|
# test session and corrupt importlib.metadata.version for other tests
|
||||||
BotStoppedSpeakingFrame,
|
# (e.g. transformers' import-time dependency checks).
|
||||||
InputAudioRawFrame,
|
with patch("importlib.metadata.version", return_value="0.0.0-dev"):
|
||||||
TranscriptionFrame,
|
from pipecat.frames.frames import (
|
||||||
VADUserStartedSpeakingFrame,
|
BotStartedSpeakingFrame,
|
||||||
VADUserStoppedSpeakingFrame,
|
BotStoppedSpeakingFrame,
|
||||||
)
|
InputAudioRawFrame,
|
||||||
from pipecat.turns.types import ProcessFrameResult
|
TranscriptionFrame,
|
||||||
from pipecat.turns.user_start.krisp_viva_ip_user_turn_start_strategy import (
|
VADUserStartedSpeakingFrame,
|
||||||
KrispVivaIPUserTurnStartStrategy,
|
VADUserStoppedSpeakingFrame,
|
||||||
)
|
)
|
||||||
|
from pipecat.turns.types import ProcessFrameResult
|
||||||
|
from pipecat.turns.user_start.krisp_viva_ip_user_turn_start_strategy import (
|
||||||
|
KrispVivaIPUserTurnStartStrategy,
|
||||||
|
)
|
||||||
|
|
||||||
STRATEGY_MODULE = "pipecat.turns.user_start.krisp_viva_ip_user_turn_start_strategy"
|
STRATEGY_MODULE = "pipecat.turns.user_start.krisp_viva_ip_user_turn_start_strategy"
|
||||||
|
|
||||||
|
|||||||
@@ -11,11 +11,6 @@ from unittest.mock import MagicMock, patch
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
# Mock package version check before importing pipecat
|
|
||||||
# This allows tests to run in development mode without installed package
|
|
||||||
_version_patcher = patch("importlib.metadata.version", return_value="0.0.0-dev")
|
|
||||||
_version_patcher.start()
|
|
||||||
|
|
||||||
# Mock krisp_audio module BEFORE any pipecat imports
|
# Mock krisp_audio module BEFORE any pipecat imports
|
||||||
# This allows tests to run without krisp_audio installed
|
# This allows tests to run without krisp_audio installed
|
||||||
mock_krisp_audio = MagicMock()
|
mock_krisp_audio = MagicMock()
|
||||||
@@ -48,12 +43,15 @@ sys.modules["pipecat_ai_krisp"] = mock_pipecat_krisp
|
|||||||
sys.modules["pipecat_ai_krisp.audio"] = MagicMock()
|
sys.modules["pipecat_ai_krisp.audio"] = MagicMock()
|
||||||
sys.modules["pipecat_ai_krisp.audio.krisp_processor"] = MagicMock()
|
sys.modules["pipecat_ai_krisp.audio.krisp_processor"] = MagicMock()
|
||||||
|
|
||||||
# Now we can safely import
|
# Now we can safely import. The version patch is scoped to just the import so
|
||||||
from pipecat.audio.krisp_instance import (
|
# it doesn't leak across the test session and corrupt importlib.metadata.version
|
||||||
KRISP_SAMPLE_RATES,
|
# for other tests (e.g. transformers' import-time dependency checks).
|
||||||
KrispVivaSDKManager,
|
with patch("importlib.metadata.version", return_value="0.0.0-dev"):
|
||||||
int_to_krisp_sample_rate,
|
from pipecat.audio.krisp_instance import (
|
||||||
)
|
KRISP_SAMPLE_RATES,
|
||||||
|
KrispVivaSDKManager,
|
||||||
|
int_to_krisp_sample_rate,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class TestKrispVivaSDKManager:
|
class TestKrispVivaSDKManager:
|
||||||
|
|||||||
@@ -13,11 +13,6 @@ from unittest.mock import MagicMock, patch
|
|||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
# Mock package version check before importing pipecat
|
|
||||||
# This allows tests to run in development mode without installed package
|
|
||||||
_version_patcher = patch("importlib.metadata.version", return_value="0.0.0-dev")
|
|
||||||
_version_patcher.start()
|
|
||||||
|
|
||||||
# Mock krisp_audio module BEFORE any pipecat imports
|
# Mock krisp_audio module BEFORE any pipecat imports
|
||||||
# This allows tests to run without krisp_audio installed
|
# This allows tests to run without krisp_audio installed
|
||||||
mock_krisp_audio = MagicMock()
|
mock_krisp_audio = MagicMock()
|
||||||
@@ -42,9 +37,12 @@ sys.modules["pipecat_ai_krisp"] = mock_pipecat_krisp
|
|||||||
sys.modules["pipecat_ai_krisp.audio"] = MagicMock()
|
sys.modules["pipecat_ai_krisp.audio"] = MagicMock()
|
||||||
sys.modules["pipecat_ai_krisp.audio.krisp_processor"] = MagicMock()
|
sys.modules["pipecat_ai_krisp.audio.krisp_processor"] = MagicMock()
|
||||||
|
|
||||||
# Now we can safely import
|
# Now we can safely import. The version patch is scoped to just the import so
|
||||||
from pipecat.audio.filters.krisp_viva_filter import KrispVivaFilter
|
# it doesn't leak across the test session and corrupt importlib.metadata.version
|
||||||
from pipecat.frames.frames import FilterEnableFrame
|
# for other tests (e.g. transformers' import-time dependency checks).
|
||||||
|
with patch("importlib.metadata.version", return_value="0.0.0-dev"):
|
||||||
|
from pipecat.audio.filters.krisp_viva_filter import KrispVivaFilter
|
||||||
|
from pipecat.frames.frames import FilterEnableFrame
|
||||||
|
|
||||||
|
|
||||||
class TestKrispVivaFilter(unittest.IsolatedAsyncioTestCase):
|
class TestKrispVivaFilter(unittest.IsolatedAsyncioTestCase):
|
||||||
|
|||||||
@@ -15,11 +15,6 @@ from unittest.mock import MagicMock, patch
|
|||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
# Mock package version check before importing pipecat
|
|
||||||
# This allows tests to run in development mode without installed package
|
|
||||||
_version_patcher = patch("importlib.metadata.version", return_value="0.0.0-dev")
|
|
||||||
_version_patcher.start()
|
|
||||||
|
|
||||||
# Mock krisp_audio module BEFORE any pipecat imports
|
# Mock krisp_audio module BEFORE any pipecat imports
|
||||||
# This allows tests to run without krisp_audio installed
|
# This allows tests to run without krisp_audio installed
|
||||||
mock_krisp_audio = MagicMock()
|
mock_krisp_audio = MagicMock()
|
||||||
@@ -44,9 +39,12 @@ sys.modules["pipecat_ai_krisp"] = mock_pipecat_krisp
|
|||||||
sys.modules["pipecat_ai_krisp.audio"] = MagicMock()
|
sys.modules["pipecat_ai_krisp.audio"] = MagicMock()
|
||||||
sys.modules["pipecat_ai_krisp.audio.krisp_processor"] = MagicMock()
|
sys.modules["pipecat_ai_krisp.audio.krisp_processor"] = MagicMock()
|
||||||
|
|
||||||
# Now we can safely import
|
# Now we can safely import. The version patch is scoped to just the import so
|
||||||
from pipecat.audio.vad.krisp_viva_vad import KrispVivaVadAnalyzer
|
# it doesn't leak across the test session and corrupt importlib.metadata.version
|
||||||
from pipecat.audio.vad.vad_analyzer import VADParams
|
# for other tests (e.g. transformers' import-time dependency checks).
|
||||||
|
with patch("importlib.metadata.version", return_value="0.0.0-dev"):
|
||||||
|
from pipecat.audio.vad.krisp_viva_vad import KrispVivaVadAnalyzer
|
||||||
|
from pipecat.audio.vad.vad_analyzer import VADParams
|
||||||
|
|
||||||
|
|
||||||
class TestKrispVivaVadAnalyzer(unittest.TestCase):
|
class TestKrispVivaVadAnalyzer(unittest.TestCase):
|
||||||
|
|||||||
Reference in New Issue
Block a user