Skip to content

Commit b07a353

Browse files
committed
Remove keywords: WIP
1 parent 10f9557 commit b07a353

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

robotframework_reportportal/listener.py

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
TRUNCATION_SIGN = "...'"
4343
REMOVED_KEYWORD_LOG = 'Keyword data removed using --RemoveKeywords option.'
4444
WKUS_KEYWORD_NAME = 'BuiltIn.Wait Until Keyword Succeeds'
45+
FOR_KEYWORD_NAME = 'BuiltIn.For'
46+
WHILE_KEYWORD_NAME = 'BuiltIn.While'
4547

4648

4749
def check_rp_enabled(func):
@@ -94,6 +96,8 @@ def match(self, kw: Keyword) -> bool:
9496

9597

9698
WKUS_KEYWORD_MATCH = _KeywordNameMatch(WKUS_KEYWORD_NAME)
99+
FOR_KEYWORD_MATCH = _KeywordNameMatch(FOR_KEYWORD_NAME)
100+
WHILE_KEYWORD_NAME = _KeywordNameMatch(WHILE_KEYWORD_NAME)
97101

98102

99103
# noinspection PyPep8Naming
@@ -214,7 +218,7 @@ def _log_message(self, message: LogMessage) -> None:
214218
current_item = self.current_item
215219
if current_item and not getattr(current_item, 'posted', True) and message.level not in ['ERROR', 'WARN']:
216220
self.current_item.skipped_logs.append(message)
217-
else:
221+
elif getattr(current_item, 'matched_filter', None) is not WKUS_KEYWORD_MATCH:
218222
# Post everything skipped by '--removekeywords' option
219223
self._post_skipped_keywords()
220224
self.service.log(message=message)
@@ -280,13 +284,15 @@ def _process_keyword_skip(self):
280284
self._remove_keywords = True
281285
break
282286
if pattern_str_upper in {'NOT_RUN', 'NOTRUN', 'NOT RUN'}:
283-
self._keyword_filters = [_KeywordStatusMatch('NOT RUN')]
287+
self._keyword_filters.append(_KeywordStatusMatch('NOT RUN'))
284288
continue
285289
if pattern_str_upper in {'FOR', 'WHILE', 'WUKS'}:
286290
if pattern_str_upper == 'WUKS':
287-
self._keyword_filters = [WKUS_KEYWORD_MATCH]
291+
self._keyword_filters.append(WKUS_KEYWORD_MATCH)
292+
elif pattern_str_upper == 'FOR':
293+
self._keyword_filters.append(FOR_KEYWORD_MATCH)
288294
else:
289-
self._keyword_filters = [_KeywordNameMatch(pattern_str)]
295+
self._keyword_filters.append(WHILE_KEYWORD_NAME)
290296
continue
291297
if ':' in pattern_str:
292298
pattern_type, pattern = pattern_str.split(':', 1)
@@ -430,7 +436,16 @@ def start_keyword(self, name: str, attributes: Dict, ts: Optional[Any] = None) -
430436
parent = self.current_item
431437
kwd.rp_parent_item_id = parent.rp_item_id
432438
skip_kwd = parent.remove_data
433-
kwd.remove_data = skip_kwd or self._remove_keyword_data or any(m.match(kwd) for m in self._keyword_filters)
439+
kwd.remove_data = skip_kwd or self._remove_keyword_data
440+
441+
if kwd.remove_data:
442+
kwd.matched_filter = getattr(parent, 'matched_filter', None)
443+
else:
444+
for m in self._keyword_filters:
445+
if m.match(kwd):
446+
kwd.remove_data = True
447+
kwd.matched_filter = m
448+
break
434449

435450
if skip_kwd:
436451
kwd.rp_item_id = str(uuid.uuid4())
@@ -455,10 +470,11 @@ def end_keyword(self, _: Optional[str], attributes: Dict, ts: Optional[Any] = No
455470
:param attributes: Dictionary passed by the Robot Framework
456471
:param ts: Timestamp(used by the ResultVisitor)
457472
"""
458-
if attributes.get('status') == 'FAIL' and not self.current_item.posted:
473+
kwd = self.current_item.update(attributes)
474+
if kwd.status == 'FAIL' and not kwd.posted and kwd.matched_filter is not WKUS_KEYWORD_MATCH:
459475
self._post_skipped_keywords()
460476

461-
kwd = self._remove_current_item().update(attributes)
477+
self._remove_current_item()
462478
if not kwd.posted:
463479
return
464480
self._do_end_keyword(kwd, ts)

robotframework_reportportal/model.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ class Keyword:
6464
skipped_keywords: List['Keyword']
6565
posted: bool
6666
remove_data: bool
67+
matched_filter: Any
6768

6869
def __init__(self, name: str, robot_attributes: Dict[str, Any], parent_type: Optional[str] = None):
6970
"""Initialize required attributes.
@@ -92,6 +93,7 @@ def __init__(self, name: str, robot_attributes: Dict[str, Any], parent_type: Opt
9293
self.skipped_logs = []
9394
self.posted = True
9495
self.remove_data = False
96+
self.matched_filter = None
9597

9698
def get_name(self) -> str:
9799
"""Get name of the keyword suitable for ReportPortal."""

0 commit comments

Comments
 (0)