Coverage for /usr/local/lib/python3.12/site-packages/prefect/logging/highlighters.py: 100%
17 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 13:38 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 13:38 +0000
1from rich.highlighter import RegexHighlighter 1a
3from prefect.states import StateType 1a
6class LevelHighlighter(RegexHighlighter): 1a
7 """Apply style to log levels."""
9 base_style = "level." 1a
10 highlights: list[str] = [ 1a
11 r"(?P<debug_level>DEBUG)",
12 r"(?P<info_level>INFO)",
13 r"(?P<warning_level>WARNING)",
14 r"(?P<error_level>ERROR)",
15 r"(?P<critical_level>CRITICAL)",
16 ]
19class UrlHighlighter(RegexHighlighter): 1a
20 """Apply style to urls."""
22 base_style = "url." 1a
23 highlights: list[str] = [ 1a
24 r"(?P<web_url>(https|http|ws|wss):\/\/[0-9a-zA-Z\$\-\_\+\!`\(\)\,\.\?\/\;\:\&\=\%\#]*)",
25 r"(?P<local_url>(file):\/\/[0-9a-zA-Z\$\-\_\+\!`\(\)\,\.\?\/\;\:\&\=\%\#]*)",
26 ]
29class NameHighlighter(RegexHighlighter): 1a
30 """Apply style to names."""
32 base_style = "name." 1a
33 highlights: list[str] = [ 1a
34 # ?i means case insensitive
35 # ?<= means find string right after the words: flow run
36 r"(?i)(?P<flow_run_name>(?<=flow run) \'(.*?)\')",
37 r"(?i)(?P<flow_name>(?<=flow) \'(.*?)\')",
38 r"(?i)(?P<task_run_name>(?<=task run) \'(.*?)\')",
39 r"(?i)(?P<task_name>(?<=task) \'(.*?)\')",
40 ]
43class StateHighlighter(RegexHighlighter): 1a
44 """Apply style to states."""
46 base_style = "state." 1a
47 highlights: list[str] = [ 1a
48 rf"(?P<{state.lower()}_state>{state.title()})" for state in StateType
49 ] + [
50 r"(?P<cached_state>Cached)(?=\(type=COMPLETED\))" # Highlight only "Cached"
51 ]
54class PrefectConsoleHighlighter(RegexHighlighter): 1a
55 """Applies style from multiple highlighters."""
57 base_style = "log." 1a
58 highlights: list[str] = ( 1a
59 LevelHighlighter.highlights
60 + UrlHighlighter.highlights
61 + NameHighlighter.highlights
62 + StateHighlighter.highlights
63 )