Fix logging
This commit is contained in:
@@ -168,6 +168,40 @@ class CliLazyImportTests(unittest.TestCase):
|
||||
result["modules"],
|
||||
)
|
||||
|
||||
def test_root_debug_flag_parses_without_loading_runtime_modules(self):
|
||||
result = self.run_python(
|
||||
textwrap.dedent(
|
||||
f"""
|
||||
import json
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, {str(SRC_ROOT)!r})
|
||||
|
||||
import ffx.cli
|
||||
|
||||
context = ffx.cli.ffx.make_context(
|
||||
"ffx",
|
||||
["--debug", "help"],
|
||||
resilient_parsing=True,
|
||||
)
|
||||
|
||||
print(json.dumps({{
|
||||
"debug": context.params["debug"],
|
||||
"modules": {{
|
||||
module_name: module_name in sys.modules
|
||||
for module_name in {HEAVY_MODULES!r}
|
||||
}},
|
||||
}}))
|
||||
"""
|
||||
)
|
||||
)
|
||||
|
||||
self.assertTrue(result["debug"])
|
||||
self.assertTrue(
|
||||
all(not is_loaded for is_loaded in result["modules"].values()),
|
||||
result["modules"],
|
||||
)
|
||||
|
||||
def test_convert_cut_option_supports_flag_duration_and_start_duration_forms(self):
|
||||
result = self.run_python(
|
||||
textwrap.dedent(
|
||||
|
||||
@@ -16,8 +16,10 @@ if str(SRC_ROOT) not in sys.path:
|
||||
from ffx.logging_utils import ( # noqa: E402
|
||||
CONSOLE_HANDLER_NAME,
|
||||
FILE_HANDLER_NAME,
|
||||
MUTED_CONSOLE_LEVEL,
|
||||
configure_ffx_logger,
|
||||
get_ffx_logger,
|
||||
set_ffx_console_logging_enabled,
|
||||
)
|
||||
|
||||
|
||||
@@ -81,6 +83,33 @@ class LoggingUtilsTests(unittest.TestCase):
|
||||
|
||||
self.cleanup_logger(logger_name)
|
||||
|
||||
def test_set_ffx_console_logging_enabled_mutes_and_restores_console_handler(self):
|
||||
logger_name = "ffx-test-console-mute"
|
||||
self.cleanup_logger(logger_name)
|
||||
|
||||
with tempfile.TemporaryDirectory() as tempdir:
|
||||
log_path = Path(tempdir) / "ffx.log"
|
||||
|
||||
logger = configure_ffx_logger(
|
||||
str(log_path),
|
||||
logging.DEBUG,
|
||||
logging.INFO,
|
||||
name=logger_name,
|
||||
)
|
||||
console_handler = next(
|
||||
handler for handler in logger.handlers if handler.get_name() == CONSOLE_HANDLER_NAME
|
||||
)
|
||||
|
||||
self.assertEqual(logging.INFO, console_handler.level)
|
||||
|
||||
set_ffx_console_logging_enabled(logger, enabled=False)
|
||||
self.assertEqual(MUTED_CONSOLE_LEVEL, console_handler.level)
|
||||
|
||||
set_ffx_console_logging_enabled(logger, enabled=True)
|
||||
self.assertEqual(logging.INFO, console_handler.level)
|
||||
|
||||
self.cleanup_logger(logger_name)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
@@ -170,7 +170,7 @@ class MetadataEditorTests(unittest.TestCase):
|
||||
"/tmp/example.mkv",
|
||||
baseline_descriptor,
|
||||
draft_descriptor,
|
||||
notify=notifications.append,
|
||||
loggingHandler = notifications.append,
|
||||
)
|
||||
|
||||
mocked_execute.assert_not_called()
|
||||
@@ -216,7 +216,7 @@ class MetadataEditorTests(unittest.TestCase):
|
||||
"/tmp/example.mkv",
|
||||
baseline_descriptor,
|
||||
draft_descriptor,
|
||||
notify=notifications.append,
|
||||
loggingHandler = notifications.append,
|
||||
)
|
||||
|
||||
self.assertEqual(1, len(notifications))
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
import logging
|
||||
import sys
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
@@ -57,9 +58,38 @@ class FakeScreen:
|
||||
self.app = FakeApp(screen_stack)
|
||||
|
||||
|
||||
class FakeRichLog:
|
||||
def __init__(self):
|
||||
self.messages = []
|
||||
|
||||
def write(self, message):
|
||||
self.messages.append(message)
|
||||
|
||||
|
||||
class FakeScreenWithLog:
|
||||
def __init__(self):
|
||||
self.log_view = FakeRichLog()
|
||||
|
||||
def query_one(self, selector, _widget_type=None):
|
||||
if selector == f"#{screen_support.SCREEN_LOG_VIEW_ID}":
|
||||
return self.log_view
|
||||
raise LookupError(selector)
|
||||
|
||||
|
||||
class FakeThreadedApp:
|
||||
def __init__(self, screen):
|
||||
self.screen = screen
|
||||
self.calls = []
|
||||
|
||||
def call_from_thread(self, func, *args):
|
||||
self.calls.append((func, args))
|
||||
return func(*args)
|
||||
|
||||
|
||||
class ScreenSupportTests(unittest.TestCase):
|
||||
def tearDown(self):
|
||||
set_current_language("de")
|
||||
screen_support.set_screen_log_pane_enabled(False)
|
||||
|
||||
def make_context(self):
|
||||
return {
|
||||
@@ -168,6 +198,63 @@ class ScreenSupportTests(unittest.TestCase):
|
||||
self.assertGreater(len(translated), 8)
|
||||
self.assertEqual(len(translated) + 2, screen_support.localized_column_width(translated, 8))
|
||||
|
||||
def test_build_screen_log_pane_is_hidden_when_debug_mode_is_disabled(self):
|
||||
screen_support.set_screen_log_pane_enabled(False)
|
||||
|
||||
log_pane = screen_support.build_screen_log_pane()
|
||||
|
||||
self.assertFalse(log_pane.display)
|
||||
|
||||
def test_build_screen_log_pane_is_collapsed_when_debug_mode_is_enabled(self):
|
||||
screen_support.set_screen_log_pane_enabled(True)
|
||||
|
||||
log_pane = screen_support.build_screen_log_pane()
|
||||
|
||||
self.assertIsInstance(log_pane, screen_support.ResizableScreenLogPane)
|
||||
self.assertEqual(screen_support.SCREEN_LOG_PANE_ID, log_pane.id)
|
||||
self.assertTrue(log_pane.collapsed)
|
||||
|
||||
def test_resizable_screen_log_pane_clamps_height_to_minimum(self):
|
||||
log_pane = screen_support.ResizableScreenLogPane()
|
||||
|
||||
log_pane.set_log_height(1)
|
||||
|
||||
self.assertEqual(screen_support.SCREEN_LOG_MIN_HEIGHT, log_pane.get_log_height())
|
||||
|
||||
def test_configure_screen_log_handler_routes_logger_messages_to_active_screen(self):
|
||||
logger_name = "ffx-test-screen-log-handler"
|
||||
logger = logging.getLogger(logger_name)
|
||||
logger.setLevel(logging.DEBUG)
|
||||
logger.propagate = False
|
||||
|
||||
for handler in list(logger.handlers):
|
||||
logger.removeHandler(handler)
|
||||
handler.close()
|
||||
|
||||
screen = FakeScreenWithLog()
|
||||
app = FakeThreadedApp(screen)
|
||||
|
||||
try:
|
||||
handler = screen_support.configure_screen_log_handler(
|
||||
logger,
|
||||
app,
|
||||
enabled=True,
|
||||
)
|
||||
self.assertIsNotNone(handler)
|
||||
|
||||
logger.info("hello pane")
|
||||
|
||||
self.assertEqual(1, len(screen.log_view.messages))
|
||||
self.assertRegex(
|
||||
screen.log_view.messages[0],
|
||||
r"^ffx-test-screen-log-handler\s+INFO\s+\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} \| hello pane$",
|
||||
)
|
||||
finally:
|
||||
screen_support.configure_screen_log_handler(logger, app, enabled=False)
|
||||
for handler in list(logger.handlers):
|
||||
logger.removeHandler(handler)
|
||||
handler.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user