qase-python-commons 3.5.3__py3-none-any.whl → 3.5.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of qase-python-commons might be problematic. Click here for more details.
- qase/commons/config.py +12 -0
- qase/commons/models/config/testops.py +5 -0
- qase/commons/reporters/testops.py +26 -7
- {qase_python_commons-3.5.3.dist-info → qase_python_commons-3.5.4.dist-info}/METADATA +1 -1
- {qase_python_commons-3.5.3.dist-info → qase_python_commons-3.5.4.dist-info}/RECORD +7 -7
- {qase_python_commons-3.5.3.dist-info → qase_python_commons-3.5.4.dist-info}/WHEEL +0 -0
- {qase_python_commons-3.5.3.dist-info → qase_python_commons-3.5.4.dist-info}/top_level.txt +0 -0
qase/commons/config.py
CHANGED
|
@@ -142,6 +142,14 @@ class ConfigManager:
|
|
|
142
142
|
self.config.testops.configurations.set_create_if_not_exists(
|
|
143
143
|
configurations.get("createIfNotExists"))
|
|
144
144
|
|
|
145
|
+
if testops.get("statusFilter"):
|
|
146
|
+
status_filter = testops.get("statusFilter")
|
|
147
|
+
if isinstance(status_filter, list):
|
|
148
|
+
self.config.testops.set_status_filter(status_filter)
|
|
149
|
+
elif isinstance(status_filter, str):
|
|
150
|
+
# Parse comma-separated string
|
|
151
|
+
self.config.testops.set_status_filter([s.strip() for s in status_filter.split(',')])
|
|
152
|
+
|
|
145
153
|
if config.get("report"):
|
|
146
154
|
report = config.get("report")
|
|
147
155
|
|
|
@@ -262,6 +270,10 @@ class ConfigManager:
|
|
|
262
270
|
if key == 'QASE_TESTOPS_CONFIGURATIONS_CREATE_IF_NOT_EXISTS':
|
|
263
271
|
self.config.testops.configurations.set_create_if_not_exists(value)
|
|
264
272
|
|
|
273
|
+
if key == 'QASE_TESTOPS_STATUS_FILTER':
|
|
274
|
+
# Parse comma-separated string
|
|
275
|
+
self.config.testops.set_status_filter([s.strip() for s in value.split(',')])
|
|
276
|
+
|
|
265
277
|
if key == 'QASE_REPORT_DRIVER':
|
|
266
278
|
self.config.report.set_driver(value)
|
|
267
279
|
|
|
@@ -48,6 +48,7 @@ class TestopsConfig(BaseModel):
|
|
|
48
48
|
plan: PlanConfig = None
|
|
49
49
|
batch: BatchConfig = None
|
|
50
50
|
configurations: ConfigurationsConfig = None
|
|
51
|
+
status_filter: List[str] = None
|
|
51
52
|
|
|
52
53
|
def __init__(self):
|
|
53
54
|
self.api = ApiConfig()
|
|
@@ -56,9 +57,13 @@ class TestopsConfig(BaseModel):
|
|
|
56
57
|
self.plan = PlanConfig()
|
|
57
58
|
self.configurations = ConfigurationsConfig()
|
|
58
59
|
self.defect = False
|
|
60
|
+
self.status_filter = []
|
|
59
61
|
|
|
60
62
|
def set_project(self, project: str):
|
|
61
63
|
self.project = project
|
|
62
64
|
|
|
63
65
|
def set_defect(self, defect):
|
|
64
66
|
self.defect = QaseUtils.parse_bool(defect)
|
|
67
|
+
|
|
68
|
+
def set_status_filter(self, status_filter: List[str]):
|
|
69
|
+
self.status_filter = status_filter
|
|
@@ -86,15 +86,34 @@ class QaseTestOps:
|
|
|
86
86
|
|
|
87
87
|
def _send_results(self) -> None:
|
|
88
88
|
if self.results:
|
|
89
|
-
#
|
|
90
|
-
self.send_semaphore.acquire()
|
|
91
|
-
self.count_running_threads += 1
|
|
89
|
+
# Filter results by status if status_filter is configured
|
|
92
90
|
results_to_send = self.results.copy()
|
|
91
|
+
|
|
92
|
+
if self.config.testops.status_filter and len(self.config.testops.status_filter) > 0:
|
|
93
|
+
filtered_results = []
|
|
94
|
+
for result in results_to_send:
|
|
95
|
+
result_status = result.get_status()
|
|
96
|
+
if result_status and result_status not in self.config.testops.status_filter:
|
|
97
|
+
filtered_results.append(result)
|
|
98
|
+
else:
|
|
99
|
+
self.logger.log_debug(f"Filtering out result '{result.title}' with status '{result_status}'")
|
|
100
|
+
|
|
101
|
+
results_to_send = filtered_results
|
|
102
|
+
self.logger.log_debug(f"Filtered {len(self.results) - len(results_to_send)} results by status filter")
|
|
103
|
+
|
|
104
|
+
if results_to_send:
|
|
105
|
+
# Acquire semaphore before starting the send operation
|
|
106
|
+
self.send_semaphore.acquire()
|
|
107
|
+
self.count_running_threads += 1
|
|
108
|
+
|
|
109
|
+
# Start a new thread for sending results
|
|
110
|
+
send_thread = threading.Thread(target=self._send_results_threaded, args=(results_to_send,))
|
|
111
|
+
send_thread.start()
|
|
112
|
+
else:
|
|
113
|
+
self.logger.log("No results to send after filtering", "info")
|
|
114
|
+
|
|
115
|
+
# Clear results regardless of filtering
|
|
93
116
|
self.results = []
|
|
94
|
-
|
|
95
|
-
# Start a new thread for sending results
|
|
96
|
-
send_thread = threading.Thread(target=self._send_results_threaded, args=(results_to_send,))
|
|
97
|
-
send_thread.start()
|
|
98
117
|
else:
|
|
99
118
|
self.logger.log("No results to send", "info")
|
|
100
119
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: qase-python-commons
|
|
3
|
-
Version: 3.5.
|
|
3
|
+
Version: 3.5.4
|
|
4
4
|
Summary: A library for Qase TestOps and Qase Report
|
|
5
5
|
Author-email: Qase Team <support@qase.io>
|
|
6
6
|
Project-URL: Homepage, https://github.com/qase-tms/qase-python/tree/main/qase-python-commons
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
qase/commons/__init__.py,sha256=3HI65PJES4Q6YvtkSuRPh6tZboTETJo8wbdHlNYaePU,323
|
|
2
|
-
qase/commons/config.py,sha256
|
|
2
|
+
qase/commons/config.py,sha256=X7PsggEZRPbrE1eb1JBM0ZmhtR4k06dqaFzcNmTG-Rw,12394
|
|
3
3
|
qase/commons/loader.py,sha256=-MMY4HgSI6q1xq3NaJoq_w4liM73qdFKjYLVCT1E7Pc,1064
|
|
4
4
|
qase/commons/logger.py,sha256=KEQr8G0eFZxlI3LJIaaNWOKD8o3NhKsZD06swXFn3FI,1313
|
|
5
5
|
qase/commons/utils.py,sha256=utPRoYyThLs2tgD1lmjkwJ9KZuE7ZjliUiZkJJWFca0,3330
|
|
@@ -23,7 +23,7 @@ qase/commons/models/config/plan.py,sha256=JbAY7qfGXYreXOLa32OLxw6z0paeCCf87-2b1m
|
|
|
23
23
|
qase/commons/models/config/qaseconfig.py,sha256=ho_22bcouoJb1f68EGffeBs_ovK3DVyfbFrYXwQFrWs,1918
|
|
24
24
|
qase/commons/models/config/report.py,sha256=g3Z2B3Tewaasjc1TMj2mkXxz0Zc1C39sHeTXH0MRM2Y,497
|
|
25
25
|
qase/commons/models/config/run.py,sha256=UeZ_1khhKSLbER3pzAl__5iKfDMErvUsXikelc31iKo,682
|
|
26
|
-
qase/commons/models/config/testops.py,sha256=
|
|
26
|
+
qase/commons/models/config/testops.py,sha256=rJ9wW-VMt-5XaoPdRUKeM9rlV0eTiRINEhEulFVczv0,1893
|
|
27
27
|
qase/commons/profilers/__init__.py,sha256=GhKT5hRbHbhAC4GhdyChA8XoAsGQOnIb8S2Z4-fdS7Q,222
|
|
28
28
|
qase/commons/profilers/db.py,sha256=Am1tvvLgJq4_A8JsuSeBGf47BD2lnSX-5KiMjSgr-Ko,391
|
|
29
29
|
qase/commons/profilers/network.py,sha256=zKNBnTQG4BMg8dn8O--tQzQLpu-qs5ADhHEnqIas0gM,4950
|
|
@@ -31,11 +31,11 @@ qase/commons/profilers/sleep.py,sha256=HT6h0R-2XHZAoBYRxS2T_KC8RrnEoVjP7MXusaE4N
|
|
|
31
31
|
qase/commons/reporters/__init__.py,sha256=J0aNLzb_MPPT_zF8BtX_w9nj_U7Ad06RGpyWK5Pxq1o,169
|
|
32
32
|
qase/commons/reporters/core.py,sha256=JyFMGhcDOr3nBlhh0Ca8Dx6BmvNBoG8m1Y4hpC0qIog,8185
|
|
33
33
|
qase/commons/reporters/report.py,sha256=ZLwtVn5gjwgJFtfbpLUO-vW3M3skEq3AhKJwtmM0nUw,4810
|
|
34
|
-
qase/commons/reporters/testops.py,sha256=
|
|
34
|
+
qase/commons/reporters/testops.py,sha256=uph_8upIt5bu4ncqyK7ehXR9NqtpZ34wGUBFLVJKOpE,7481
|
|
35
35
|
qase/commons/util/__init__.py,sha256=0sRRfrMOIPCHpk9tXM94Pj10qrk18B61qEcbLpRjw_I,74
|
|
36
36
|
qase/commons/util/host_data.py,sha256=n8o5PDs8kELCZZ5GR7Jug6LsgZHWJudU7iRmZHRdrlw,5264
|
|
37
37
|
qase/commons/validators/base.py,sha256=wwSn-4YiuXtfGMGnSKgo9Vm5hAKevVmmfd2Ro6Q7MYQ,173
|
|
38
|
-
qase_python_commons-3.5.
|
|
39
|
-
qase_python_commons-3.5.
|
|
40
|
-
qase_python_commons-3.5.
|
|
41
|
-
qase_python_commons-3.5.
|
|
38
|
+
qase_python_commons-3.5.4.dist-info/METADATA,sha256=VRTDQNbqx1qizieGvflYnqMV_EFvabeMe0ltKn2OpJ4,1857
|
|
39
|
+
qase_python_commons-3.5.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
40
|
+
qase_python_commons-3.5.4.dist-info/top_level.txt,sha256=Mn5aFk7H7Uia4s1NRDsvebu8vCrFy9nOuRIBfkIY5kQ,5
|
|
41
|
+
qase_python_commons-3.5.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|