Source code for xraylabtool.gui.logging_filters
from __future__ import annotations
from collections.abc import Generator
from contextlib import contextmanager
import io
import os
import sys
[docs]
@contextmanager
def suppress_qt_noise() -> Generator[None, None, None]:
"""Filter noisy Qt offscreen stderr lines (e.g., propagateSizeHints).
Keeps other stderr intact so real warnings still surface.
"""
original = sys.stderr
class _Filter(io.TextIOBase):
noisy = ("propagateSizeHints",)
def write(self, s: str) -> int:
if any(token in s for token in self.noisy):
return len(s)
return original.write(s)
def flush(self) -> None:
original.flush()
sys.stderr = _Filter()
try:
yield
finally:
sys.stderr = original
[docs]
def enable_offscreen_quiet_env() -> None:
"""Set env vars that quiet common Qt offscreen noise without muting real warnings.
Prefers the quieter "minimal" platform when available, otherwise falls back to
"offscreen". Does not override an explicit user choice.
"""
os.environ.setdefault(
"QT_LOGGING_RULES", "*.debug=false;*.info=false;qt.qpa.*=false"
)
if "QT_QPA_PLATFORM" not in os.environ:
# Try minimal first; if unavailable Qt will fall back automatically or emit once
os.environ["QT_QPA_PLATFORM"] = "minimal"
# Caller can still override by setting QT_QPA_PLATFORM before import