mirror of
https://github.com/aclist/dztui.git
synced 2026-10-25 12:12:31 +01:00
30 lines
920 B
Python
30 lines
920 B
Python
import logging
|
|
import re
|
|
from typing import Literal
|
|
|
|
api_filter = r"(.*&key=)([^&]*)(.*)"
|
|
home_filter = r"(/home/)([^\s'\/]*)(.*)"
|
|
REDACTED = r"\1REDACTED\3"
|
|
REDACTION_PATTERNS = [api_filter, home_filter]
|
|
|
|
|
|
def redact_home(text: str) -> str:
|
|
pat = re.compile(home_filter)
|
|
cleaned = pat.sub(REDACTED, text)
|
|
return cleaned
|
|
|
|
|
|
class RedactionFilter(logging.Filter):
|
|
def __init__(self, patterns: list[str] | None = None) -> None:
|
|
super().__init__()
|
|
self._patterns = [re.compile(pat) for pat in (patterns or [])]
|
|
|
|
def filter(self, record: logging.LogRecord) -> Literal[True]:
|
|
for pattern in self._patterns:
|
|
try:
|
|
record.msg = pattern.sub(REDACTED, record.msg)
|
|
except TypeError:
|
|
exception_text = f"{type(record.msg).__name__}: {record.msg}"
|
|
record.msg = pattern.sub(REDACTED, exception_text)
|
|
return True
|