mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
Merge pull request #782 from Textualize/log-drop-critical
Log drop critical
This commit is contained in:
@@ -11,7 +11,7 @@ __all__ = ["log", "panic"]
|
||||
|
||||
|
||||
from ._context import active_app
|
||||
from ._log import LogGroup, LogVerbosity, LogSeverity
|
||||
from ._log import LogGroup, LogVerbosity
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from .app import App
|
||||
@@ -38,12 +38,10 @@ class Logger:
|
||||
log_callable: LogCallable | None,
|
||||
group: LogGroup = LogGroup.INFO,
|
||||
verbosity: LogVerbosity = LogVerbosity.NORMAL,
|
||||
severity: LogSeverity = LogSeverity.NORMAL,
|
||||
) -> None:
|
||||
self._log = log_callable
|
||||
self._group = group
|
||||
self._verbosity = verbosity
|
||||
self._severity = severity
|
||||
|
||||
@property
|
||||
def log(self) -> LogCallable:
|
||||
@@ -58,7 +56,6 @@ class Logger:
|
||||
def __rich_repr__(self) -> rich.repr.Result:
|
||||
yield self._group, LogGroup.INFO
|
||||
yield self._verbosity, LogVerbosity.NORMAL
|
||||
yield self._severity, LogSeverity.NORMAL
|
||||
|
||||
def __call__(self, *args: object, **kwargs) -> None:
|
||||
caller = inspect.stack()[1]
|
||||
@@ -66,7 +63,6 @@ class Logger:
|
||||
self.log(
|
||||
self._group,
|
||||
self._verbosity,
|
||||
self._severity,
|
||||
*args,
|
||||
_textual_calling_frame=caller,
|
||||
**kwargs,
|
||||
@@ -86,46 +82,41 @@ class Logger:
|
||||
Logger: New logger.
|
||||
"""
|
||||
verbosity = LogVerbosity.HIGH if verbose else LogVerbosity.NORMAL
|
||||
return Logger(self._log, self._group, verbosity, LogSeverity.NORMAL)
|
||||
return Logger(self._log, self._group, verbosity)
|
||||
|
||||
@property
|
||||
def verbose(self) -> Logger:
|
||||
"""A verbose logger."""
|
||||
return Logger(self._log, self._group, LogVerbosity.HIGH)
|
||||
|
||||
@property
|
||||
def critical(self) -> Logger:
|
||||
"""A critical logger."""
|
||||
return Logger(self._log, self._group, self._verbosity, LogSeverity.CRITICAL)
|
||||
|
||||
@property
|
||||
def event(self) -> Logger:
|
||||
"""An event logger."""
|
||||
"""Logs events."""
|
||||
return Logger(self._log, LogGroup.EVENT)
|
||||
|
||||
@property
|
||||
def debug(self) -> Logger:
|
||||
"""A debug logger."""
|
||||
"""Logs debug messages."""
|
||||
return Logger(self._log, LogGroup.DEBUG)
|
||||
|
||||
@property
|
||||
def info(self) -> Logger:
|
||||
"""An info logger."""
|
||||
"""Logs information."""
|
||||
return Logger(self._log, LogGroup.INFO)
|
||||
|
||||
@property
|
||||
def warning(self) -> Logger:
|
||||
"""An info logger."""
|
||||
"""Logs warnings."""
|
||||
return Logger(self._log, LogGroup.WARNING)
|
||||
|
||||
@property
|
||||
def error(self) -> Logger:
|
||||
"""An error logger."""
|
||||
"""Logs errors."""
|
||||
return Logger(self._log, LogGroup.ERROR)
|
||||
|
||||
@property
|
||||
def system(self) -> Logger:
|
||||
"""A system logger."""
|
||||
"""Logs system information."""
|
||||
return Logger(self._log, LogGroup.SYSTEM)
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from enum import Enum, auto
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class LogGroup(Enum):
|
||||
@@ -19,10 +19,3 @@ class LogVerbosity(Enum):
|
||||
|
||||
NORMAL = 0
|
||||
HIGH = 1
|
||||
|
||||
|
||||
class LogSeverity(Enum):
|
||||
"""Tags log messages as being more severe."""
|
||||
|
||||
NORMAL = 0
|
||||
CRITICAL = 1 # Draws attention to the log message
|
||||
|
||||
@@ -34,7 +34,6 @@ from rich.traceback import Traceback
|
||||
from . import (
|
||||
Logger,
|
||||
LogGroup,
|
||||
LogSeverity,
|
||||
LogVerbosity,
|
||||
actions,
|
||||
events,
|
||||
@@ -487,7 +486,6 @@ class App(Generic[ReturnType], DOMNode):
|
||||
self,
|
||||
group: LogGroup,
|
||||
verbosity: LogVerbosity,
|
||||
severity: LogSeverity,
|
||||
*objects: Any,
|
||||
_textual_calling_frame: inspect.FrameInfo | None = None,
|
||||
**kwargs,
|
||||
@@ -523,7 +521,6 @@ class App(Generic[ReturnType], DOMNode):
|
||||
DevtoolsLog(objects, caller=_textual_calling_frame),
|
||||
group,
|
||||
verbosity,
|
||||
severity,
|
||||
)
|
||||
else:
|
||||
output = " ".join(str(arg) for arg in objects)
|
||||
@@ -536,7 +533,6 @@ class App(Generic[ReturnType], DOMNode):
|
||||
DevtoolsLog(output, caller=_textual_calling_frame),
|
||||
group,
|
||||
verbosity,
|
||||
severity,
|
||||
)
|
||||
except Exception as error:
|
||||
self._handle_exception(error)
|
||||
@@ -1533,7 +1529,7 @@ class App(Generic[ReturnType], DOMNode):
|
||||
def _on_terminal_supports_synchronized_output(
|
||||
self, message: messages.TerminalSupportsSynchronizedOutput
|
||||
) -> None:
|
||||
log("[b green]SynchronizedOutput mode is supported")
|
||||
log.system("[b green]SynchronizedOutput mode is supported")
|
||||
self._sync_available = True
|
||||
|
||||
def _begin_update(self) -> None:
|
||||
|
||||
@@ -13,7 +13,7 @@ from typing import Type, Any, NamedTuple
|
||||
from rich.console import Console
|
||||
from rich.segment import Segment
|
||||
|
||||
from .._log import LogGroup, LogVerbosity, LogSeverity
|
||||
from .._log import LogGroup, LogVerbosity
|
||||
|
||||
|
||||
class DevtoolsDependenciesMissingError(Exception):
|
||||
@@ -218,7 +218,6 @@ class DevtoolsClient:
|
||||
log: DevtoolsLog,
|
||||
group: LogGroup = LogGroup.UNDEFINED,
|
||||
verbosity: LogVerbosity = LogVerbosity.NORMAL,
|
||||
severity: LogSeverity = LogSeverity.NORMAL,
|
||||
) -> None:
|
||||
"""Queue a log to be sent to the devtools server for display.
|
||||
|
||||
@@ -239,7 +238,6 @@ class DevtoolsClient:
|
||||
"payload": {
|
||||
"group": group.value,
|
||||
"verbosity": verbosity.value,
|
||||
"severity": severity.value,
|
||||
"timestamp": int(time()),
|
||||
"path": getattr(log.caller, "filename", ""),
|
||||
"line_number": getattr(log.caller, "lineno", 0),
|
||||
|
||||
@@ -4,7 +4,7 @@ import inspect
|
||||
|
||||
from typing import TYPE_CHECKING, cast
|
||||
from .client import DevtoolsLog
|
||||
from .._log import LogGroup, LogVerbosity, LogSeverity
|
||||
from .._log import LogGroup, LogVerbosity
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from .devtools.client import DevtoolsClient
|
||||
@@ -101,5 +101,4 @@ class StdoutRedirector:
|
||||
DevtoolsLog(batched_log, caller=log_batch[-1].caller),
|
||||
LogGroup.PRINT,
|
||||
LogVerbosity.NORMAL,
|
||||
LogSeverity.NORMAL,
|
||||
)
|
||||
|
||||
@@ -90,24 +90,29 @@ class DevConsoleLog:
|
||||
file_and_line = escape(f"{Path(self.path).name}:{self.line_number}")
|
||||
group = LogGroup(self.group).name
|
||||
time = local_time.time()
|
||||
message = Text(
|
||||
f":warning-emoji: [{time}] {group}"
|
||||
if self.severity > 0
|
||||
else f"[{time}] {group}"
|
||||
)
|
||||
message.stylize("dim")
|
||||
|
||||
group_text = Text(group)
|
||||
if group == "WARNING":
|
||||
group_text.stylize("bold yellow reverse")
|
||||
elif group == "ERROR":
|
||||
group_text.stylize("bold red reverse")
|
||||
else:
|
||||
group_text.stylize("dim")
|
||||
|
||||
log_message = Text.assemble((f"[{time}]", "dim"), " ", group_text)
|
||||
|
||||
table.add_row(
|
||||
message,
|
||||
log_message,
|
||||
Align.right(
|
||||
Text(f"{file_and_line}", style=Style(dim=True, link=file_link))
|
||||
),
|
||||
)
|
||||
yield table
|
||||
|
||||
if group == "PRINT":
|
||||
yield Styled(Segments(self.segments), "bold")
|
||||
else:
|
||||
yield Segments(self.segments)
|
||||
yield from self.segments
|
||||
|
||||
|
||||
class DevConsoleNotice:
|
||||
|
||||
@@ -59,7 +59,7 @@ class ScrollToRegion(Message, bubble=False):
|
||||
|
||||
|
||||
@rich.repr.auto
|
||||
class StylesUpdated(Message):
|
||||
class StylesUpdated(Message, verbose=True):
|
||||
def __init__(self, sender: MessagePump) -> None:
|
||||
super().__init__(sender)
|
||||
|
||||
|
||||
@@ -38,20 +38,6 @@ async def test_devtools_log_places_encodes_and_queues_message(devtools):
|
||||
print(repr(queued_log_data))
|
||||
|
||||
|
||||
{
|
||||
"type": "client_log",
|
||||
"payload": {
|
||||
"group": 0,
|
||||
"verbosity": 0,
|
||||
"severity": 0,
|
||||
"timestamp": 1649166819,
|
||||
"path": "a/b/c.py",
|
||||
"line_number": 123,
|
||||
"segments": b"\x80\x04\x95@\x00\x00\x00\x00\x00\x00\x00]\x94(\x8c\x0crich.segment\x94\x8c\x07Segment\x94\x93\x94\x8c\x0bhello world\x94NN\x87\x94\x81\x94h\x03\x8c\x01\n\x94NN\x87\x94\x81\x94e.",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@time_machine.travel(datetime.utcfromtimestamp(TIMESTAMP))
|
||||
async def test_devtools_log_places_encodes_and_queues_many_logs_as_string(devtools):
|
||||
await devtools._stop_log_queue_processing()
|
||||
@@ -64,7 +50,6 @@ async def test_devtools_log_places_encodes_and_queues_many_logs_as_string(devtoo
|
||||
"payload": {
|
||||
"group": 0,
|
||||
"verbosity": 0,
|
||||
"severity": 0,
|
||||
"timestamp": 1649166819,
|
||||
"path": "a/b/c.py",
|
||||
"line_number": 123,
|
||||
|
||||
Reference in New Issue
Block a user