Formatter that applies multiple path replacements and prefixes timestamps.
| 140 | |
| 141 | |
| 142 | class _MultiPathSubstitutionFormatter: |
| 143 | """Formatter that applies multiple path replacements and prefixes timestamps.""" |
| 144 | |
| 145 | def __init__(self, substitutions: list[tuple[str, str, str]]) -> None: |
| 146 | """Initialize with list of (needle, regex_pattern, replacement) tuples.""" |
| 147 | self._substitutions: list[tuple[str, str, re.Pattern[str]]] = [] |
| 148 | for needle, regex_pattern, replacement in substitutions: |
| 149 | compiled_pattern = re.compile(regex_pattern) |
| 150 | self._substitutions.append((needle, replacement, compiled_pattern)) |
| 151 | |
| 152 | def begin(self) -> None: |
| 153 | pass # No per-instance setup needed, use global elapsed |
| 154 | |
| 155 | def transform(self, line: str) -> str: |
| 156 | if not line: |
| 157 | return line |
| 158 | formatted: str = self._format_paths(line) |
| 159 | elapsed: float = get_elapsed() |
| 160 | return f"{elapsed:.2f} {formatted}" |
| 161 | |
| 162 | def end(self) -> None: |
| 163 | return None |
| 164 | |
| 165 | def _format_paths(self, line: str) -> str: |
| 166 | result = line |
| 167 | for needle, replacement, compiled_pattern in self._substitutions: |
| 168 | if needle in result and compiled_pattern.search(result): |
| 169 | result = compiled_pattern.sub(replacement, result) |
| 170 | return result |
| 171 | |
| 172 | |
| 173 | def create_filtering_echo_callback() -> Callable[[str], None]: |
no outgoing calls
no test coverage detected