Skip to content

Commit 16dfda7

Browse files
authored
Add truncate_middle to jinja env (#258)
* Add truncate_middle to jinja env * apply lint, fix tests
1 parent 956d3cf commit 16dfda7

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

flexeval/core/utils/jinja2_utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,19 @@ def regex_replace(s: str, pattern: str, replace: str) -> str:
1010
return re.sub(pattern, replace, s)
1111

1212

13+
def truncate_middle(s: str, length: int, filler: str = "...") -> str:
14+
if len(s) + len(filler) <= length:
15+
return s
16+
extract_len = length - len(filler)
17+
prefix_len = extract_len // 2
18+
suffix_len = extract_len // 2 + extract_len % 2
19+
return s[:prefix_len] + filler + s[-suffix_len:]
20+
21+
1322
JINJA2_ENV = sandbox.ImmutableSandboxedEnvironment(
1423
undefined=jinja2.StrictUndefined,
1524
autoescape=False, # important for not escaping double quotations
1625
keep_trailing_newline=True,
1726
)
1827
JINJA2_ENV.filters["regex_replace"] = regex_replace
28+
JINJA2_ENV.filters["truncate_middle"] = truncate_middle

tests/core/utils/test_jinja2_env.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,12 @@
66
def test_regex_replace() -> None:
77
template = "{{ text | regex_replace('<<.*?>>', '') }}"
88
assert JINJA2_ENV.from_string(template).render(text="<<a>>Hello <<dummy>>world!") == "Hello world!"
9+
10+
11+
def test_truncate_middle() -> None:
12+
template = JINJA2_ENV.from_string("{{ text | truncate_middle(14, '+') }}")
13+
assert template.render(text="This is a pen") == "This is a pen"
14+
template = JINJA2_ENV.from_string("{{ text | truncate_middle(13, '+') }}")
15+
assert template.render(text="This is a pen") == "This i+ a pen"
16+
template = JINJA2_ENV.from_string("{{ text | truncate_middle(12, '+') }}")
17+
assert template.render(text="This is a pen") == "This + a pen"

0 commit comments

Comments
 (0)