Skip to content

Commit 7344a6d

Browse files
authored
Merge pull request #56 from oleks-dev/allow_single_tuple_filter_regex_replace
allow single tuple in step filter.regex_replace
2 parents baecf95 + 1f9182b commit 7344a6d

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

docs/reference/template/steps.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ steps:
4848
regex_extract: ".*" # optional [str]
4949

5050
# replace output text using regex patterns
51-
regex_replace: # optional [list(tuple(str,str))] - regex pattern, replace
51+
regex_replace: # optional [tuple(str,str) | list(tuple(str,str))] - regex pattern, replace
5252
- ["(?i)(\"password\"\s*:\s*\")[^\"]+(\")", "\\1*****\\2"] # (ex. for json passwords sanitization)
5353
```
5454

prich/models/text_filter_model.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class TextFilterModel(BaseModel):
88
slice_start: Optional[int] = None
99
slice_end: Optional[int] = None
1010
regex_extract: Optional[str] = None
11-
regex_replace: Optional[List[Tuple[str, str]]] = None # [(pattern, replacement), ...]
11+
regex_replace: Optional[List[Tuple[str, str]] | Tuple[str, str]] = None # (pattern, replacement) or [(pattern, replacement), ...]
1212

1313
def apply(self, text: str) -> str:
1414
out = text
@@ -27,6 +27,8 @@ def apply(self, text: str) -> str:
2727
out = m.group(1) if (m and m.groups()) else (m.group(0) if m else "")
2828

2929
if self.regex_replace:
30+
if isinstance(self.regex_replace, tuple):
31+
self.regex_replace = [self.regex_replace]
3032
for pattern, repl in self.regex_replace:
3133
out = re.sub(pattern, repl, out)
3234

tests/test_run_template.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -801,6 +801,27 @@
801801
},
802802
"expected_output": ["• Preprocess python", "{\"password\": \"*****\"}"]
803803
},
804+
{"id": "run_cmd_and_sanitize_output_single_regex_replace", "template":
805+
# TemplateModel(
806+
{
807+
"id": "test-tpl",
808+
"name": "Test TPL",
809+
"steps": [
810+
PythonStep(
811+
name="Preprocess python",
812+
type="python",
813+
call="echo.py",
814+
args=["{\"password\": \"secret\"}"],
815+
filter=TextFilterModel(
816+
regex_replace=("(?i)(\"password\"\\s*:\\s*\")[^\"]+(\")", r"\1*****\2")
817+
),
818+
),
819+
],
820+
"folder": "."
821+
# ),
822+
},
823+
"expected_output": ["• Preprocess python", "{\"password\": \"*****\"}"]
824+
},
804825
{"id": "run_cmd_and_sanitize_output_verbose", "template":
805826
# TemplateModel(
806827
{

0 commit comments

Comments
 (0)