hardpy 0.11.0__py3-none-any.whl → 0.11.1__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.
- hardpy/__init__.py +8 -2
- hardpy/cli/cli.py +91 -1
- hardpy/common/config.py +6 -0
- hardpy/common/stand_cloud/__init__.py +2 -1
- hardpy/common/stand_cloud/connector.py +32 -38
- hardpy/hardpy_panel/api.py +24 -2
- hardpy/hardpy_panel/frontend/dist/asset-manifest.json +3 -3
- hardpy/hardpy_panel/frontend/dist/index.html +1 -1
- hardpy/hardpy_panel/frontend/dist/static/js/main.fb8b84a3.js +3 -0
- hardpy/hardpy_panel/frontend/dist/static/js/main.fb8b84a3.js.map +1 -0
- hardpy/pytest_hardpy/plugin.py +23 -8
- hardpy/pytest_hardpy/pytest_wrapper.py +14 -0
- hardpy/pytest_hardpy/result/__init__.py +4 -0
- hardpy/pytest_hardpy/result/couchdb_config.py +6 -8
- hardpy/pytest_hardpy/result/report_loader/stand_cloud_loader.py +6 -9
- hardpy/pytest_hardpy/result/report_reader/stand_cloud_reader.py +84 -0
- hardpy/pytest_hardpy/utils/dialog_box.py +2 -2
- {hardpy-0.11.0.dist-info → hardpy-0.11.1.dist-info}/METADATA +1 -1
- {hardpy-0.11.0.dist-info → hardpy-0.11.1.dist-info}/RECORD +23 -22
- hardpy/hardpy_panel/frontend/dist/static/js/main.114c5914.js +0 -3
- hardpy/hardpy_panel/frontend/dist/static/js/main.114c5914.js.map +0 -1
- /hardpy/hardpy_panel/frontend/dist/static/js/{main.114c5914.js.LICENSE.txt → main.fb8b84a3.js.LICENSE.txt} +0 -0
- {hardpy-0.11.0.dist-info → hardpy-0.11.1.dist-info}/WHEEL +0 -0
- {hardpy-0.11.0.dist-info → hardpy-0.11.1.dist-info}/entry_points.txt +0 -0
- {hardpy-0.11.0.dist-info → hardpy-0.11.1.dist-info}/licenses/LICENSE +0 -0
hardpy/pytest_hardpy/plugin.py
CHANGED
|
@@ -56,6 +56,11 @@ def pytest_addoption(parser: Parser) -> None:
|
|
|
56
56
|
default=con_data.database_url,
|
|
57
57
|
help="database url",
|
|
58
58
|
)
|
|
59
|
+
parser.addoption(
|
|
60
|
+
"--hardpy-tests-name",
|
|
61
|
+
action="store",
|
|
62
|
+
help="HardPy tests suite name",
|
|
63
|
+
)
|
|
59
64
|
# TODO (xorialexandrov): Remove --hardpy-sp and --hardpy-sh in HardPy major version.
|
|
60
65
|
# Addoptions left for compatibility with version 0.10.1 and below
|
|
61
66
|
parser.addoption(
|
|
@@ -117,6 +122,7 @@ class HardpyPlugin:
|
|
|
117
122
|
self._results = {}
|
|
118
123
|
self._post_run_functions: list[Callable] = []
|
|
119
124
|
self._dependencies = {}
|
|
125
|
+
self._tests_name: str = ""
|
|
120
126
|
|
|
121
127
|
if system() == "Linux":
|
|
122
128
|
signal.signal(signal.SIGTERM, self._stop_handler)
|
|
@@ -134,6 +140,12 @@ class HardpyPlugin:
|
|
|
134
140
|
if database_url:
|
|
135
141
|
con_data.database_url = str(database_url) # type: ignore
|
|
136
142
|
|
|
143
|
+
tests_name = config.getoption("--hardpy-tests-name")
|
|
144
|
+
if tests_name:
|
|
145
|
+
self._tests_name = str(tests_name)
|
|
146
|
+
else:
|
|
147
|
+
self._tests_name = str(PurePath(config.rootpath).name)
|
|
148
|
+
|
|
137
149
|
is_clear_database = config.getoption("--hardpy-clear-database")
|
|
138
150
|
|
|
139
151
|
sc_address = config.getoption("--sc-address")
|
|
@@ -174,11 +186,11 @@ class HardpyPlugin:
|
|
|
174
186
|
def pytest_collection_modifyitems(
|
|
175
187
|
self,
|
|
176
188
|
session: Session,
|
|
177
|
-
config: Config,
|
|
189
|
+
config: Config, # noqa: ARG002
|
|
178
190
|
items: list[Item], # noqa: ARG002
|
|
179
191
|
) -> None:
|
|
180
192
|
"""Call after collection phase."""
|
|
181
|
-
self._reporter.init_doc(
|
|
193
|
+
self._reporter.init_doc(self._tests_name)
|
|
182
194
|
|
|
183
195
|
nodes = {}
|
|
184
196
|
modules = set()
|
|
@@ -256,8 +268,8 @@ class HardpyPlugin:
|
|
|
256
268
|
|
|
257
269
|
status = TestStatus.RUN
|
|
258
270
|
is_skip_test = self._is_skip_test(node_info)
|
|
271
|
+
self._reporter.set_module_start_time(node_info.module_id)
|
|
259
272
|
if not is_skip_test:
|
|
260
|
-
self._reporter.set_module_start_time(node_info.module_id)
|
|
261
273
|
self._reporter.set_case_start_time(node_info.module_id, node_info.case_id)
|
|
262
274
|
else:
|
|
263
275
|
status = TestStatus.SKIPPED
|
|
@@ -316,7 +328,11 @@ class HardpyPlugin:
|
|
|
316
328
|
|
|
317
329
|
def pytest_runtest_logreport(self, report: TestReport) -> bool | None:
|
|
318
330
|
"""Call after call of each test item."""
|
|
319
|
-
|
|
331
|
+
is_skipped_by_plugin: bool = False
|
|
332
|
+
if report.when == "setup" and report.skipped is True:
|
|
333
|
+
# plugin-skipped tests should not have start and stop times
|
|
334
|
+
is_skipped_by_plugin = True
|
|
335
|
+
elif report.when != "call" and report.failed is False:
|
|
320
336
|
# ignore setup and teardown phase or continue processing setup
|
|
321
337
|
# and teardown failure (fixture exception handler)
|
|
322
338
|
return True
|
|
@@ -329,10 +345,9 @@ class HardpyPlugin:
|
|
|
329
345
|
case_id,
|
|
330
346
|
TestStatus(report.outcome),
|
|
331
347
|
)
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
case_id
|
|
335
|
-
)
|
|
348
|
+
# update case stop_time in non-skipped tests or user-skipped tests
|
|
349
|
+
if report.skipped is False or is_skipped_by_plugin is False:
|
|
350
|
+
self._reporter.set_case_stop_time(module_id, case_id)
|
|
336
351
|
|
|
337
352
|
assertion_msg = self._decode_assertion_msg(report.longrepr)
|
|
338
353
|
self._reporter.set_assertion_msg(module_id, case_id, assertion_msg)
|
|
@@ -45,6 +45,8 @@ class PyTestWrapper:
|
|
|
45
45
|
"pytest",
|
|
46
46
|
"--hardpy-db-url",
|
|
47
47
|
self.config.database.connection_url(),
|
|
48
|
+
"--hardpy-tests-name",
|
|
49
|
+
self.config.tests_name,
|
|
48
50
|
"--sc-address",
|
|
49
51
|
self.config.stand_cloud.address,
|
|
50
52
|
"--sc-connection-only"
|
|
@@ -62,6 +64,8 @@ class PyTestWrapper:
|
|
|
62
64
|
"pytest",
|
|
63
65
|
"--hardpy-db-url",
|
|
64
66
|
self.config.database.connection_url(),
|
|
67
|
+
"--hardpy-tests-name",
|
|
68
|
+
self.config.tests_name,
|
|
65
69
|
"--sc-address",
|
|
66
70
|
self.config.stand_cloud.address,
|
|
67
71
|
"--sc-connection-only"
|
|
@@ -111,6 +115,8 @@ class PyTestWrapper:
|
|
|
111
115
|
"--collect-only",
|
|
112
116
|
"--hardpy-db-url",
|
|
113
117
|
self.config.database.connection_url(),
|
|
118
|
+
"--hardpy-tests-name",
|
|
119
|
+
self.config.tests_name,
|
|
114
120
|
"--hardpy-pt",
|
|
115
121
|
]
|
|
116
122
|
|
|
@@ -149,3 +155,11 @@ class PyTestWrapper:
|
|
|
149
155
|
bool | None: True if self._proc is not None
|
|
150
156
|
"""
|
|
151
157
|
return self._proc and self._proc.poll() is None
|
|
158
|
+
|
|
159
|
+
def get_config(self) -> dict:
|
|
160
|
+
"""Get HardPy configuration.
|
|
161
|
+
|
|
162
|
+
Returns:
|
|
163
|
+
dict: HardPy configuration
|
|
164
|
+
"""
|
|
165
|
+
return ConfigManager().get_config().model_dump()
|
|
@@ -6,9 +6,13 @@ from hardpy.pytest_hardpy.result.report_loader.stand_cloud_loader import (
|
|
|
6
6
|
StandCloudLoader,
|
|
7
7
|
)
|
|
8
8
|
from hardpy.pytest_hardpy.result.report_reader.couchdb_reader import CouchdbReader
|
|
9
|
+
from hardpy.pytest_hardpy.result.report_reader.stand_cloud_reader import (
|
|
10
|
+
StandCloudReader,
|
|
11
|
+
)
|
|
9
12
|
|
|
10
13
|
__all__ = [
|
|
11
14
|
"CouchdbLoader",
|
|
12
15
|
"CouchdbReader",
|
|
13
16
|
"StandCloudLoader",
|
|
17
|
+
"StandCloudReader",
|
|
14
18
|
]
|
|
@@ -58,17 +58,17 @@ class CouchdbConfig:
|
|
|
58
58
|
|
|
59
59
|
try:
|
|
60
60
|
response = requests.get(host_url, timeout=5)
|
|
61
|
-
except requests.exceptions.RequestException:
|
|
61
|
+
except requests.exceptions.RequestException as exc:
|
|
62
62
|
msg = f"Error CouchDB connecting to {host_url}."
|
|
63
|
-
raise RuntimeError(msg)
|
|
63
|
+
raise RuntimeError(msg) from exc
|
|
64
64
|
|
|
65
65
|
# fmt: off
|
|
66
66
|
try:
|
|
67
67
|
couchdb_dict = ast.literal_eval(response._content.decode("utf-8")) # type: ignore # noqa: SLF001
|
|
68
68
|
couchdb_dict.get("couchdb", False)
|
|
69
|
-
except Exception
|
|
69
|
+
except Exception as exc:
|
|
70
70
|
msg = f"Address {host_url} does not provide CouchDB attributes."
|
|
71
|
-
raise RuntimeError(msg)
|
|
71
|
+
raise RuntimeError(msg) from exc
|
|
72
72
|
# fmt: on
|
|
73
73
|
|
|
74
74
|
credentials = f"{self.user}:{self.password}"
|
|
@@ -93,8 +93,6 @@ class CouchdbConfig:
|
|
|
93
93
|
if requests.get(request, timeout=5).status_code == success:
|
|
94
94
|
return "http"
|
|
95
95
|
raise OSError # noqa: TRY301
|
|
96
|
-
except OSError:
|
|
96
|
+
except OSError as exc:
|
|
97
97
|
msg = f"Error connecting to couchdb server {self.host}:{self.port}."
|
|
98
|
-
raise RuntimeError(
|
|
99
|
-
msg,
|
|
100
|
-
)
|
|
98
|
+
raise RuntimeError(msg) from exc
|
|
@@ -4,9 +4,8 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from typing import TYPE_CHECKING
|
|
6
6
|
|
|
7
|
-
from oauthlib.oauth2.rfc6749.errors import
|
|
7
|
+
from oauthlib.oauth2.rfc6749.errors import OAuth2Error
|
|
8
8
|
from requests.exceptions import HTTPError
|
|
9
|
-
from requests_oauth2client.tokens import ExpiredAccessToken
|
|
10
9
|
|
|
11
10
|
from hardpy.common.stand_cloud.connector import StandCloudConnector, StandCloudError
|
|
12
11
|
from hardpy.pytest_hardpy.utils import ConnectionData
|
|
@@ -45,16 +44,14 @@ class StandCloudLoader:
|
|
|
45
44
|
Raises:
|
|
46
45
|
StandCloudError: if report not uploaded to StandCloud
|
|
47
46
|
"""
|
|
48
|
-
api = self._sc_connector.get_api("
|
|
47
|
+
api = self._sc_connector.get_api("test_report")
|
|
49
48
|
|
|
50
49
|
try:
|
|
51
50
|
resp = api.post(verify=self._verify_ssl, json=report.model_dump())
|
|
52
|
-
except
|
|
53
|
-
raise StandCloudError(str(exc))
|
|
54
|
-
except
|
|
55
|
-
raise StandCloudError(exc.description)
|
|
56
|
-
except InvalidGrantError as exc:
|
|
57
|
-
raise StandCloudError(exc.description)
|
|
51
|
+
except RuntimeError as exc:
|
|
52
|
+
raise StandCloudError(str(exc)) from exc
|
|
53
|
+
except OAuth2Error as exc:
|
|
54
|
+
raise StandCloudError(exc.description) from exc
|
|
58
55
|
except HTTPError as exc:
|
|
59
56
|
return exc.response # type: ignore
|
|
60
57
|
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Copyright (c) 2025 Everypin
|
|
2
|
+
# GNU General Public License v3.0 (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
from urllib.parse import urlencode
|
|
7
|
+
|
|
8
|
+
from oauthlib.oauth2.rfc6749.errors import OAuth2Error
|
|
9
|
+
from requests.exceptions import RequestException
|
|
10
|
+
|
|
11
|
+
from hardpy.common.stand_cloud.connector import StandCloudConnector, StandCloudError
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from typing import Any
|
|
15
|
+
|
|
16
|
+
from requests import Response
|
|
17
|
+
from requests_oauth2client import ApiClient
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class StandCloudReader:
|
|
21
|
+
"""StandCloud data reader.
|
|
22
|
+
|
|
23
|
+
The link to the documentation can be obtained by address:
|
|
24
|
+
https://service_name/integration/api/v1/docs
|
|
25
|
+
|
|
26
|
+
For example:
|
|
27
|
+
https://demo.standcloud.io/integration/api/v1/docs
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def __init__(self, sc_connector: StandCloudConnector) -> None:
|
|
31
|
+
"""Create StandCloud reader.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
sc_connector (StandCloudConnector): StandCloud connector
|
|
35
|
+
"""
|
|
36
|
+
self._verify_ssl = not __debug__
|
|
37
|
+
self._sc_connector = sc_connector
|
|
38
|
+
|
|
39
|
+
def test_run(self, run_id: str) -> Response:
|
|
40
|
+
"""Get run data from '/test_run' endpoint.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
run_id (str): UUIDv4 test run identifier.
|
|
44
|
+
Example: "3fa85f64-5717-4562-b3fc-2c963f66afa6"
|
|
45
|
+
|
|
46
|
+
Returns:
|
|
47
|
+
Response: test run data.
|
|
48
|
+
"""
|
|
49
|
+
return self._request(endpoint=f"test_run/{run_id}")
|
|
50
|
+
|
|
51
|
+
def tested_dut(self, params: dict[str, Any]) -> Response:
|
|
52
|
+
"""Get tested DUT's data from '/tested_dut' endpoint.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
params (dict[str, Any]): tested DUT filters:
|
|
56
|
+
Examples: {
|
|
57
|
+
"test_stand_name": "Stand 1",
|
|
58
|
+
"part_number": "part_number_1",
|
|
59
|
+
"firmware_version": "1.2.3",
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
Response: tested dut data.
|
|
64
|
+
"""
|
|
65
|
+
return self._request(endpoint="tested_dut", params=params)
|
|
66
|
+
|
|
67
|
+
def _request(self, endpoint: str, params: dict[str, Any] | None = None) -> Response:
|
|
68
|
+
api = self._build_api(endpoint=endpoint, params=params)
|
|
69
|
+
try:
|
|
70
|
+
resp = api.get(verify=self._verify_ssl)
|
|
71
|
+
except RuntimeError as exc:
|
|
72
|
+
raise StandCloudError(str(exc)) from exc
|
|
73
|
+
except OAuth2Error as exc:
|
|
74
|
+
raise StandCloudError(exc.description) from exc
|
|
75
|
+
except RequestException as exc:
|
|
76
|
+
return exc.response # type: ignore
|
|
77
|
+
|
|
78
|
+
return resp
|
|
79
|
+
|
|
80
|
+
def _build_api(self, endpoint: str, params: dict | None = None) -> ApiClient:
|
|
81
|
+
if params is None:
|
|
82
|
+
return self._sc_connector.get_api(f"{endpoint}")
|
|
83
|
+
encoded_params = urlencode(params)
|
|
84
|
+
return self._sc_connector.get_api(f"{endpoint}?{encoded_params}")
|
|
@@ -289,9 +289,9 @@ class ImageComponent:
|
|
|
289
289
|
try:
|
|
290
290
|
with open(address, "rb") as file: # noqa: PTH123
|
|
291
291
|
file_data = file.read()
|
|
292
|
-
except FileNotFoundError:
|
|
292
|
+
except FileNotFoundError as exc:
|
|
293
293
|
msg = "The image address is invalid"
|
|
294
|
-
raise ImageError(msg)
|
|
294
|
+
raise ImageError(msg) from exc
|
|
295
295
|
self.address = address
|
|
296
296
|
self.width = width
|
|
297
297
|
self.border = border
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
hardpy/__init__.py,sha256=
|
|
1
|
+
hardpy/__init__.py,sha256=uk-xLjGq0eR0qEj_oWwiuvq7RPAT6sTOIk8R26fLuOE,2065
|
|
2
2
|
hardpy/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
hardpy/cli/cli.py,sha256=
|
|
3
|
+
hardpy/cli/cli.py,sha256=bBuxMfhE-nSYwGpKR8XuLZcZaDwdsK7smb5-O9cj3t4,8779
|
|
4
4
|
hardpy/cli/template.py,sha256=ItgD2DSxxFiW7JOXRXNAT5KrBKe5kqDxQIRKLV3Kd0s,6352
|
|
5
5
|
hardpy/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
-
hardpy/common/config.py,sha256=
|
|
7
|
-
hardpy/common/stand_cloud/__init__.py,sha256=
|
|
8
|
-
hardpy/common/stand_cloud/connector.py,sha256=
|
|
6
|
+
hardpy/common/config.py,sha256=nA2r2FrdKl0e-OqVvoa-3KvQ26Af-b86j7RMhGsWCPE,4966
|
|
7
|
+
hardpy/common/stand_cloud/__init__.py,sha256=fezdiYAehtT2H-GAef-xZU12CbmCRe64XHA9UB3kJDU,456
|
|
8
|
+
hardpy/common/stand_cloud/connector.py,sha256=lOLiEcMOKqllx-nfItCpstDMnm_XVi8xdrff2NSYva0,7018
|
|
9
9
|
hardpy/common/stand_cloud/exception.py,sha256=eKkqu5ylDRIGN_yZhvz2xVGm49XmlZ8nryALgdRqpbY,287
|
|
10
10
|
hardpy/common/stand_cloud/oauth_callback.py,sha256=GkADOnQ46HwxKEdgG_4bS1xX0ybfdQqMK3us-dMuHVw,3322
|
|
11
11
|
hardpy/common/stand_cloud/registration.py,sha256=HxvTex-PxanfVMYt7jiOuxs2lSMt0-f5PbWBvbobvCU,6754
|
|
12
12
|
hardpy/common/stand_cloud/token_storage.py,sha256=aH3-BRefCR-CHd0La6wOEwWxBZY8wOkdXh8WE86vLMo,856
|
|
13
13
|
hardpy/hardpy_panel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
-
hardpy/hardpy_panel/api.py,sha256=
|
|
15
|
-
hardpy/hardpy_panel/frontend/dist/asset-manifest.json,sha256=
|
|
14
|
+
hardpy/hardpy_panel/api.py,sha256=BRY_RuYKPo0e1WdVCPS7iA46GzLIc5A4hLPvtagKqRc,3533
|
|
15
|
+
hardpy/hardpy_panel/frontend/dist/asset-manifest.json,sha256=eSmAD0a5xY2pvZpUyrsawbYB1wN7ONRsaERS6c3FR2M,2824
|
|
16
16
|
hardpy/hardpy_panel/frontend/dist/favicon.ico,sha256=sgIk5PKUKEKBDpkSrc8dJgjpObp0iF82Mec0GpfKId4,15406
|
|
17
|
-
hardpy/hardpy_panel/frontend/dist/index.html,sha256=
|
|
17
|
+
hardpy/hardpy_panel/frontend/dist/index.html,sha256=ReKvf5Fsb9ZpwpIjy5y2CvR3V_oK2dTCAggdU6ILYiA,656
|
|
18
18
|
hardpy/hardpy_panel/frontend/dist/logo192.png,sha256=E4K7drvhJCg9HcTpRihOXZhVJVBZ7-W97Se-3tDb46o,14485
|
|
19
19
|
hardpy/hardpy_panel/frontend/dist/logo512.png,sha256=-fIMbqX7PYUpheK4kX1C1erRTe_hHZwFQYDLrAbhFRU,34188
|
|
20
20
|
hardpy/hardpy_panel/frontend/dist/manifest.json,sha256=PfmJlN2JMJtHS6OnhU4b4X5wPQC_yRBdjesjoirObSA,502
|
|
@@ -32,9 +32,9 @@ hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.c
|
|
|
32
32
|
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.chunk.js.map,sha256=p1xKHRK4AZutkZsQHiWSNU61tYp7I3iUuyLLm3eqkHQ,2833
|
|
33
33
|
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js,sha256=Jl5xm_jQ9IXKhCagHHvnIhwYXb379Q5FFBiqPoKdUIE,605
|
|
34
34
|
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js.map,sha256=amJiG2QaJMRR9Y2M0C2soOqd75xdQHhsVKjwrDSIIT0,2224
|
|
35
|
-
hardpy/hardpy_panel/frontend/dist/static/js/main.
|
|
36
|
-
hardpy/hardpy_panel/frontend/dist/static/js/main.
|
|
37
|
-
hardpy/hardpy_panel/frontend/dist/static/js/main.
|
|
35
|
+
hardpy/hardpy_panel/frontend/dist/static/js/main.fb8b84a3.js,sha256=P7SNLoxtL05KRld5YInGWNQouolJmUeQipzt_WQnVAU,1017440
|
|
36
|
+
hardpy/hardpy_panel/frontend/dist/static/js/main.fb8b84a3.js.LICENSE.txt,sha256=ForPNukClWMEP3pF9LMYoU-ve-LsyCH-rYU8eLki_FY,2315
|
|
37
|
+
hardpy/hardpy_panel/frontend/dist/static/js/main.fb8b84a3.js.map,sha256=zkEWQn20YM-8rGdgCVGeL6exckn_tsN1_7gRDj8k5Ik,5090116
|
|
38
38
|
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.520846c6beb41df528c8.eot,sha256=PTCTrQYNHX2hIPUaYWtOKrI30-iQGXt_EGxq6JCXie0,117628
|
|
39
39
|
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.5c52b39c697f2323ce8b.svg,sha256=lDCQy06aS-9bmhwuFOUs-EdcR8MP2wqwAwky5oamtkQ,509417
|
|
40
40
|
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.84db1772f4bfb529f64f.woff,sha256=edyqQN0nw4dNBs1pgr7pQB7nJhhR6T_YfklFcG_fHj0,53344
|
|
@@ -47,9 +47,9 @@ hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.afbadb627d43b7
|
|
|
47
47
|
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.e857f5a5132b8bfa71a1.woff,sha256=mQZTxE1PyyAL16VWuASOvXlZFwuI4aCPvbrhfgpdIdU,55356
|
|
48
48
|
hardpy/hardpy_panel/frontend/dist/static/media/logo_smol.5b16f92447a4a9e80331.png,sha256=E4K7drvhJCg9HcTpRihOXZhVJVBZ7-W97Se-3tDb46o,14485
|
|
49
49
|
hardpy/pytest_hardpy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
-
hardpy/pytest_hardpy/plugin.py,sha256=
|
|
50
|
+
hardpy/pytest_hardpy/plugin.py,sha256=kpvLY6eNcEs1zLorJWhJybkidLUB501LTfTOtPjbMoo,18196
|
|
51
51
|
hardpy/pytest_hardpy/pytest_call.py,sha256=CL1cIGu5WLm0au7riQ-xVlX0_f8nmubIedBXxRX98tc,12319
|
|
52
|
-
hardpy/pytest_hardpy/pytest_wrapper.py,sha256=
|
|
52
|
+
hardpy/pytest_hardpy/pytest_wrapper.py,sha256=_eULTqbJhFj0uu3XPplS4WSrI_LJC_ZX2kA5t5YJ49U,5162
|
|
53
53
|
hardpy/pytest_hardpy/db/__init__.py,sha256=G6y13JPh8HaH2O9E3_LTH_bTUVSgiezQFjDGaNIljec,557
|
|
54
54
|
hardpy/pytest_hardpy/db/base_connector.py,sha256=5a476F5LwvFUfQ4Yc0Q6biacULDrCk8UHPlpc6n0NRQ,1111
|
|
55
55
|
hardpy/pytest_hardpy/db/base_server.py,sha256=XqTff225iIymPYUGGEja9r9WOilVw7ljcAVp1M8VuAI,404
|
|
@@ -63,24 +63,25 @@ hardpy/pytest_hardpy/reporter/__init__.py,sha256=rztpM2HlLUpMOvad0JHbZU4Mk8PDDQy
|
|
|
63
63
|
hardpy/pytest_hardpy/reporter/base.py,sha256=IGVzKpOTN2uauhrUn3HWTyHhhMQFXAWcOvfo1EzDOkw,2707
|
|
64
64
|
hardpy/pytest_hardpy/reporter/hook_reporter.py,sha256=8cOlOgmLqDty4ib3p5gkZdi6ZAYqAFIjQhQ3Vm6AHGU,11952
|
|
65
65
|
hardpy/pytest_hardpy/reporter/runner_reporter.py,sha256=YsK8wrLIulsixePG6WNfC4MagpKfhP5j0CUaXkcfeL0,790
|
|
66
|
-
hardpy/pytest_hardpy/result/__init__.py,sha256=
|
|
67
|
-
hardpy/pytest_hardpy/result/couchdb_config.py,sha256=
|
|
66
|
+
hardpy/pytest_hardpy/result/__init__.py,sha256=2afpuEuOcxYfIEOwWzsGZe960iQaPVCmsbYujijQg1s,592
|
|
67
|
+
hardpy/pytest_hardpy/result/couchdb_config.py,sha256=ujxyJYM2pdZzi3GZ2Zysbz2_ZeTRN5sQc8AGuzRJm_0,3243
|
|
68
68
|
hardpy/pytest_hardpy/result/report_loader/__init__.py,sha256=wq5Y-_JW2ExCRnQ9VVesKmTToEQrcTY5RxNJIWaT9ag,374
|
|
69
69
|
hardpy/pytest_hardpy/result/report_loader/couchdb_loader.py,sha256=KcZ0JkCgWhrj2J9M04JBDy0fpqtpVEYtu9GCLDG27pU,2255
|
|
70
|
-
hardpy/pytest_hardpy/result/report_loader/stand_cloud_loader.py,sha256=
|
|
70
|
+
hardpy/pytest_hardpy/result/report_loader/stand_cloud_loader.py,sha256=lRPDGIOFquo-KcCYxR6C4vnfe1m_dBWENFN8IkNZDPc,2217
|
|
71
71
|
hardpy/pytest_hardpy/result/report_reader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
72
|
hardpy/pytest_hardpy/result/report_reader/couchdb_reader.py,sha256=GrROwfTVyJaVLPBxkvOM35HCksFEnWm0aVI8FibPikg,5911
|
|
73
|
+
hardpy/pytest_hardpy/result/report_reader/stand_cloud_reader.py,sha256=H-qXND3X1dZfwzg_9ch5rIltZi9e_GxMqc5uG0OkGdQ,2771
|
|
73
74
|
hardpy/pytest_hardpy/utils/__init__.py,sha256=xA4g-d4Z75phko-Vay7ZRSxzIO3FB5-IAiyMyXLZnoE,1511
|
|
74
75
|
hardpy/pytest_hardpy/utils/connection_data.py,sha256=Oq1LdIpmYkwakNCNwAPD-FTH4W7lj_v8vYkQCqJTof8,449
|
|
75
76
|
hardpy/pytest_hardpy/utils/const.py,sha256=RuzRmnpvmUylRbj8CxtaVbo7J9kp6rELvjPdfUzMQLU,407
|
|
76
|
-
hardpy/pytest_hardpy/utils/dialog_box.py,sha256=
|
|
77
|
+
hardpy/pytest_hardpy/utils/dialog_box.py,sha256=LNukQ7ukUzLUFmwwH6L6M8wWmF-Mo4HF-UpVkyf8nY8,11224
|
|
77
78
|
hardpy/pytest_hardpy/utils/exception.py,sha256=bsyExxcFrpArO1WK-tiqwYuPtVC43jj3eHquLcR-3vc,1381
|
|
78
79
|
hardpy/pytest_hardpy/utils/machineid.py,sha256=6JAzUt7KtjTYn8kL9hSMaCQ20U8liH-zDT9v-5Ch7Q8,296
|
|
79
80
|
hardpy/pytest_hardpy/utils/node_info.py,sha256=mA7u1KHHLIq70ZNOOF7NVlxMmfhwGanVyXpBNfBWQDk,4121
|
|
80
81
|
hardpy/pytest_hardpy/utils/progress_calculator.py,sha256=TPl2gG0ZSvMe8otPythhF9hkD6fa6-mJAhy9yI83-yE,1071
|
|
81
82
|
hardpy/pytest_hardpy/utils/singleton.py,sha256=tjUGs48o_vBeVpRsEBZEOTCoCUikpIFmQ1c3rsfymso,948
|
|
82
|
-
hardpy-0.11.
|
|
83
|
-
hardpy-0.11.
|
|
84
|
-
hardpy-0.11.
|
|
85
|
-
hardpy-0.11.
|
|
86
|
-
hardpy-0.11.
|
|
83
|
+
hardpy-0.11.1.dist-info/METADATA,sha256=HrXnRUpVUaEsHdFPoYSRAuTw_77lnHLZBb6tK-3HjCo,3909
|
|
84
|
+
hardpy-0.11.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
85
|
+
hardpy-0.11.1.dist-info/entry_points.txt,sha256=nL2sMkKMScNaOE0IPkYnu9Yr-BUswZvGSrwY-SxHY3E,102
|
|
86
|
+
hardpy-0.11.1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
87
|
+
hardpy-0.11.1.dist-info/RECORD,,
|