33import os .path
44import sys
55import threading
6+ from functools import wraps
67from os import curdir
78from time import time , sleep
89from typing import List , Any , Optional , Set , Dict , Tuple
@@ -96,6 +97,19 @@ class ExecStatus(Enum):
9697 FINISHED = auto ()
9798
9899
100+ def check_rp_enabled (func ):
101+ """Verify is RP is enabled in config."""
102+
103+ @wraps (func )
104+ def wrap (* args , ** kwargs ):
105+ if args and isinstance (args [0 ], PyTestServiceClass ):
106+ if not args [0 ].rp :
107+ return
108+ func (* args , ** kwargs )
109+
110+ return wrap
111+
112+
99113class PyTestServiceClass :
100114 """Pytest service class for reporting test results to the Report Portal."""
101115
@@ -165,14 +179,13 @@ def _build_start_launch_rq(self):
165179 }
166180 return start_rq
167181
182+ @check_rp_enabled
168183 def start_launch (self ) -> Optional [str ]:
169184 """
170185 Launch test items.
171186
172187 :return: item ID
173188 """
174- if self .rp is None :
175- return
176189 sl_pt = self ._build_start_launch_rq ()
177190 log .debug ('ReportPortal - Start launch: request_body=%s' , sl_pt )
178191 self ._launch_id = self .rp .start_launch (** sl_pt )
@@ -336,15 +349,13 @@ def _build_item_paths(self, leaf, path):
336349 elif leaf ['type' ] != LeafType .ROOT :
337350 self ._tree_path [leaf ['item' ]] = path + [leaf ]
338351
352+ @check_rp_enabled
339353 def collect_tests (self , session ):
340354 """
341355 Collect all tests.
342356
343357 :param session: pytest.Session
344358 """
345- if self .rp is None :
346- return
347-
348359 # Create a test tree to be able to apply mutations
349360 test_tree = self ._build_test_tree (session )
350361 self ._remove_root_package (test_tree )
@@ -428,10 +439,8 @@ def _create_suite(self, leaf):
428439 leaf ['item_id' ] = item_id
429440 leaf ['exec' ] = ExecStatus .IN_PROGRESS
430441
442+ @check_rp_enabled
431443 def _create_suite_path (self , item ):
432- if self .rp is None :
433- return
434-
435444 path = self ._tree_path [item ]
436445 for leaf in path [1 :- 1 ]:
437446 if leaf ['exec' ] != ExecStatus .CREATED :
@@ -669,14 +678,15 @@ def __unique_id(self):
669678 def __started (self ):
670679 return self .__unique_id () in self ._start_tracker
671680
681+ @check_rp_enabled
672682 def start_pytest_item (self , test_item = None ):
673683 """
674684 Start pytest_item.
675685
676686 :param test_item: pytest.Item
677687 :return: item ID
678688 """
679- if self . rp is None or test_item is None :
689+ if test_item is None :
680690 return
681691
682692 if not self .__started ():
@@ -771,16 +781,14 @@ def _finish_parents(self, leaf):
771781 self ._lock (leaf ['parent' ], lambda p : self ._proceed_suite_finish (p ))
772782 self ._finish_parents (leaf ['parent' ])
773783
784+ @check_rp_enabled
774785 def finish_pytest_item (self , test_item ):
775786 """
776787 Finish pytest_item.
777788
778789 :param test_item: pytest.Item
779790 :return: None
780791 """
781- if self .rp is None :
782- return
783-
784792 path = self ._tree_path [test_item ]
785793 leaf = path [- 1 ]
786794 self ._process_metadata_item_finish (leaf )
@@ -824,18 +832,17 @@ def _finish_launch(self, finish_rq):
824832 log .debug ('ReportPortal - Finish launch: request_body=%s' , finish_rq )
825833 self .rp .finish_launch (** finish_rq )
826834
835+ @check_rp_enabled
827836 def finish_launch (self ):
828837 """
829838 Finish tests launch.
830839
831840 :return: None
832841 """
833- if self .rp is None :
834- return
835-
836842 # To finish launch session str parameter is needed
837843 self ._finish_launch (self ._build_finish_launch_rq ())
838844
845+ @check_rp_enabled
839846 def post_log (self , test_item , message , log_level = 'INFO' , attachment = None ):
840847 """
841848 Send a log message to the Report Portal.
@@ -847,9 +854,6 @@ def post_log(self, test_item, message, log_level='INFO', attachment=None):
847854 :param attachment: attachment file
848855 :return: None
849856 """
850- if self .rp is None :
851- return
852-
853857 if log_level not in self ._log_levels :
854858 log .warning ('Incorrect loglevel = %s. Force set to INFO. '
855859 'Available levels: %s.' , log_level , self ._log_levels )
0 commit comments