hardpy 0.6.1__py3-none-any.whl → 0.8.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 +49 -49
- hardpy/cli/cli.py +8 -9
- hardpy/cli/template.py +6 -6
- hardpy/common/config.py +19 -18
- hardpy/hardpy_panel/api.py +9 -9
- hardpy/hardpy_panel/frontend/dist/asset-manifest.json +3 -3
- hardpy/hardpy_panel/frontend/dist/index.html +1 -1
- hardpy/hardpy_panel/frontend/dist/logo192.png +0 -0
- hardpy/hardpy_panel/frontend/dist/static/css/main.e8a862f1.css.map +1 -1
- hardpy/hardpy_panel/frontend/dist/static/js/main.6f09d61a.js +3 -0
- hardpy/hardpy_panel/frontend/dist/static/js/{main.7c954faf.js.map → main.6f09d61a.js.map} +1 -1
- hardpy/pytest_hardpy/db/__init__.py +4 -5
- hardpy/pytest_hardpy/db/base_connector.py +6 -5
- hardpy/pytest_hardpy/db/base_server.py +1 -1
- hardpy/pytest_hardpy/db/base_store.py +23 -9
- hardpy/pytest_hardpy/db/const.py +3 -1
- hardpy/pytest_hardpy/db/runstore.py +13 -15
- hardpy/pytest_hardpy/db/schema/__init__.py +9 -0
- hardpy/pytest_hardpy/db/{schema.py → schema/v1.py} +120 -79
- hardpy/pytest_hardpy/db/statestore.py +7 -20
- hardpy/pytest_hardpy/plugin.py +128 -85
- hardpy/pytest_hardpy/pytest_call.py +80 -32
- hardpy/pytest_hardpy/pytest_wrapper.py +8 -8
- hardpy/pytest_hardpy/reporter/__init__.py +2 -2
- hardpy/pytest_hardpy/reporter/base.py +32 -7
- hardpy/pytest_hardpy/reporter/hook_reporter.py +66 -37
- hardpy/pytest_hardpy/reporter/runner_reporter.py +6 -8
- hardpy/pytest_hardpy/result/__init__.py +2 -2
- hardpy/pytest_hardpy/result/couchdb_config.py +20 -16
- hardpy/pytest_hardpy/result/report_loader/couchdb_loader.py +2 -2
- hardpy/pytest_hardpy/result/report_reader/couchdb_reader.py +36 -20
- hardpy/pytest_hardpy/utils/__init__.py +34 -29
- hardpy/pytest_hardpy/utils/connection_data.py +6 -8
- hardpy/pytest_hardpy/utils/const.py +1 -1
- hardpy/pytest_hardpy/utils/dialog_box.py +105 -66
- hardpy/pytest_hardpy/utils/exception.py +14 -8
- hardpy/pytest_hardpy/utils/machineid.py +15 -0
- hardpy/pytest_hardpy/utils/node_info.py +45 -16
- hardpy/pytest_hardpy/utils/progress_calculator.py +4 -3
- hardpy/pytest_hardpy/utils/singleton.py +23 -16
- {hardpy-0.6.1.dist-info → hardpy-0.8.0.dist-info}/METADATA +26 -33
- {hardpy-0.6.1.dist-info → hardpy-0.8.0.dist-info}/RECORD +46 -43
- hardpy/hardpy_panel/frontend/dist/static/js/main.7c954faf.js +0 -3
- /hardpy/hardpy_panel/frontend/dist/static/js/{main.7c954faf.js.LICENSE.txt → main.6f09d61a.js.LICENSE.txt} +0 -0
- {hardpy-0.6.1.dist-info → hardpy-0.8.0.dist-info}/WHEEL +0 -0
- {hardpy-0.6.1.dist-info → hardpy-0.8.0.dist-info}/entry_points.txt +0 -0
- {hardpy-0.6.1.dist-info → hardpy-0.8.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# Copyright (c) 2024 Everypin
|
|
2
2
|
# GNU General Public License v3.0 (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
3
|
+
from __future__ import annotations
|
|
3
4
|
|
|
4
5
|
import re
|
|
5
6
|
from logging import getLogger
|
|
6
7
|
from pathlib import Path
|
|
7
|
-
from typing import NamedTuple
|
|
8
|
+
from typing import TYPE_CHECKING, NamedTuple
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from pytest import Item, Mark
|
|
10
12
|
|
|
11
13
|
|
|
12
14
|
class TestDependencyInfo(NamedTuple):
|
|
@@ -22,7 +24,7 @@ class TestDependencyInfo(NamedTuple):
|
|
|
22
24
|
class NodeInfo:
|
|
23
25
|
"""Test node info."""
|
|
24
26
|
|
|
25
|
-
def __init__(self, item: Item):
|
|
27
|
+
def __init__(self, item: Item) -> None:
|
|
26
28
|
self._item = item
|
|
27
29
|
self._log = getLogger(__name__)
|
|
28
30
|
|
|
@@ -31,19 +33,21 @@ class NodeInfo:
|
|
|
31
33
|
"case_name",
|
|
32
34
|
)
|
|
33
35
|
self._module_name = self._get_human_name(
|
|
34
|
-
item.parent.own_markers,
|
|
36
|
+
item.parent.own_markers, # type: ignore
|
|
35
37
|
"module_name",
|
|
36
38
|
)
|
|
37
39
|
|
|
38
40
|
self._dependency = self._get_dependency_info(
|
|
39
|
-
item.own_markers + item.parent.own_markers
|
|
41
|
+
item.own_markers + item.parent.own_markers, # type: ignore
|
|
40
42
|
)
|
|
41
43
|
|
|
42
|
-
self.
|
|
44
|
+
self._attempt = self._get_attempt(item.own_markers)
|
|
45
|
+
|
|
46
|
+
self._module_id = Path(item.parent.nodeid).stem # type: ignore
|
|
43
47
|
self._case_id = item.name
|
|
44
48
|
|
|
45
49
|
@property
|
|
46
|
-
def module_id(self):
|
|
50
|
+
def module_id(self) -> str:
|
|
47
51
|
"""Get module id.
|
|
48
52
|
|
|
49
53
|
Returns:
|
|
@@ -52,7 +56,7 @@ class NodeInfo:
|
|
|
52
56
|
return self._module_id
|
|
53
57
|
|
|
54
58
|
@property
|
|
55
|
-
def case_id(self):
|
|
59
|
+
def case_id(self) -> str:
|
|
56
60
|
"""Get case id.
|
|
57
61
|
|
|
58
62
|
Returns:
|
|
@@ -61,7 +65,7 @@ class NodeInfo:
|
|
|
61
65
|
return self._case_id
|
|
62
66
|
|
|
63
67
|
@property
|
|
64
|
-
def module_name(self):
|
|
68
|
+
def module_name(self) -> str:
|
|
65
69
|
"""Get module name.
|
|
66
70
|
|
|
67
71
|
Returns:
|
|
@@ -70,7 +74,7 @@ class NodeInfo:
|
|
|
70
74
|
return self._module_name
|
|
71
75
|
|
|
72
76
|
@property
|
|
73
|
-
def case_name(self):
|
|
77
|
+
def case_name(self) -> str:
|
|
74
78
|
"""Get case name.
|
|
75
79
|
|
|
76
80
|
Returns:
|
|
@@ -79,7 +83,7 @@ class NodeInfo:
|
|
|
79
83
|
return self._case_name
|
|
80
84
|
|
|
81
85
|
@property
|
|
82
|
-
def dependency(self):
|
|
86
|
+
def dependency(self) -> TestDependencyInfo | str:
|
|
83
87
|
"""Get dependency information.
|
|
84
88
|
|
|
85
89
|
Returns:
|
|
@@ -87,6 +91,15 @@ class NodeInfo:
|
|
|
87
91
|
"""
|
|
88
92
|
return self._dependency
|
|
89
93
|
|
|
94
|
+
@property
|
|
95
|
+
def attempt(self) -> int:
|
|
96
|
+
"""Get attempt.
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
int: attempt number
|
|
100
|
+
"""
|
|
101
|
+
return self._attempt
|
|
102
|
+
|
|
90
103
|
def _get_human_name(self, markers: list[Mark], marker_name: str) -> str:
|
|
91
104
|
"""Get human name from markers.
|
|
92
105
|
|
|
@@ -98,10 +111,8 @@ class NodeInfo:
|
|
|
98
111
|
str: human name by user
|
|
99
112
|
"""
|
|
100
113
|
for marker in markers:
|
|
101
|
-
if marker.name == marker_name:
|
|
102
|
-
|
|
103
|
-
return marker.args[0]
|
|
104
|
-
|
|
114
|
+
if marker.name == marker_name and marker.args:
|
|
115
|
+
return marker.args[0]
|
|
105
116
|
return ""
|
|
106
117
|
|
|
107
118
|
def _get_dependency_info(self, markers: list[Mark]) -> TestDependencyInfo | str:
|
|
@@ -118,8 +129,26 @@ class NodeInfo:
|
|
|
118
129
|
dependency_data = re.search(r"(\w+)::(\w+)", dependency_value)
|
|
119
130
|
if dependency_data:
|
|
120
131
|
return TestDependencyInfo(*dependency_data.groups())
|
|
121
|
-
elif re.search(r"^\w+$", dependency_value):
|
|
132
|
+
elif re.search(r"^\w+$", dependency_value): # noqa: RET505
|
|
122
133
|
return TestDependencyInfo(dependency_value, None)
|
|
123
134
|
elif dependency_data is None and dependency_value == "":
|
|
124
135
|
return ""
|
|
125
136
|
raise ValueError
|
|
137
|
+
|
|
138
|
+
def _get_attempt(self, markers: list[Mark]) -> int:
|
|
139
|
+
"""Get the number of attempts.
|
|
140
|
+
|
|
141
|
+
Args:
|
|
142
|
+
markers (list[Mark]): item markers list
|
|
143
|
+
|
|
144
|
+
Returns:
|
|
145
|
+
int: number of attempts
|
|
146
|
+
"""
|
|
147
|
+
attempt: int = 1
|
|
148
|
+
for marker in markers:
|
|
149
|
+
if marker.name == "attempt" and marker.args:
|
|
150
|
+
attempt = marker.args[0]
|
|
151
|
+
if not isinstance(attempt, int) or attempt < 1:
|
|
152
|
+
msg = "The 'attempt' marker value must be a positive integer."
|
|
153
|
+
raise ValueError(msg)
|
|
154
|
+
return attempt
|
|
@@ -7,12 +7,12 @@ from logging import getLogger
|
|
|
7
7
|
class ProgressCalculator:
|
|
8
8
|
"""Test run progress calculator."""
|
|
9
9
|
|
|
10
|
-
def __init__(self):
|
|
10
|
+
def __init__(self) -> None:
|
|
11
11
|
self._progress_nodeids: set[str] = set()
|
|
12
12
|
self._tests_amount: int = 1
|
|
13
13
|
self._log = getLogger(__name__)
|
|
14
14
|
|
|
15
|
-
def set_test_amount(self, amount: int):
|
|
15
|
+
def set_test_amount(self, amount: int) -> None:
|
|
16
16
|
"""Set test amount.
|
|
17
17
|
|
|
18
18
|
Raises:
|
|
@@ -22,7 +22,8 @@ class ProgressCalculator:
|
|
|
22
22
|
amount (int): test amount
|
|
23
23
|
"""
|
|
24
24
|
if amount <= 0:
|
|
25
|
-
|
|
25
|
+
msg = "Test amount must be greater than 0."
|
|
26
|
+
raise ValueError(msg)
|
|
26
27
|
self._tests_amount = amount
|
|
27
28
|
|
|
28
29
|
def calculate(self, nodeid: str) -> int:
|
|
@@ -1,23 +1,30 @@
|
|
|
1
1
|
# Copyright (c) 2024 Everypin
|
|
2
2
|
# GNU General Public License v3.0 (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
3
|
+
from __future__ import annotations
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
"""Singleton class.
|
|
5
|
+
from typing import Generic, TypeVar
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
T = TypeVar("T")
|
|
8
8
|
|
|
9
|
-
def __init__(self):
|
|
10
|
-
if not self._initialized:
|
|
11
|
-
...
|
|
12
|
-
your code
|
|
13
|
-
...
|
|
14
|
-
self._initialized = True
|
|
15
|
-
"""
|
|
16
9
|
|
|
17
|
-
|
|
18
|
-
|
|
10
|
+
class SingletonMeta(type, Generic[T]): # noqa: D101
|
|
11
|
+
_instances: dict[SingletonMeta[T], T] = {} # noqa: RUF012
|
|
19
12
|
|
|
20
|
-
def
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
13
|
+
def __call__(cls, *args, **kwargs) -> T: # noqa: ANN002, ANN003
|
|
14
|
+
"""Magic method to create an instance of the class.
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
*args: Variable length argument list
|
|
18
|
+
**kwargs: Arbitrary keyword arguments
|
|
19
|
+
Returns:
|
|
20
|
+
object: An instance of the class
|
|
21
|
+
"""
|
|
22
|
+
if cls not in cls._instances:
|
|
23
|
+
cls._instances[cls] = super().__call__(
|
|
24
|
+
*args,
|
|
25
|
+
**kwargs,
|
|
26
|
+
)
|
|
27
|
+
return cls._instances[cls]
|
|
28
|
+
|
|
29
|
+
def __instancecheck__(cls, instance: object) -> bool:
|
|
30
|
+
return cls.__subclasscheck__(type(instance))
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: hardpy
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.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/
|
|
7
7
|
Project-URL: Repository, https://github.com/everypinio/hardpy/
|
|
8
8
|
Project-URL: Changelog, https://everypinio.github.io/hardpy/changelog/
|
|
9
|
-
Author: Everypin
|
|
9
|
+
Author-email: Everypin <info@everypin.io>
|
|
10
|
+
License-Expression: GPL-3.0-or-later
|
|
10
11
|
License-File: LICENSE
|
|
11
12
|
Classifier: Development Status :: 4 - Beta
|
|
12
13
|
Classifier: Framework :: Pytest
|
|
13
14
|
Classifier: Intended Audience :: Developers
|
|
14
|
-
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
15
15
|
Classifier: Operating System :: OS Independent
|
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
|
17
17
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
@@ -22,43 +22,43 @@ Classifier: Topic :: Software Development :: Libraries
|
|
|
22
22
|
Classifier: Topic :: Software Development :: Testing
|
|
23
23
|
Classifier: Topic :: Software Development :: Testing :: Acceptance
|
|
24
24
|
Classifier: Topic :: Utilities
|
|
25
|
-
Requires-Python:
|
|
25
|
+
Requires-Python: >=3.10
|
|
26
26
|
Requires-Dist: fastapi>=0.100.1
|
|
27
27
|
Requires-Dist: glom>=23.3.0
|
|
28
28
|
Requires-Dist: natsort>=8.4.0
|
|
29
|
-
Requires-Dist:
|
|
30
|
-
Requires-Dist:
|
|
29
|
+
Requires-Dist: py-machineid~=0.6.0
|
|
30
|
+
Requires-Dist: pycouchdb<2,>=1.14.2
|
|
31
|
+
Requires-Dist: pydantic<3,>=2.4.0
|
|
31
32
|
Requires-Dist: pytest<9,>=7
|
|
32
|
-
Requires-Dist:
|
|
33
|
-
Requires-Dist:
|
|
33
|
+
Requires-Dist: tomli-w<2,>=1.1.0
|
|
34
|
+
Requires-Dist: tomli<3,>=2.0.1
|
|
35
|
+
Requires-Dist: typer<1,>=0.12
|
|
36
|
+
Requires-Dist: tzlocal~=5.2
|
|
34
37
|
Requires-Dist: uvicorn>=0.23.2
|
|
35
38
|
Provides-Extra: build
|
|
36
39
|
Requires-Dist: build==1.0.3; extra == 'build'
|
|
37
40
|
Provides-Extra: dev
|
|
38
|
-
Requires-Dist:
|
|
39
|
-
Requires-Dist:
|
|
40
|
-
Requires-Dist: wemake-python-styleguide; extra == 'dev'
|
|
41
|
+
Requires-Dist: mypy>=1.11.0; extra == 'dev'
|
|
42
|
+
Requires-Dist: ruff==0.8.0; extra == 'dev'
|
|
43
|
+
Requires-Dist: wemake-python-styleguide>=0.19.2; extra == 'dev'
|
|
41
44
|
Description-Content-Type: text/markdown
|
|
42
45
|
|
|
43
46
|
<h1 align="center">
|
|
44
|
-
<img src="https://
|
|
45
|
-
</h1>
|
|
46
|
-
|
|
47
|
-
<h1 align="center">
|
|
48
|
-
<b>HardPy</b>
|
|
47
|
+
<img src="https://raw.githubusercontent.com/everypinio/hardpy/main/docs/img/logo256.png" alt="HardPy" style="width:150px;">
|
|
49
48
|
</h1>
|
|
50
49
|
|
|
51
50
|
<p align="center">
|
|
52
51
|
HardPy is a python library for creating a test bench for devices.
|
|
53
52
|
</p>
|
|
54
53
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
**Documentation**: <a href=https://everypinio.github.io/hardpy/ target="_blank">https://everypinio.github.io/hardpy/</a>
|
|
54
|
+
<div align="center">
|
|
58
55
|
|
|
59
|
-
|
|
56
|
+
[](https://pypi.org/project/hardpy/)
|
|
57
|
+

|
|
58
|
+
[](https://docs.pytest.org/en/latest/)
|
|
59
|
+
[](https://everypinio.github.io/hardpy/)
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
</div>
|
|
62
62
|
|
|
63
63
|
---
|
|
64
64
|
|
|
@@ -70,6 +70,10 @@ HardPy allows you to:
|
|
|
70
70
|
* Use a browser to view, start, stop, and interact with tests;
|
|
71
71
|
* Store test results in the [CouchDB](https://couchdb.apache.org/) database.
|
|
72
72
|
|
|
73
|
+
<h1 align="center">
|
|
74
|
+
<img src="https://raw.githubusercontent.com/everypinio/hardpy/main/docs/img/hardpy_panel.gif" alt="hardpy panel" style="width:550px;">
|
|
75
|
+
</h1>
|
|
76
|
+
|
|
73
77
|
## To Install
|
|
74
78
|
|
|
75
79
|
```bash
|
|
@@ -92,21 +96,10 @@ docker compose up -d
|
|
|
92
96
|
hardpy run
|
|
93
97
|
```
|
|
94
98
|
4. View operator panel in browser: http://localhost:8000/
|
|
95
|
-
|
|
96
|
-
<h1 align="center">
|
|
97
|
-
<img src="https://everypinio.github.io/hardpy/img/hardpy_operator_panel_hello_hardpy.png"
|
|
98
|
-
alt="hardpy operator panel" style="width:600px;">
|
|
99
|
-
</h1>
|
|
100
|
-
|
|
101
99
|
5. View the latest test report: http://localhost:5984/_utils
|
|
102
100
|
|
|
103
101
|
Login and password: **dev**, database - **runstore**, document - **current**.
|
|
104
102
|
|
|
105
|
-
<h1 align="center">
|
|
106
|
-
<img src="https://everypinio.github.io/hardpy/img/runstore_hello_hardpy.png"
|
|
107
|
-
alt="hardpy runstore" style="width:500px;">
|
|
108
|
-
</h1>
|
|
109
|
-
|
|
110
103
|
## Examples
|
|
111
104
|
|
|
112
|
-
|
|
105
|
+
For more examples of using **HardPy**, see the [examples](https://github.com/everypinio/hardpy/tree/main/examples) folder and the [documentation](https://everypinio.github.io/hardpy/examples/).
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
hardpy/__init__.py,sha256=
|
|
1
|
+
hardpy/__init__.py,sha256=bZka1CixhogDKm3hyIrD4fkE6sCYcGTBoDtsP-6mj6Y,1741
|
|
2
2
|
hardpy/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
hardpy/cli/cli.py,sha256=
|
|
4
|
-
hardpy/cli/template.py,sha256=
|
|
3
|
+
hardpy/cli/cli.py,sha256=DJFkqEx5-ft0rpbARDGFb-tIMNlBc76d2hzF_btVDHA,4573
|
|
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=aeSEAnl4FQkHw35JlbKqlC1CbZyhBQphA6YmMuzhWLw,4461
|
|
7
7
|
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=
|
|
8
|
+
hardpy/hardpy_panel/api.py,sha256=XQeTsh-TJxizaQYpzFVDHPUG6XOIZJThbxtdyjgEKSo,2992
|
|
9
|
+
hardpy/hardpy_panel/frontend/dist/asset-manifest.json,sha256=dlGk6O3iTOi1oRMF3UhLl8JPBRI-3ePa94kAMSs82Ew,2824
|
|
10
10
|
hardpy/hardpy_panel/frontend/dist/favicon.ico,sha256=sgIk5PKUKEKBDpkSrc8dJgjpObp0iF82Mec0GpfKId4,15406
|
|
11
|
-
hardpy/hardpy_panel/frontend/dist/index.html,sha256=
|
|
11
|
+
hardpy/hardpy_panel/frontend/dist/index.html,sha256=cfy45pXCBq9CSJctY1q_PzMf-3m5NaRQEXk9JNuoYuY,656
|
|
12
|
+
hardpy/hardpy_panel/frontend/dist/logo192.png,sha256=E4K7drvhJCg9HcTpRihOXZhVJVBZ7-W97Se-3tDb46o,14485
|
|
12
13
|
hardpy/hardpy_panel/frontend/dist/logo512.png,sha256=-fIMbqX7PYUpheK4kX1C1erRTe_hHZwFQYDLrAbhFRU,34188
|
|
13
14
|
hardpy/hardpy_panel/frontend/dist/manifest.json,sha256=PfmJlN2JMJtHS6OnhU4b4X5wPQC_yRBdjesjoirObSA,502
|
|
14
15
|
hardpy/hardpy_panel/frontend/dist/static/css/main.e8a862f1.css,sha256=gNl6kGMBhtswNrUU6X2S6uosRU7xhxqI_p9gsEtBUqE,318244
|
|
15
|
-
hardpy/hardpy_panel/frontend/dist/static/css/main.e8a862f1.css.map,sha256=
|
|
16
|
+
hardpy/hardpy_panel/frontend/dist/static/css/main.e8a862f1.css.map,sha256=g6UQJXCW2kjAZ_NrWE4yB6WE5LXt4pjzwtMF4u38vXU,512723
|
|
16
17
|
hardpy/hardpy_panel/frontend/dist/static/js/808.ce070002.chunk.js,sha256=Tf8LD7uNGTtm5GY-vg93YQ8g2728c-wt_71ZV9zXpJI,7313
|
|
17
18
|
hardpy/hardpy_panel/frontend/dist/static/js/808.ce070002.chunk.js.map,sha256=P3QMCMlR0ZJqKgSQMk_f3iomFHM_BHqxRdZ9s0vnaUk,16938
|
|
18
19
|
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-16px-paths.d605910e.chunk.js,sha256=ySe_bW75GCQ1sWHusVPvUz8t0gXUAARhX2NYQnIutOM,248230
|
|
@@ -25,9 +26,9 @@ hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.c
|
|
|
25
26
|
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.chunk.js.map,sha256=p1xKHRK4AZutkZsQHiWSNU61tYp7I3iUuyLLm3eqkHQ,2833
|
|
26
27
|
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js,sha256=Jl5xm_jQ9IXKhCagHHvnIhwYXb379Q5FFBiqPoKdUIE,605
|
|
27
28
|
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js.map,sha256=amJiG2QaJMRR9Y2M0C2soOqd75xdQHhsVKjwrDSIIT0,2224
|
|
28
|
-
hardpy/hardpy_panel/frontend/dist/static/js/main.
|
|
29
|
-
hardpy/hardpy_panel/frontend/dist/static/js/main.
|
|
30
|
-
hardpy/hardpy_panel/frontend/dist/static/js/main.
|
|
29
|
+
hardpy/hardpy_panel/frontend/dist/static/js/main.6f09d61a.js,sha256=cMaNHNmrd24qy2qchDphLp8aRPHwtoPmzqD8hoMez7E,1064938
|
|
30
|
+
hardpy/hardpy_panel/frontend/dist/static/js/main.6f09d61a.js.LICENSE.txt,sha256=ForPNukClWMEP3pF9LMYoU-ve-LsyCH-rYU8eLki_FY,2315
|
|
31
|
+
hardpy/hardpy_panel/frontend/dist/static/js/main.6f09d61a.js.map,sha256=PTrIsSXig1lWc89Cjsfglkc4zz-ibfJUkASVZnOC7-s,5316516
|
|
31
32
|
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.520846c6beb41df528c8.eot,sha256=PTCTrQYNHX2hIPUaYWtOKrI30-iQGXt_EGxq6JCXie0,117628
|
|
32
33
|
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.5c52b39c697f2323ce8b.svg,sha256=lDCQy06aS-9bmhwuFOUs-EdcR8MP2wqwAwky5oamtkQ,509417
|
|
33
34
|
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.84db1772f4bfb529f64f.woff,sha256=edyqQN0nw4dNBs1pgr7pQB7nJhhR6T_YfklFcG_fHj0,53344
|
|
@@ -40,37 +41,39 @@ hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.afbadb627d43b7
|
|
|
40
41
|
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.e857f5a5132b8bfa71a1.woff,sha256=mQZTxE1PyyAL16VWuASOvXlZFwuI4aCPvbrhfgpdIdU,55356
|
|
41
42
|
hardpy/hardpy_panel/frontend/dist/static/media/logo_smol.5b16f92447a4a9e80331.png,sha256=E4K7drvhJCg9HcTpRihOXZhVJVBZ7-W97Se-3tDb46o,14485
|
|
42
43
|
hardpy/pytest_hardpy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
43
|
-
hardpy/pytest_hardpy/plugin.py,sha256=
|
|
44
|
-
hardpy/pytest_hardpy/pytest_call.py,sha256=
|
|
45
|
-
hardpy/pytest_hardpy/pytest_wrapper.py,sha256=
|
|
46
|
-
hardpy/pytest_hardpy/db/__init__.py,sha256=
|
|
47
|
-
hardpy/pytest_hardpy/db/base_connector.py,sha256=
|
|
48
|
-
hardpy/pytest_hardpy/db/base_server.py,sha256=
|
|
49
|
-
hardpy/pytest_hardpy/db/base_store.py,sha256=
|
|
50
|
-
hardpy/pytest_hardpy/db/const.py,sha256=
|
|
51
|
-
hardpy/pytest_hardpy/db/runstore.py,sha256=
|
|
52
|
-
hardpy/pytest_hardpy/db/
|
|
53
|
-
hardpy/pytest_hardpy/db/
|
|
54
|
-
hardpy/pytest_hardpy/
|
|
55
|
-
hardpy/pytest_hardpy/reporter/
|
|
56
|
-
hardpy/pytest_hardpy/reporter/
|
|
57
|
-
hardpy/pytest_hardpy/reporter/
|
|
58
|
-
hardpy/pytest_hardpy/
|
|
59
|
-
hardpy/pytest_hardpy/result/
|
|
44
|
+
hardpy/pytest_hardpy/plugin.py,sha256=ExStGYzMl9OlDzUJZaNJgvRIgqJkkCI3brLvVqw2oRk,15897
|
|
45
|
+
hardpy/pytest_hardpy/pytest_call.py,sha256=3G8oZr9lkGQ9CrjlHcq_q-xc9zVDw6moWACq1om7tHw,11616
|
|
46
|
+
hardpy/pytest_hardpy/pytest_wrapper.py,sha256=Xj4N3KlgTQMKLcIW0xZKYJC47FCJKsgwuxbLQMOmOMU,4535
|
|
47
|
+
hardpy/pytest_hardpy/db/__init__.py,sha256=G6y13JPh8HaH2O9E3_LTH_bTUVSgiezQFjDGaNIljec,557
|
|
48
|
+
hardpy/pytest_hardpy/db/base_connector.py,sha256=5a476F5LwvFUfQ4Yc0Q6biacULDrCk8UHPlpc6n0NRQ,1111
|
|
49
|
+
hardpy/pytest_hardpy/db/base_server.py,sha256=XqTff225iIymPYUGGEja9r9WOilVw7ljcAVp1M8VuAI,404
|
|
50
|
+
hardpy/pytest_hardpy/db/base_store.py,sha256=9TA1BAU4_ARm4dxfhLRNWSnGV98z0rr9U1o0BibBe-U,3532
|
|
51
|
+
hardpy/pytest_hardpy/db/const.py,sha256=RUHkSRNtTa3sYTMoZg1Ser_BkcUup_bxuiwHa6yi7Wk,768
|
|
52
|
+
hardpy/pytest_hardpy/db/runstore.py,sha256=tCXWo2AW0er3lbDcCqYbYxOBbINMZNtfnnjlIJpXmIA,949
|
|
53
|
+
hardpy/pytest_hardpy/db/statestore.py,sha256=0sv4AqzwW_J34O-cb7aN3zmgULIVtZRi_qg4XvC2_L0,586
|
|
54
|
+
hardpy/pytest_hardpy/db/schema/__init__.py,sha256=1S73W3PLQt8gX5Y33nbX1JdwLvnrtlKH4cElID3pwuc,263
|
|
55
|
+
hardpy/pytest_hardpy/db/schema/v1.py,sha256=DHxMP0jeh7IqBji0uxh056_NkLMwJJv6eaK-azG8KnY,9142
|
|
56
|
+
hardpy/pytest_hardpy/reporter/__init__.py,sha256=rztpM2HlLUpMOvad0JHbZU4Mk8PDDQyCFXLhpLktGQI,322
|
|
57
|
+
hardpy/pytest_hardpy/reporter/base.py,sha256=o5Pbl89nWLCFd1mYiFdxCQ9d3FOb9oQ3eruYH60H5CQ,2517
|
|
58
|
+
hardpy/pytest_hardpy/reporter/hook_reporter.py,sha256=haK9Wl3oplTtkkU_6OncBGnGPp5JHnzUCGx91GGqbWQ,11251
|
|
59
|
+
hardpy/pytest_hardpy/reporter/runner_reporter.py,sha256=YsK8wrLIulsixePG6WNfC4MagpKfhP5j0CUaXkcfeL0,790
|
|
60
|
+
hardpy/pytest_hardpy/result/__init__.py,sha256=0-W_usRzALAbvlKxW-qXeW214H8Bp5UNvl-FG-vrWrM,346
|
|
61
|
+
hardpy/pytest_hardpy/result/couchdb_config.py,sha256=rzUc2cg6uUnDo6RPHTaWR_RbmN_uZ77dWGCXQYz8iNk,3292
|
|
60
62
|
hardpy/pytest_hardpy/result/report_loader/__init__.py,sha256=FuHuD6IFZyaKj0yu5urhf6nkxGbiPONJ-WHnJ2jHwyc,251
|
|
61
|
-
hardpy/pytest_hardpy/result/report_loader/couchdb_loader.py,sha256=
|
|
63
|
+
hardpy/pytest_hardpy/result/report_loader/couchdb_loader.py,sha256=KcZ0JkCgWhrj2J9M04JBDy0fpqtpVEYtu9GCLDG27pU,2255
|
|
62
64
|
hardpy/pytest_hardpy/result/report_reader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
63
|
-
hardpy/pytest_hardpy/result/report_reader/couchdb_reader.py,sha256=
|
|
64
|
-
hardpy/pytest_hardpy/utils/__init__.py,sha256=
|
|
65
|
-
hardpy/pytest_hardpy/utils/connection_data.py,sha256=
|
|
66
|
-
hardpy/pytest_hardpy/utils/const.py,sha256=
|
|
67
|
-
hardpy/pytest_hardpy/utils/dialog_box.py,sha256=
|
|
68
|
-
hardpy/pytest_hardpy/utils/exception.py,sha256=
|
|
69
|
-
hardpy/pytest_hardpy/utils/
|
|
70
|
-
hardpy/pytest_hardpy/utils/
|
|
71
|
-
hardpy/pytest_hardpy/utils/
|
|
72
|
-
hardpy
|
|
73
|
-
hardpy-0.
|
|
74
|
-
hardpy-0.
|
|
75
|
-
hardpy-0.
|
|
76
|
-
hardpy-0.
|
|
65
|
+
hardpy/pytest_hardpy/result/report_reader/couchdb_reader.py,sha256=GrROwfTVyJaVLPBxkvOM35HCksFEnWm0aVI8FibPikg,5911
|
|
66
|
+
hardpy/pytest_hardpy/utils/__init__.py,sha256=eNvQ5OjiLHLj9Rn2y4hyIexano1CUNhSMhzaw3IUwn4,1471
|
|
67
|
+
hardpy/pytest_hardpy/utils/connection_data.py,sha256=NVDrkGok5fW2c163bwjBN0F9Ja2CZrwSL0bRUrNXTU0,484
|
|
68
|
+
hardpy/pytest_hardpy/utils/const.py,sha256=RuzRmnpvmUylRbj8CxtaVbo7J9kp6rELvjPdfUzMQLU,407
|
|
69
|
+
hardpy/pytest_hardpy/utils/dialog_box.py,sha256=qOTSGJb9PSBA9URVDiDrXM3cK9JljgXw32-DSYY0NbU,9393
|
|
70
|
+
hardpy/pytest_hardpy/utils/exception.py,sha256=kLvJpAppjFsdnhw7zhUHGMLhS946O36H2-F5wrTeVVE,1380
|
|
71
|
+
hardpy/pytest_hardpy/utils/machineid.py,sha256=6JAzUt7KtjTYn8kL9hSMaCQ20U8liH-zDT9v-5Ch7Q8,296
|
|
72
|
+
hardpy/pytest_hardpy/utils/node_info.py,sha256=mA7u1KHHLIq70ZNOOF7NVlxMmfhwGanVyXpBNfBWQDk,4121
|
|
73
|
+
hardpy/pytest_hardpy/utils/progress_calculator.py,sha256=TPl2gG0ZSvMe8otPythhF9hkD6fa6-mJAhy9yI83-yE,1071
|
|
74
|
+
hardpy/pytest_hardpy/utils/singleton.py,sha256=tjUGs48o_vBeVpRsEBZEOTCoCUikpIFmQ1c3rsfymso,948
|
|
75
|
+
hardpy-0.8.0.dist-info/METADATA,sha256=s6QH1Lulem4N-Gbt44S2fLAC2rZ-SkDzQmGixdEF8P0,3635
|
|
76
|
+
hardpy-0.8.0.dist-info/WHEEL,sha256=TJPnKdtrSue7xZ_AVGkp9YXcvDrobsjBds1du3Nx6dc,87
|
|
77
|
+
hardpy-0.8.0.dist-info/entry_points.txt,sha256=nL2sMkKMScNaOE0IPkYnu9Yr-BUswZvGSrwY-SxHY3E,102
|
|
78
|
+
hardpy-0.8.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
79
|
+
hardpy-0.8.0.dist-info/RECORD,,
|