diff --git a/docs/reference/template/steps.md b/docs/reference/template/steps.md index fda90ca..e005447 100644 --- a/docs/reference/template/steps.md +++ b/docs/reference/template/steps.md @@ -48,7 +48,7 @@ steps: regex_extract: ".*" # optional [str] # replace output text using regex patterns - regex_replace: # optional [list(tuple(str,str))] - regex pattern, replace + regex_replace: # optional [tuple(str,str) | list(tuple(str,str))] - regex pattern, replace - ["(?i)(\"password\"\s*:\s*\")[^\"]+(\")", "\\1*****\\2"] # (ex. for json passwords sanitization) ``` diff --git a/prich/models/text_filter_model.py b/prich/models/text_filter_model.py index b38aba8..66a0b36 100644 --- a/prich/models/text_filter_model.py +++ b/prich/models/text_filter_model.py @@ -8,7 +8,7 @@ class TextFilterModel(BaseModel): slice_start: Optional[int] = None slice_end: Optional[int] = None regex_extract: Optional[str] = None - regex_replace: Optional[List[Tuple[str, str]]] = None # [(pattern, replacement), ...] + regex_replace: Optional[List[Tuple[str, str]] | Tuple[str, str]] = None # (pattern, replacement) or [(pattern, replacement), ...] def apply(self, text: str) -> str: out = text @@ -27,6 +27,8 @@ def apply(self, text: str) -> str: out = m.group(1) if (m and m.groups()) else (m.group(0) if m else "") if self.regex_replace: + if isinstance(self.regex_replace, tuple): + self.regex_replace = [self.regex_replace] for pattern, repl in self.regex_replace: out = re.sub(pattern, repl, out) diff --git a/tests/test_run_template.py b/tests/test_run_template.py index 24f3ec0..9464519 100644 --- a/tests/test_run_template.py +++ b/tests/test_run_template.py @@ -801,6 +801,27 @@ }, "expected_output": ["• Preprocess python", "{\"password\": \"*****\"}"] }, + {"id": "run_cmd_and_sanitize_output_single_regex_replace", "template": + # TemplateModel( + { + "id": "test-tpl", + "name": "Test TPL", + "steps": [ + PythonStep( + name="Preprocess python", + type="python", + call="echo.py", + args=["{\"password\": \"secret\"}"], + filter=TextFilterModel( + regex_replace=("(?i)(\"password\"\\s*:\\s*\")[^\"]+(\")", r"\1*****\2") + ), + ), + ], + "folder": "." + # ), + }, + "expected_output": ["• Preprocess python", "{\"password\": \"*****\"}"] + }, {"id": "run_cmd_and_sanitize_output_verbose", "template": # TemplateModel( {