Merge pull request #782 from Textualize/log-drop-critical

Log drop critical
This commit is contained in:
Will McGugan
2022-09-15 16:23:56 +01:00
committed by GitHub
8 changed files with 26 additions and 59 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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:

View File

@@ -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),

View File

@@ -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,
)

View File

@@ -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:

View File

@@ -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)

View File

@@ -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,