Skip to content

Commit f9983c9

Browse files
authored
Merge pull request #83 from getslash/ayalas/issue-82
Ensure session reported end on "slash.app_quit" hook (closes #82)
2 parents 375bf03 + 73b703b commit f9983c9

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

backslash/contrib/slash_plugin.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
_HAS_TEST_AVOIDED = (int(slash.__version__.split('.')[0]) >= 1)
4747
_HAS_SESSION_INTERRUPT = hasattr(slash.hooks, 'session_interrupt')
4848
_HAS_TEST_DISTRIBUTED = hasattr(slash.hooks, 'test_distributed')
49+
_HAS_APP_QUIT = hasattr(slash.hooks, 'app_quit')
4950

5051
def handle_exceptions(func):
5152

@@ -76,6 +77,7 @@ def __init__(self, url=None, keepalive_interval=None, runtoken=None,
7677
self._error_containers = {}
7778
self._runtoken = runtoken
7879
self._propagate_exceptions = propagate_exceptions
80+
self._started = False
7981

8082
@property
8183
def rest_url(self):
@@ -158,6 +160,7 @@ def _notify_session_start(self):
158160
metadata=metadata,
159161
**self._get_extra_session_start_kwargs()
160162
)
163+
self._started = True
161164
for warning in slash.context.session.warnings:
162165
self.warning_added(warning)
163166
for label in self.current_config.session_labels:
@@ -277,6 +280,7 @@ def test_distributed(self, test_logical_id, worker_session_id): #pylint: disable
277280
if 'report_test_distributed' in self.client.api.info().endpoints:
278281
self.current_test = self.session.report_test_distributed(test_logical_id)
279282

283+
280284
@handle_exceptions
281285
def test_skip(self, reason=None):
282286
self.current_test.mark_skipped(reason=reason)
@@ -409,6 +413,16 @@ def test_end(self):
409413

410414
@handle_exceptions
411415
def session_end(self):
416+
self._session_report_end('session_end')
417+
418+
@slash.plugins.register_if(_HAS_APP_QUIT)
419+
@handle_exceptions # pylint: disable=unused-argument
420+
def app_quit(self):
421+
self._session_report_end('app_quit')
422+
423+
def _session_report_end(self, hook_name):
424+
if not self._started:
425+
return
412426
try:
413427
if self._keepalive_thread is not None:
414428
self._keepalive_thread.stop()
@@ -419,8 +433,9 @@ def session_end(self):
419433
if self.client.api.info().endpoints.report_session_end.version >= 2:
420434
kwargs['has_fatal_errors'] = has_fatal_errors
421435
self.session.report_end(**kwargs)
436+
self._started = False
422437
except Exception: # pylint: disable=broad-except
423-
_logger.error('Exception ignored in session_end', exc_info=True)
438+
_logger.error('Exception ignored in {}'.format(hook_name), exc_info=True)
424439

425440
@handle_exceptions
426441
def error_added(self, result, error):

0 commit comments

Comments
 (0)