qase-python-commons 3.1.0b2__tar.gz → 3.1.0b5__tar.gz

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.

Files changed (45) hide show
  1. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/PKG-INFO +1 -1
  2. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/pyproject.toml +1 -1
  3. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/config.py +9 -10
  4. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/config/framework.py +3 -2
  5. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/config/qaseconfig.py +3 -2
  6. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/config/run.py +3 -2
  7. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/config/testops.py +5 -4
  8. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/reporters/core.py +6 -3
  9. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/reporters/testops.py +22 -0
  10. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/utils.py +4 -0
  11. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase_python_commons.egg-info/PKG-INFO +1 -1
  12. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/README.md +0 -0
  13. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/setup.cfg +0 -0
  14. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/__init__.py +0 -0
  15. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/client/api_v1_client.py +0 -0
  16. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/client/api_v2_client.py +0 -0
  17. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/client/base_api_client.py +0 -0
  18. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/exceptions/reporter.py +0 -0
  19. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/loader.py +0 -0
  20. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/logger.py +0 -0
  21. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/__init__.py +0 -0
  22. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/attachment.py +0 -0
  23. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/basemodel.py +0 -0
  24. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/config/api.py +0 -0
  25. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/config/batch.py +0 -0
  26. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/config/connection.py +0 -0
  27. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/config/plan.py +0 -0
  28. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/config/report.py +0 -0
  29. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/relation.py +0 -0
  30. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/result.py +0 -0
  31. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/run.py +0 -0
  32. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/runtime.py +0 -0
  33. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/step.py +0 -0
  34. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/models/suite.py +0 -0
  35. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/profilers/__init__.py +0 -0
  36. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/profilers/db.py +0 -0
  37. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/profilers/network.py +0 -0
  38. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/profilers/sleep.py +0 -0
  39. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/reporters/__init__.py +0 -0
  40. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/reporters/report.py +0 -0
  41. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase/commons/validators/base.py +0 -0
  42. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase_python_commons.egg-info/SOURCES.txt +0 -0
  43. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase_python_commons.egg-info/dependency_links.txt +0 -0
  44. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase_python_commons.egg-info/requires.txt +0 -0
  45. {qase_python_commons-3.1.0b2 → qase_python_commons-3.1.0b5}/src/qase_python_commons.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qase-python-commons
3
- Version: 3.1.0b2
3
+ Version: 3.1.0b5
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/master/qase-python-commons
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "qase-python-commons"
7
- version = "3.1.0b2"
7
+ version = "3.1.0b5"
8
8
  description = "A library for Qase TestOps and Qase Report"
9
9
  readme = "README.md"
10
10
  authors = [{name = "Qase Team", email = "support@qase.io"}]
@@ -10,7 +10,6 @@ class ConfigManager:
10
10
  self.logger = Logger()
11
11
  self.__config_file = config_file
12
12
  self.config = QaseConfig()
13
- self.parse_bool = lambda d: d in ("y", "yes", "true", "1", 1, True)
14
13
 
15
14
  self.__load_file_config()
16
15
  self.__load_env_config()
@@ -56,7 +55,7 @@ class ConfigManager:
56
55
 
57
56
  if config.get("debug"):
58
57
  self.config.set_debug(
59
- self.parse_bool(config.get("debug"))
58
+ config.get("debug")
60
59
  )
61
60
 
62
61
  if config.get("executionPlan"):
@@ -81,12 +80,12 @@ class ConfigManager:
81
80
 
82
81
  if testops.get("defect"):
83
82
  self.config.testops.set_defect(
84
- self.parse_bool(testops.get("defect"))
83
+ testops.get("defect")
85
84
  )
86
85
 
87
86
  if testops.get("useV2"):
88
87
  self.config.testops.set_use_v2(
89
- self.parse_bool(testops.get("useV2"))
88
+ testops.get("useV2")
90
89
  )
91
90
 
92
91
  if testops.get("plan"):
@@ -109,7 +108,7 @@ class ConfigManager:
109
108
 
110
109
  if run.get("complete"):
111
110
  self.config.testops.run.set_complete(
112
- self.parse_bool(run.get("complete"))
111
+ run.get("complete")
113
112
  )
114
113
 
115
114
  if testops.get("batch"):
@@ -143,7 +142,7 @@ class ConfigManager:
143
142
 
144
143
  if pytest.get("captureLogs"):
145
144
  self.config.framework.pytest.set_capture_logs(
146
- self.parse_bool(pytest.get("captureLogs"))
145
+ pytest.get("captureLogs")
147
146
  )
148
147
 
149
148
  except Exception as e:
@@ -168,7 +167,7 @@ class ConfigManager:
168
167
  self.config.set_profilers(value.split(','))
169
168
 
170
169
  if key == 'QASE_DEBUG':
171
- self.config.set_debug(self.parse_bool(value))
170
+ self.config.set_debug(value)
172
171
 
173
172
  if key == 'QASE_EXECUTION_PLAN_PATH':
174
173
  self.config.execution_plan.set_path(value)
@@ -183,7 +182,7 @@ class ConfigManager:
183
182
  self.config.testops.set_project(value)
184
183
 
185
184
  if key == 'QASE_TESTOPS_DEFECT':
186
- self.config.testops.set_defect(self.parse_bool(value))
185
+ self.config.testops.set_defect(value)
187
186
 
188
187
  if key == 'QASE_TESTOPS_PLAN_ID':
189
188
  self.config.testops.plan.set_id(value)
@@ -198,7 +197,7 @@ class ConfigManager:
198
197
  self.config.testops.run.set_description(value)
199
198
 
200
199
  if key == 'QASE_TESTOPS_RUN_COMPLETE':
201
- self.config.testops.run.set_complete(self.parse_bool(value))
200
+ self.config.testops.run.set_complete(value)
202
201
 
203
202
  if key == 'QASE_TESTOPS_BATCH_SIZE':
204
203
  self.config.testops.batch.set_size(value)
@@ -213,7 +212,7 @@ class ConfigManager:
213
212
  self.config.report.connection.set_format(value)
214
213
 
215
214
  if key == 'QASE_PYTEST_CAPTURE_LOGS':
216
- self.config.framework.pytest.set_capture_logs(self.parse_bool(value))
215
+ self.config.framework.pytest.set_capture_logs(value)
217
216
 
218
217
  except Exception as e:
219
218
  self.logger.log("Failed to load config from env vars {e}", "error")
@@ -1,4 +1,5 @@
1
1
  from ..basemodel import BaseModel
2
+ from ... import QaseUtils
2
3
 
3
4
 
4
5
  class PytestConfig(BaseModel):
@@ -7,8 +8,8 @@ class PytestConfig(BaseModel):
7
8
  def __init__(self):
8
9
  self.capture_logs = False
9
10
 
10
- def set_capture_logs(self, capture_logs: bool):
11
- self.capture_logs = capture_logs
11
+ def set_capture_logs(self, capture_logs):
12
+ self.capture_logs = QaseUtils.parse_bool(capture_logs)
12
13
 
13
14
 
14
15
  class Framework(BaseModel):
@@ -4,6 +4,7 @@ from .framework import Framework
4
4
  from .report import ReportConfig
5
5
  from .testops import TestopsConfig
6
6
  from ..basemodel import BaseModel
7
+ from ... import QaseUtils
7
8
 
8
9
 
9
10
  class Mode(Enum):
@@ -61,5 +62,5 @@ class QaseConfig(BaseModel):
61
62
  def set_root_suite(self, root_suite: str):
62
63
  self.root_suite = root_suite
63
64
 
64
- def set_debug(self, debug: bool):
65
- self.debug = debug
65
+ def set_debug(self, debug):
66
+ self.debug = QaseUtils.parse_bool(debug)
@@ -1,4 +1,5 @@
1
1
  from ..basemodel import BaseModel
2
+ from ... import QaseUtils
2
3
 
3
4
 
4
5
  class RunConfig(BaseModel):
@@ -16,8 +17,8 @@ class RunConfig(BaseModel):
16
17
  def set_description(self, description: str):
17
18
  self.description = description
18
19
 
19
- def set_complete(self, complete: bool):
20
- self.complete = complete
20
+ def set_complete(self, complete):
21
+ self.complete = QaseUtils.parse_bool(complete)
21
22
 
22
23
  def set_id(self, id: int):
23
24
  self.id = id
@@ -3,6 +3,7 @@ from .batch import BatchConfig
3
3
  from .plan import PlanConfig
4
4
  from .run import RunConfig
5
5
  from ..basemodel import BaseModel
6
+ from ... import QaseUtils
6
7
 
7
8
 
8
9
  class TestopsConfig(BaseModel):
@@ -24,8 +25,8 @@ class TestopsConfig(BaseModel):
24
25
  def set_project(self, project: str):
25
26
  self.project = project
26
27
 
27
- def set_defect(self, defect: bool):
28
- self.defect = defect
28
+ def set_defect(self, defect):
29
+ self.defect = QaseUtils.parse_bool(defect)
29
30
 
30
- def set_use_v2(self, use_v2: bool):
31
- self.use_v2 = use_v2
31
+ def set_use_v2(self, use_v2):
32
+ self.use_v2 = QaseUtils.parse_bool(use_v2)
@@ -10,7 +10,7 @@ from .testops import QaseTestOps
10
10
 
11
11
  from ..models import Result, Attachment, Runtime
12
12
  from ..models.config.qaseconfig import Mode
13
- from typing import Union
13
+ from typing import Union, List
14
14
 
15
15
  """
16
16
  CoreReporter is a facade for all reporters and it is used to initialize and manage them.
@@ -23,7 +23,7 @@ class QaseCoreReporter:
23
23
  config.validate_config()
24
24
  self.config = config.config
25
25
  self.logger = Logger(self.config.debug)
26
- self.execution_plan = None
26
+ self._execution_plan = None
27
27
  self.profilers = []
28
28
  self.overhead = 0
29
29
 
@@ -151,6 +151,9 @@ class QaseCoreReporter:
151
151
  self.logger.log(e, 'error')
152
152
  self._run_fallback()
153
153
 
154
+ def get_execution_plan(self) -> Union[None, List[int]]:
155
+ return self._execution_plan
156
+
154
157
  def _run_fallback(self) -> None:
155
158
  if self.fallback:
156
159
  try:
@@ -176,7 +179,7 @@ class QaseCoreReporter:
176
179
  api_token=self.config.testops.api.token,
177
180
  host=self.config.testops.api.host
178
181
  )
179
- self.execution_plan = loader.load(self.config.testops.project,
182
+ self._execution_plan = loader.load(self.config.testops.project,
180
183
  int(self.config.testops.plan.id))
181
184
  except Exception as e:
182
185
  self.logger.log('Failed to load test plan from Qase TestOps', 'info')
@@ -1,4 +1,5 @@
1
1
  import threading
2
+ import urllib.parse
2
3
 
3
4
  from datetime import datetime
4
5
  from typing import List
@@ -17,6 +18,7 @@ class QaseTestOps:
17
18
  def __init__(self, config: QaseConfig, logger: Logger) -> None:
18
19
  self.config = config
19
20
  self.logger = logger
21
+ self.__baseUrl = self.__get_host(config.testops.api.host)
20
22
 
21
23
  self.client = self._prepare_client()
22
24
 
@@ -128,6 +130,8 @@ class QaseTestOps:
128
130
  self._send_results()
129
131
 
130
132
  def add_result(self, result: Result) -> None:
133
+ if result.get_status() == 'failed':
134
+ self.__show_link(result.testops_id, result.title)
131
135
  self.results.append(result)
132
136
  if len(self.results) >= self.batch_size:
133
137
  self._send_results()
@@ -137,3 +141,21 @@ class QaseTestOps:
137
141
 
138
142
  def set_results(self, results) -> None:
139
143
  self.results = results
144
+
145
+ def __show_link(self, id, title: str):
146
+ link = self.__prepare_link(id, title)
147
+ self.logger.log(f"See why this test failed: {link}", "info")
148
+
149
+ def __prepare_link(self, id, title: str):
150
+ link = f"{self.__baseUrl}/run/{self.project_code}/dashboard/{self.run_id}?source=logs&status=%5B2%5D&search="
151
+ if id:
152
+ return f"{link}{id}`"
153
+
154
+ return f"{link}{urllib.parse.quote_plus(title)}"
155
+
156
+ @staticmethod
157
+ def __get_host(host: str):
158
+ if host == 'qase.io':
159
+ return 'https://app.qase.io'
160
+
161
+ return f'https://{host.replace("api", "app")}'
@@ -37,6 +37,10 @@ class QaseUtils:
37
37
  def get_thread_name() -> str:
38
38
  return f"{os.getpid()}-{threading.current_thread().name}"
39
39
 
40
+ @staticmethod
41
+ def parse_bool(value) -> bool:
42
+ return value in ("y", "yes", "true", "True", "TRUE", "1", 1, True)
43
+
40
44
  @staticmethod
41
45
  def uuid() -> str:
42
46
  return str(uuid.uuid4())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qase-python-commons
3
- Version: 3.1.0b2
3
+ Version: 3.1.0b5
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/master/qase-python-commons