Skip to content

Commit d37913f

Browse files
authored
improve performance
1 parent d45c543 commit d37913f

File tree

1 file changed

+17
-11
lines changed

1 file changed

+17
-11
lines changed

src/pytest_bdd/parser.py

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ class Scenario:
292292
class Step:
293293
type: str
294294
_name: str
295+
_full_name: str | None
295296
line_number: int
296297
indent: int
297298
keyword: str
@@ -311,32 +312,37 @@ def __init__(self, name: str, type: str, indent: int, line_number: int, keyword:
311312
self.scenario = None
312313
self.background = None
313314
self.lines = []
315+
self._full_name = None
314316

315317
def add_line(self, line: str) -> None:
316318
"""Add line to the multiple step.
317319
318320
:param str line: Line of text - the continuation of the step name.
319321
"""
320322
self.lines.append(line)
323+
self._full_name = None
321324

322325
@property
323326
def name(self) -> str:
324-
multilines_content = textwrap.dedent("\n".join(self.lines)) if self.lines else ""
325-
326-
# Remove the multiline quotes, if present.
327-
multilines_content = re.sub(
328-
pattern=r'^"""\n(?P<content>.*)\n"""$',
329-
repl=r"\g<content>",
330-
string=multilines_content,
331-
flags=re.DOTALL, # Needed to make the "." match also new lines
332-
)
327+
if self._full_name is None:
328+
multilines_content = textwrap.dedent("\n".join(self.lines)) if self.lines else ""
329+
330+
# Remove the multiline quotes, if present.
331+
multilines_content = re.sub(
332+
pattern=r'^"""\n(?P<content>.*)\n"""$',
333+
repl=r"\g<content>",
334+
string=multilines_content,
335+
flags=re.DOTALL, # Needed to make the "." match also new lines
336+
)
333337

334-
lines = [self._name] + [multilines_content]
335-
return "\n".join(lines).strip()
338+
lines = [self._name] + [multilines_content]
339+
self._full_name = "\n".join(lines).strip()
340+
return self._full_name
336341

337342
@name.setter
338343
def name(self, value: str) -> None:
339344
self._name = value
345+
self._full_name = None
340346

341347
def __str__(self) -> str:
342348
"""Full step name including the type."""

0 commit comments

Comments
 (0)