hardpy 0.9.0__py3-none-any.whl → 0.10.0__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 +4 -1
- hardpy/cli/cli.py +78 -11
- hardpy/common/config.py +16 -0
- hardpy/common/stand_cloud/__init__.py +13 -0
- hardpy/common/stand_cloud/connector.py +227 -0
- hardpy/common/stand_cloud/exception.py +9 -0
- hardpy/common/stand_cloud/oauth_callback.py +95 -0
- hardpy/common/stand_cloud/registration.py +209 -0
- hardpy/common/stand_cloud/token_storage.py +23 -0
- hardpy/hardpy_panel/api.py +10 -8
- 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.8a7d8f7d.js +3 -0
- hardpy/hardpy_panel/frontend/dist/static/js/main.8a7d8f7d.js.map +1 -0
- hardpy/pytest_hardpy/db/const.py +1 -0
- hardpy/pytest_hardpy/db/schema/v1.py +2 -0
- hardpy/pytest_hardpy/plugin.py +52 -4
- hardpy/pytest_hardpy/pytest_wrapper.py +10 -0
- hardpy/pytest_hardpy/reporter/hook_reporter.py +10 -0
- hardpy/pytest_hardpy/result/__init__.py +4 -0
- hardpy/pytest_hardpy/result/report_loader/__init__.py +4 -0
- hardpy/pytest_hardpy/result/report_loader/stand_cloud_loader.py +72 -0
- hardpy/pytest_hardpy/utils/connection_data.py +2 -0
- {hardpy-0.9.0.dist-info → hardpy-0.10.0.dist-info}/METADATA +8 -2
- {hardpy-0.9.0.dist-info → hardpy-0.10.0.dist-info}/RECORD +29 -22
- {hardpy-0.9.0.dist-info → hardpy-0.10.0.dist-info}/WHEEL +1 -1
- hardpy/hardpy_panel/frontend/dist/static/js/main.403e9cd8.js +0 -3
- hardpy/hardpy_panel/frontend/dist/static/js/main.403e9cd8.js.map +0 -1
- /hardpy/hardpy_panel/frontend/dist/static/js/{main.403e9cd8.js.LICENSE.txt → main.8a7d8f7d.js.LICENSE.txt} +0 -0
- {hardpy-0.9.0.dist-info → hardpy-0.10.0.dist-info}/entry_points.txt +0 -0
- {hardpy-0.9.0.dist-info → hardpy-0.10.0.dist-info}/licenses/LICENSE +0 -0
hardpy/pytest_hardpy/db/const.py
CHANGED
|
@@ -217,6 +217,7 @@ class ResultStateStore(IBaseResult):
|
|
|
217
217
|
"start_time": 1695817263,
|
|
218
218
|
"status": "failed",
|
|
219
219
|
"name": "hardpy-stand",
|
|
220
|
+
"alert": "",
|
|
220
221
|
"dut": {
|
|
221
222
|
"serial_number": "92c5a4bb-ecb0-42c5-89ac-e0caca0919fd",
|
|
222
223
|
"part_number": "part_1",
|
|
@@ -303,6 +304,7 @@ class ResultStateStore(IBaseResult):
|
|
|
303
304
|
dut: Dut
|
|
304
305
|
modules: dict[str, ModuleStateStore] = {}
|
|
305
306
|
operator_msg: dict = {}
|
|
307
|
+
alert: str
|
|
306
308
|
|
|
307
309
|
|
|
308
310
|
class ResultRunStore(IBaseResult):
|
hardpy/pytest_hardpy/plugin.py
CHANGED
|
@@ -31,6 +31,7 @@ from pytest import (
|
|
|
31
31
|
skip,
|
|
32
32
|
)
|
|
33
33
|
|
|
34
|
+
from hardpy.common.stand_cloud.connector import StandCloudConnector, StandCloudError
|
|
34
35
|
from hardpy.pytest_hardpy.reporter import HookReporter
|
|
35
36
|
from hardpy.pytest_hardpy.utils import (
|
|
36
37
|
ConnectionData,
|
|
@@ -40,6 +41,11 @@ from hardpy.pytest_hardpy.utils import (
|
|
|
40
41
|
)
|
|
41
42
|
from hardpy.pytest_hardpy.utils.node_info import TestDependencyInfo
|
|
42
43
|
|
|
44
|
+
if __debug__:
|
|
45
|
+
from urllib3 import disable_warnings
|
|
46
|
+
from urllib3.exceptions import InsecureRequestWarning
|
|
47
|
+
|
|
48
|
+
disable_warnings(InsecureRequestWarning)
|
|
43
49
|
|
|
44
50
|
def pytest_addoption(parser: Parser) -> None:
|
|
45
51
|
"""Register argparse-style options."""
|
|
@@ -74,6 +80,18 @@ def pytest_addoption(parser: Parser) -> None:
|
|
|
74
80
|
default=False,
|
|
75
81
|
help="enable pytest-hardpy plugin",
|
|
76
82
|
)
|
|
83
|
+
parser.addoption(
|
|
84
|
+
"--sc-address",
|
|
85
|
+
action="store",
|
|
86
|
+
default=con_data.sc_address,
|
|
87
|
+
help="StandCloud address",
|
|
88
|
+
)
|
|
89
|
+
parser.addoption(
|
|
90
|
+
"--sc-connection-only",
|
|
91
|
+
action="store_true",
|
|
92
|
+
default=con_data.sc_connection_only,
|
|
93
|
+
help="check StandCloud availability",
|
|
94
|
+
)
|
|
77
95
|
|
|
78
96
|
|
|
79
97
|
# Bootstrapping hooks
|
|
@@ -126,6 +144,14 @@ class HardpyPlugin:
|
|
|
126
144
|
if socket_host:
|
|
127
145
|
con_data.socket_host = str(socket_host) # type: ignore
|
|
128
146
|
|
|
147
|
+
sc_address = config.getoption("--sc-address")
|
|
148
|
+
if sc_address:
|
|
149
|
+
con_data.sc_address = str(sc_address) # type: ignore
|
|
150
|
+
|
|
151
|
+
sc_connection_only = config.getoption("--sc-connection-only")
|
|
152
|
+
if sc_connection_only:
|
|
153
|
+
con_data.sc_connection_only = bool(sc_connection_only) # type: ignore
|
|
154
|
+
|
|
129
155
|
config.addinivalue_line("markers", "case_name")
|
|
130
156
|
config.addinivalue_line("markers", "module_name")
|
|
131
157
|
config.addinivalue_line("markers", "dependency")
|
|
@@ -202,6 +228,27 @@ class HardpyPlugin:
|
|
|
202
228
|
# ignore collect only mode
|
|
203
229
|
return True
|
|
204
230
|
|
|
231
|
+
con_data = ConnectionData()
|
|
232
|
+
|
|
233
|
+
if con_data.sc_connection_only: # check
|
|
234
|
+
try:
|
|
235
|
+
sc_connector = StandCloudConnector(addr=con_data.sc_address)
|
|
236
|
+
except StandCloudError as exc:
|
|
237
|
+
msg = str(exc)
|
|
238
|
+
self._reporter.set_alert(msg)
|
|
239
|
+
exit(msg)
|
|
240
|
+
try:
|
|
241
|
+
sc_connector.healthcheck()
|
|
242
|
+
except Exception: # noqa: BLE001
|
|
243
|
+
addr = con_data.sc_address
|
|
244
|
+
msg = (
|
|
245
|
+
f"StandCloud service at the address {addr} "
|
|
246
|
+
"not available or HardPy user is not authorized"
|
|
247
|
+
)
|
|
248
|
+
self._reporter.set_alert(msg)
|
|
249
|
+
self._reporter.update_db_by_doc()
|
|
250
|
+
exit(msg)
|
|
251
|
+
|
|
205
252
|
# testrun entrypoint
|
|
206
253
|
self._reporter.start()
|
|
207
254
|
self._reporter.update_db_by_doc()
|
|
@@ -334,9 +381,10 @@ class HardpyPlugin:
|
|
|
334
381
|
self._results[module_id][case_id] = None
|
|
335
382
|
|
|
336
383
|
def _collect_module_result(self, module_id: str) -> None:
|
|
337
|
-
if
|
|
338
|
-
|
|
339
|
-
|
|
384
|
+
if (
|
|
385
|
+
TestStatus.FAILED in self._results[module_id].values()
|
|
386
|
+
or TestStatus.ERROR in self._results[module_id].values()
|
|
387
|
+
):
|
|
340
388
|
status = TestStatus.FAILED
|
|
341
389
|
elif TestStatus.SKIPPED in self._results[module_id].values():
|
|
342
390
|
status = TestStatus.SKIPPED
|
|
@@ -356,7 +404,7 @@ class HardpyPlugin:
|
|
|
356
404
|
self._stop_tests()
|
|
357
405
|
return TestStatus.STOPPED
|
|
358
406
|
case _:
|
|
359
|
-
return TestStatus.
|
|
407
|
+
return TestStatus.FAILED
|
|
360
408
|
|
|
361
409
|
def _stop_tests(self) -> None:
|
|
362
410
|
"""Update module and case statuses from READY or RUN to STOPPED."""
|
|
@@ -47,6 +47,11 @@ class PyTestWrapper:
|
|
|
47
47
|
str(self.config.socket.port),
|
|
48
48
|
"--hardpy-sh",
|
|
49
49
|
self.config.socket.host,
|
|
50
|
+
"--sc-address",
|
|
51
|
+
self.config.stand_cloud.address,
|
|
52
|
+
"--sc-connection-only"
|
|
53
|
+
if self.config.stand_cloud.connection_only
|
|
54
|
+
else "",
|
|
50
55
|
"--hardpy-pt",
|
|
51
56
|
],
|
|
52
57
|
cwd=ConfigManager().get_tests_path(),
|
|
@@ -63,6 +68,11 @@ class PyTestWrapper:
|
|
|
63
68
|
str(self.config.socket.port),
|
|
64
69
|
"--hardpy-sh",
|
|
65
70
|
self.config.socket.host,
|
|
71
|
+
"--sc-address",
|
|
72
|
+
self.config.stand_cloud.address,
|
|
73
|
+
"--sc-connection-only"
|
|
74
|
+
if self.config.stand_cloud.connection_only
|
|
75
|
+
else "",
|
|
66
76
|
"--hardpy-pt",
|
|
67
77
|
],
|
|
68
78
|
cwd=ConfigManager().get_tests_path(),
|
|
@@ -37,6 +37,7 @@ class HookReporter(BaseReporter):
|
|
|
37
37
|
self.set_doc_value(DF.PROGRESS, 0, statestore_only=True)
|
|
38
38
|
self.set_doc_value(DF.ARTIFACT, {}, runstore_only=True)
|
|
39
39
|
self.set_doc_value(DF.OPERATOR_MSG, {}, statestore_only=True)
|
|
40
|
+
self.set_doc_value(DF.ALERT, "", statestore_only=True)
|
|
40
41
|
|
|
41
42
|
test_stand_tz = self.generate_key(DF.TEST_STAND, DF.TIMEZONE)
|
|
42
43
|
self.set_doc_value(test_stand_tz, str(get_localzone().key))
|
|
@@ -51,6 +52,7 @@ class HookReporter(BaseReporter):
|
|
|
51
52
|
self.set_doc_value(DF.START_TIME, start_time)
|
|
52
53
|
self.set_doc_value(DF.STATUS, TestStatus.RUN)
|
|
53
54
|
self.set_doc_value(DF.PROGRESS, 0, statestore_only=True)
|
|
55
|
+
self.set_doc_value(DF.ALERT, "", statestore_only=True)
|
|
54
56
|
|
|
55
57
|
def finish(self, status: TestStatus) -> None:
|
|
56
58
|
"""Finish test.
|
|
@@ -185,6 +187,14 @@ class HookReporter(BaseReporter):
|
|
|
185
187
|
)
|
|
186
188
|
self.set_doc_value(key, attempt, statestore_only=True)
|
|
187
189
|
|
|
190
|
+
def set_alert(self, alert: str) -> None:
|
|
191
|
+
"""Set alert message.
|
|
192
|
+
|
|
193
|
+
Args:
|
|
194
|
+
alert (str): alert message
|
|
195
|
+
"""
|
|
196
|
+
self.set_doc_value(DF.ALERT, alert, statestore_only=True)
|
|
197
|
+
|
|
188
198
|
def update_node_order(self, nodes: dict) -> None:
|
|
189
199
|
"""Update node order.
|
|
190
200
|
|
|
@@ -2,9 +2,13 @@
|
|
|
2
2
|
# GNU General Public License v3.0 (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
3
3
|
|
|
4
4
|
from hardpy.pytest_hardpy.result.report_loader.couchdb_loader import CouchdbLoader
|
|
5
|
+
from hardpy.pytest_hardpy.result.report_loader.stand_cloud_loader import (
|
|
6
|
+
StandCloudLoader,
|
|
7
|
+
)
|
|
5
8
|
from hardpy.pytest_hardpy.result.report_reader.couchdb_reader import CouchdbReader
|
|
6
9
|
|
|
7
10
|
__all__ = [
|
|
8
11
|
"CouchdbLoader",
|
|
9
12
|
"CouchdbReader",
|
|
13
|
+
"StandCloudLoader",
|
|
10
14
|
]
|
|
@@ -4,7 +4,11 @@
|
|
|
4
4
|
from hardpy.pytest_hardpy.result.report_loader.couchdb_loader import (
|
|
5
5
|
CouchdbLoader,
|
|
6
6
|
)
|
|
7
|
+
from hardpy.pytest_hardpy.result.report_loader.stand_cloud_loader import (
|
|
8
|
+
StandCloudLoader,
|
|
9
|
+
)
|
|
7
10
|
|
|
8
11
|
__all__ = [
|
|
9
12
|
"CouchdbLoader",
|
|
13
|
+
"StandCloudLoader",
|
|
10
14
|
]
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Copyright (c) 2024 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
|
+
|
|
7
|
+
from oauthlib.oauth2.rfc6749.errors import InvalidGrantError, TokenExpiredError
|
|
8
|
+
from requests.exceptions import HTTPError
|
|
9
|
+
from requests_oauth2client.tokens import ExpiredAccessToken
|
|
10
|
+
|
|
11
|
+
from hardpy.common.stand_cloud.connector import StandCloudConnector, StandCloudError
|
|
12
|
+
from hardpy.pytest_hardpy.utils import ConnectionData
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from requests import Response
|
|
16
|
+
|
|
17
|
+
from hardpy.pytest_hardpy.db.schema import ResultRunStore
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class StandCloudLoader:
|
|
21
|
+
"""StandCloud report generator."""
|
|
22
|
+
|
|
23
|
+
def __init__(self, address: str | None = None) -> None:
|
|
24
|
+
"""Create StandCLoud loader.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
address (str | None, optional): StandCloud address.
|
|
28
|
+
Defaults to None (the value is taken from the.toml).
|
|
29
|
+
Can be used outside of HardPy applications.
|
|
30
|
+
"""
|
|
31
|
+
self._verify_ssl = not __debug__
|
|
32
|
+
connection_data = ConnectionData()
|
|
33
|
+
sc_addr = address if address else connection_data.sc_address
|
|
34
|
+
self._sc_connector = StandCloudConnector(sc_addr)
|
|
35
|
+
|
|
36
|
+
def load(self, report: ResultRunStore) -> Response:
|
|
37
|
+
"""Load report to the StandCloud.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
report (ResultRunStore): report
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
Response: StandCloud load response, must be 201
|
|
44
|
+
|
|
45
|
+
Raises:
|
|
46
|
+
StandCloudError: if report not uploaded to StandCloud
|
|
47
|
+
"""
|
|
48
|
+
api = self._sc_connector.get_api("api/test_run")
|
|
49
|
+
|
|
50
|
+
try:
|
|
51
|
+
resp = api.post(verify=self._verify_ssl, json=report.model_dump())
|
|
52
|
+
except ExpiredAccessToken as exc:
|
|
53
|
+
raise StandCloudError(str(exc)) # type: ignore
|
|
54
|
+
except TokenExpiredError as exc:
|
|
55
|
+
raise StandCloudError(exc.description)
|
|
56
|
+
except InvalidGrantError as exc:
|
|
57
|
+
raise StandCloudError(exc.description)
|
|
58
|
+
except HTTPError as exc:
|
|
59
|
+
return exc.response # type: ignore
|
|
60
|
+
|
|
61
|
+
return resp
|
|
62
|
+
|
|
63
|
+
def healthcheck(self) -> Response:
|
|
64
|
+
"""Healthcheck of StandCloud API.
|
|
65
|
+
|
|
66
|
+
Returns:
|
|
67
|
+
Response: StandCloud healthcheck response, must be 200
|
|
68
|
+
|
|
69
|
+
Raises:
|
|
70
|
+
StandCloudError: if StandCloud is unavailable
|
|
71
|
+
"""
|
|
72
|
+
return self._sc_connector.healthcheck()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: hardpy
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.10.0
|
|
4
4
|
Summary: HardPy library for device testing
|
|
5
5
|
Project-URL: Homepage, https://github.com/everypinio/hardpy/
|
|
6
6
|
Project-URL: Documentation, https://everypinio.github.io/hardpy/
|
|
@@ -26,11 +26,17 @@ Classifier: Topic :: Utilities
|
|
|
26
26
|
Requires-Python: >=3.10
|
|
27
27
|
Requires-Dist: fastapi>=0.100.1
|
|
28
28
|
Requires-Dist: glom>=23.3.0
|
|
29
|
+
Requires-Dist: jinja2<4,>=3
|
|
30
|
+
Requires-Dist: keyring<26,>=25.0.0
|
|
29
31
|
Requires-Dist: natsort>=8.4.0
|
|
32
|
+
Requires-Dist: oauthlib<4,>=3.1.0
|
|
30
33
|
Requires-Dist: py-machineid~=0.6.0
|
|
31
34
|
Requires-Dist: pycouchdb<2,>=1.14.2
|
|
32
35
|
Requires-Dist: pydantic<3,>=2.4.0
|
|
33
36
|
Requires-Dist: pytest<9,>=7
|
|
37
|
+
Requires-Dist: requests-oauth2client<2,>=1.5.0
|
|
38
|
+
Requires-Dist: requests-oauthlib<3,>=2.0.0
|
|
39
|
+
Requires-Dist: requests<3,>=2.30.0
|
|
34
40
|
Requires-Dist: tomli-w<2,>=1.1.0
|
|
35
41
|
Requires-Dist: tomli<3,>=2.0.1
|
|
36
42
|
Requires-Dist: typer<1,>=0.12
|
|
@@ -1,14 +1,20 @@
|
|
|
1
|
-
hardpy/__init__.py,sha256=
|
|
1
|
+
hardpy/__init__.py,sha256=WX_p5lKywria7tlZulIKTdPhgG-F_Soic1eQa25_of8,1918
|
|
2
2
|
hardpy/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
hardpy/cli/cli.py,sha256=
|
|
3
|
+
hardpy/cli/cli.py,sha256=EzyTc8C771NaVnwLed9tAauX8MHVhdxmWetKOfqWFBk,6538
|
|
4
4
|
hardpy/cli/template.py,sha256=a9BZX8uFbIwyGfUex0PWGVirZ6GlkVpfpAdNsP_fqYo,6478
|
|
5
5
|
hardpy/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
-
hardpy/common/config.py,sha256=
|
|
6
|
+
hardpy/common/config.py,sha256=IkY3jTCmjzmIqXBPGhBPQp2yEx8SzI00c5WrEspIhsQ,5077
|
|
7
|
+
hardpy/common/stand_cloud/__init__.py,sha256=iOLOLdz06j8TLZBzHbYYuc0V5RYdEuG9ZbAxSg3rP2s,412
|
|
8
|
+
hardpy/common/stand_cloud/connector.py,sha256=RBG-RDQmKGDey7mT13KiDtl-0ETIGivF-3LGtI67Odg,7334
|
|
9
|
+
hardpy/common/stand_cloud/exception.py,sha256=eKkqu5ylDRIGN_yZhvz2xVGm49XmlZ8nryALgdRqpbY,287
|
|
10
|
+
hardpy/common/stand_cloud/oauth_callback.py,sha256=GkADOnQ46HwxKEdgG_4bS1xX0ybfdQqMK3us-dMuHVw,3322
|
|
11
|
+
hardpy/common/stand_cloud/registration.py,sha256=QoQLRx69AdUF-uS8ACSlUeI5bxzHRpuvLLvWylX-lrQ,6007
|
|
12
|
+
hardpy/common/stand_cloud/token_storage.py,sha256=g-wqGV2Cq0UJwQQX7k84WbgbUfelfJys-Te1JYdBnLw,681
|
|
7
13
|
hardpy/hardpy_panel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
-
hardpy/hardpy_panel/api.py,sha256=
|
|
9
|
-
hardpy/hardpy_panel/frontend/dist/asset-manifest.json,sha256=
|
|
14
|
+
hardpy/hardpy_panel/api.py,sha256=2brUDu8gAV7WduZTlxfW_ax-Z7loE-RXzZgrUUd33L4,3073
|
|
15
|
+
hardpy/hardpy_panel/frontend/dist/asset-manifest.json,sha256=PgtjHvX6HPsAzUrKaCldhGUmr0wyFIv8brWW2pitHUQ,2824
|
|
10
16
|
hardpy/hardpy_panel/frontend/dist/favicon.ico,sha256=sgIk5PKUKEKBDpkSrc8dJgjpObp0iF82Mec0GpfKId4,15406
|
|
11
|
-
hardpy/hardpy_panel/frontend/dist/index.html,sha256=
|
|
17
|
+
hardpy/hardpy_panel/frontend/dist/index.html,sha256=zlW8GXzZZSz2Q3d1RP1LuNzuNFQk9oI1iemKzFbxC_o,656
|
|
12
18
|
hardpy/hardpy_panel/frontend/dist/logo192.png,sha256=E4K7drvhJCg9HcTpRihOXZhVJVBZ7-W97Se-3tDb46o,14485
|
|
13
19
|
hardpy/hardpy_panel/frontend/dist/logo512.png,sha256=-fIMbqX7PYUpheK4kX1C1erRTe_hHZwFQYDLrAbhFRU,34188
|
|
14
20
|
hardpy/hardpy_panel/frontend/dist/manifest.json,sha256=PfmJlN2JMJtHS6OnhU4b4X5wPQC_yRBdjesjoirObSA,502
|
|
@@ -26,9 +32,9 @@ hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.c
|
|
|
26
32
|
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.chunk.js.map,sha256=p1xKHRK4AZutkZsQHiWSNU61tYp7I3iUuyLLm3eqkHQ,2833
|
|
27
33
|
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js,sha256=Jl5xm_jQ9IXKhCagHHvnIhwYXb379Q5FFBiqPoKdUIE,605
|
|
28
34
|
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js.map,sha256=amJiG2QaJMRR9Y2M0C2soOqd75xdQHhsVKjwrDSIIT0,2224
|
|
29
|
-
hardpy/hardpy_panel/frontend/dist/static/js/main.
|
|
30
|
-
hardpy/hardpy_panel/frontend/dist/static/js/main.
|
|
31
|
-
hardpy/hardpy_panel/frontend/dist/static/js/main.
|
|
35
|
+
hardpy/hardpy_panel/frontend/dist/static/js/main.8a7d8f7d.js,sha256=lb369nZXWvAWJvKBkONDxwjGgt8q1R5K8LjHmAig-uA,1067533
|
|
36
|
+
hardpy/hardpy_panel/frontend/dist/static/js/main.8a7d8f7d.js.LICENSE.txt,sha256=ForPNukClWMEP3pF9LMYoU-ve-LsyCH-rYU8eLki_FY,2315
|
|
37
|
+
hardpy/hardpy_panel/frontend/dist/static/js/main.8a7d8f7d.js.map,sha256=MwMn2EKAFx4ynoVjCcFuWYJO_iFS4j3FNVllq5oYYdA,5324603
|
|
32
38
|
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.520846c6beb41df528c8.eot,sha256=PTCTrQYNHX2hIPUaYWtOKrI30-iQGXt_EGxq6JCXie0,117628
|
|
33
39
|
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.5c52b39c697f2323ce8b.svg,sha256=lDCQy06aS-9bmhwuFOUs-EdcR8MP2wqwAwky5oamtkQ,509417
|
|
34
40
|
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.84db1772f4bfb529f64f.woff,sha256=edyqQN0nw4dNBs1pgr7pQB7nJhhR6T_YfklFcG_fHj0,53344
|
|
@@ -41,30 +47,31 @@ hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.afbadb627d43b7
|
|
|
41
47
|
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.e857f5a5132b8bfa71a1.woff,sha256=mQZTxE1PyyAL16VWuASOvXlZFwuI4aCPvbrhfgpdIdU,55356
|
|
42
48
|
hardpy/hardpy_panel/frontend/dist/static/media/logo_smol.5b16f92447a4a9e80331.png,sha256=E4K7drvhJCg9HcTpRihOXZhVJVBZ7-W97Se-3tDb46o,14485
|
|
43
49
|
hardpy/pytest_hardpy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
44
|
-
hardpy/pytest_hardpy/plugin.py,sha256=
|
|
50
|
+
hardpy/pytest_hardpy/plugin.py,sha256=dBgj_p7Re9BWHCXKUT8h5J8LGAXK0Jb_ac9fdtQ_q3A,17671
|
|
45
51
|
hardpy/pytest_hardpy/pytest_call.py,sha256=S8v5XHm8iG_KcVeBHlb97aupGSWpadsaH_dfLLGTGEQ,12628
|
|
46
|
-
hardpy/pytest_hardpy/pytest_wrapper.py,sha256=
|
|
52
|
+
hardpy/pytest_hardpy/pytest_wrapper.py,sha256=y9McSAzSIushZek2wmNooZDDnN_1TlxHoW-WG5Wk29M,5002
|
|
47
53
|
hardpy/pytest_hardpy/db/__init__.py,sha256=G6y13JPh8HaH2O9E3_LTH_bTUVSgiezQFjDGaNIljec,557
|
|
48
54
|
hardpy/pytest_hardpy/db/base_connector.py,sha256=5a476F5LwvFUfQ4Yc0Q6biacULDrCk8UHPlpc6n0NRQ,1111
|
|
49
55
|
hardpy/pytest_hardpy/db/base_server.py,sha256=XqTff225iIymPYUGGEja9r9WOilVw7ljcAVp1M8VuAI,404
|
|
50
56
|
hardpy/pytest_hardpy/db/base_store.py,sha256=9TA1BAU4_ARm4dxfhLRNWSnGV98z0rr9U1o0BibBe-U,3532
|
|
51
|
-
hardpy/pytest_hardpy/db/const.py,sha256
|
|
57
|
+
hardpy/pytest_hardpy/db/const.py,sha256=MkKYBAf5_o4jaGM-vfprKbRXITb-ix7RqmNo3AMCI7o,894
|
|
52
58
|
hardpy/pytest_hardpy/db/runstore.py,sha256=tCXWo2AW0er3lbDcCqYbYxOBbINMZNtfnnjlIJpXmIA,949
|
|
53
59
|
hardpy/pytest_hardpy/db/statestore.py,sha256=0sv4AqzwW_J34O-cb7aN3zmgULIVtZRi_qg4XvC2_L0,586
|
|
54
60
|
hardpy/pytest_hardpy/db/schema/__init__.py,sha256=1S73W3PLQt8gX5Y33nbX1JdwLvnrtlKH4cElID3pwuc,263
|
|
55
|
-
hardpy/pytest_hardpy/db/schema/v1.py,sha256=
|
|
61
|
+
hardpy/pytest_hardpy/db/schema/v1.py,sha256=iEkcczMYo9TGs6dTzL5eR1k59rkOC8FDs4JRqGuoNAM,9454
|
|
56
62
|
hardpy/pytest_hardpy/reporter/__init__.py,sha256=rztpM2HlLUpMOvad0JHbZU4Mk8PDDQyCFXLhpLktGQI,322
|
|
57
63
|
hardpy/pytest_hardpy/reporter/base.py,sha256=o5Pbl89nWLCFd1mYiFdxCQ9d3FOb9oQ3eruYH60H5CQ,2517
|
|
58
|
-
hardpy/pytest_hardpy/reporter/hook_reporter.py,sha256=
|
|
64
|
+
hardpy/pytest_hardpy/reporter/hook_reporter.py,sha256=PAmy-dcIectzbAd3NfZDi_IydtFXwY9_7HlbsgLhLvA,11585
|
|
59
65
|
hardpy/pytest_hardpy/reporter/runner_reporter.py,sha256=YsK8wrLIulsixePG6WNfC4MagpKfhP5j0CUaXkcfeL0,790
|
|
60
|
-
hardpy/pytest_hardpy/result/__init__.py,sha256=
|
|
66
|
+
hardpy/pytest_hardpy/result/__init__.py,sha256=JEFxF8yCnBcUSkvRFIjOCTafMIQuMXCBL23Uj0vSX2E,469
|
|
61
67
|
hardpy/pytest_hardpy/result/couchdb_config.py,sha256=rzUc2cg6uUnDo6RPHTaWR_RbmN_uZ77dWGCXQYz8iNk,3292
|
|
62
|
-
hardpy/pytest_hardpy/result/report_loader/__init__.py,sha256=
|
|
68
|
+
hardpy/pytest_hardpy/result/report_loader/__init__.py,sha256=wq5Y-_JW2ExCRnQ9VVesKmTToEQrcTY5RxNJIWaT9ag,374
|
|
63
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=RM6teBUvX5BlYUEHnElqIBvbbfx0G98vwjlCecI6FG8,2405
|
|
64
71
|
hardpy/pytest_hardpy/result/report_reader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
65
72
|
hardpy/pytest_hardpy/result/report_reader/couchdb_reader.py,sha256=GrROwfTVyJaVLPBxkvOM35HCksFEnWm0aVI8FibPikg,5911
|
|
66
73
|
hardpy/pytest_hardpy/utils/__init__.py,sha256=eNvQ5OjiLHLj9Rn2y4hyIexano1CUNhSMhzaw3IUwn4,1471
|
|
67
|
-
hardpy/pytest_hardpy/utils/connection_data.py,sha256=
|
|
74
|
+
hardpy/pytest_hardpy/utils/connection_data.py,sha256=H5WyQhyRolXkZPrSDAlNRm0TRUcJAsHC7_27MjRa85w,564
|
|
68
75
|
hardpy/pytest_hardpy/utils/const.py,sha256=RuzRmnpvmUylRbj8CxtaVbo7J9kp6rELvjPdfUzMQLU,407
|
|
69
76
|
hardpy/pytest_hardpy/utils/dialog_box.py,sha256=aUakpMihJTLRaAWm1Ybt2SPYGBL5Gt9pOmhIMYEHIls,9708
|
|
70
77
|
hardpy/pytest_hardpy/utils/exception.py,sha256=kLvJpAppjFsdnhw7zhUHGMLhS946O36H2-F5wrTeVVE,1380
|
|
@@ -72,8 +79,8 @@ hardpy/pytest_hardpy/utils/machineid.py,sha256=6JAzUt7KtjTYn8kL9hSMaCQ20U8liH-zD
|
|
|
72
79
|
hardpy/pytest_hardpy/utils/node_info.py,sha256=mA7u1KHHLIq70ZNOOF7NVlxMmfhwGanVyXpBNfBWQDk,4121
|
|
73
80
|
hardpy/pytest_hardpy/utils/progress_calculator.py,sha256=TPl2gG0ZSvMe8otPythhF9hkD6fa6-mJAhy9yI83-yE,1071
|
|
74
81
|
hardpy/pytest_hardpy/utils/singleton.py,sha256=tjUGs48o_vBeVpRsEBZEOTCoCUikpIFmQ1c3rsfymso,948
|
|
75
|
-
hardpy-0.
|
|
76
|
-
hardpy-0.
|
|
77
|
-
hardpy-0.
|
|
78
|
-
hardpy-0.
|
|
79
|
-
hardpy-0.
|
|
82
|
+
hardpy-0.10.0.dist-info/METADATA,sha256=A6XFOyxpBR8ENne-9TGG2SSXJ5MIHQpvhwp8JuooWDg,3909
|
|
83
|
+
hardpy-0.10.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
84
|
+
hardpy-0.10.0.dist-info/entry_points.txt,sha256=nL2sMkKMScNaOE0IPkYnu9Yr-BUswZvGSrwY-SxHY3E,102
|
|
85
|
+
hardpy-0.10.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
86
|
+
hardpy-0.10.0.dist-info/RECORD,,
|