hardpy 0.1.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 +34 -0
- hardpy/hardpy_panel/__init__.py +0 -0
- hardpy/hardpy_panel/api.py +71 -0
- hardpy/hardpy_panel/frontend/dist/asset-manifest.json +36 -0
- hardpy/hardpy_panel/frontend/dist/favicon.ico +0 -0
- hardpy/hardpy_panel/frontend/dist/index.html +1 -0
- hardpy/hardpy_panel/frontend/dist/logo512.png +0 -0
- hardpy/hardpy_panel/frontend/dist/manifest.json +25 -0
- hardpy/hardpy_panel/frontend/dist/static/css/main.e8a862f1.css +2 -0
- hardpy/hardpy_panel/frontend/dist/static/css/main.e8a862f1.css.map +1 -0
- hardpy/hardpy_panel/frontend/dist/static/js/808.ce070002.chunk.js +2 -0
- hardpy/hardpy_panel/frontend/dist/static/js/808.ce070002.chunk.js.map +1 -0
- hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-16px-paths.d605910e.chunk.js +2 -0
- hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-16px-paths.d605910e.chunk.js.map +1 -0
- hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-20px-paths.7ee05cc8.chunk.js +2 -0
- hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-20px-paths.7ee05cc8.chunk.js.map +1 -0
- hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths-loader.0aa89747.chunk.js +2 -0
- hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths-loader.0aa89747.chunk.js.map +1 -0
- hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.chunk.js +2 -0
- hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.chunk.js.map +1 -0
- hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js +2 -0
- hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js.map +1 -0
- hardpy/hardpy_panel/frontend/dist/static/js/main.8ef63e9b.js +3 -0
- hardpy/hardpy_panel/frontend/dist/static/js/main.8ef63e9b.js.LICENSE.txt +90 -0
- hardpy/hardpy_panel/frontend/dist/static/js/main.8ef63e9b.js.map +1 -0
- hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.520846c6beb41df528c8.eot +0 -0
- hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.5c52b39c697f2323ce8b.svg +1806 -0
- hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.84db1772f4bfb529f64f.woff +0 -0
- hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.b67ee1736e20e37a3225.woff2 +0 -0
- hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.e02ecf515378db143652.ttf +0 -0
- hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.429cacb8accf72488451.ttf +0 -0
- hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.6ae3791ee2d86fc228a6.svg +1806 -0
- hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.8cecf62de42997e4d82f.woff2 +0 -0
- hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.afbadb627d43b7857223.eot +0 -0
- hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.e857f5a5132b8bfa71a1.woff +0 -0
- hardpy/hardpy_panel/frontend/dist/static/media/logo_smol.5b16f92447a4a9e80331.png +0 -0
- hardpy/hardpy_panel/runner.py +52 -0
- hardpy/pytest_hardpy/__init__.py +0 -0
- hardpy/pytest_hardpy/db/__init__.py +18 -0
- hardpy/pytest_hardpy/db/base_connector.py +24 -0
- hardpy/pytest_hardpy/db/base_server.py +14 -0
- hardpy/pytest_hardpy/db/base_store.py +88 -0
- hardpy/pytest_hardpy/db/const.py +25 -0
- hardpy/pytest_hardpy/db/runstore.py +30 -0
- hardpy/pytest_hardpy/db/schema.py +292 -0
- hardpy/pytest_hardpy/db/statestore.py +19 -0
- hardpy/pytest_hardpy/plugin.py +244 -0
- hardpy/pytest_hardpy/pytest_call.py +218 -0
- hardpy/pytest_hardpy/pytest_wrapper.py +117 -0
- hardpy/pytest_hardpy/reporter/__init__.py +10 -0
- hardpy/pytest_hardpy/reporter/base.py +42 -0
- hardpy/pytest_hardpy/reporter/hook_reporter.py +307 -0
- hardpy/pytest_hardpy/reporter/runner_reporter.py +29 -0
- hardpy/pytest_hardpy/result/__init__.py +10 -0
- hardpy/pytest_hardpy/result/couchdb_config.py +22 -0
- hardpy/pytest_hardpy/result/report_loader/__init__.py +10 -0
- hardpy/pytest_hardpy/result/report_loader/couchdb_loader.py +62 -0
- hardpy/pytest_hardpy/result/report_reader/__init__.py +0 -0
- hardpy/pytest_hardpy/result/report_reader/couchdb_reader.py +164 -0
- hardpy/pytest_hardpy/utils/__init__.py +19 -0
- hardpy/pytest_hardpy/utils/config_data.py +31 -0
- hardpy/pytest_hardpy/utils/const.py +29 -0
- hardpy/pytest_hardpy/utils/exception.py +16 -0
- hardpy/pytest_hardpy/utils/node_info.py +59 -0
- hardpy/pytest_hardpy/utils/progress_calculator.py +38 -0
- hardpy/pytest_hardpy/utils/singleton.py +23 -0
- hardpy-0.1.0.dist-info/METADATA +129 -0
- hardpy-0.1.0.dist-info/RECORD +71 -0
- hardpy-0.1.0.dist-info/WHEEL +4 -0
- hardpy-0.1.0.dist-info/entry_points.txt +5 -0
- hardpy-0.1.0.dist-info/licenses/LICENSE +674 -0
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
|
|
4
|
+
|
|
5
|
+
class HardpyError(Exception):
|
|
6
|
+
"""Base HardPy exception."""
|
|
7
|
+
|
|
8
|
+
def __init__(self, msg: str):
|
|
9
|
+
super().__init__(f"HardPy error: {msg}")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class DuplicateSerialNumberError(HardpyError):
|
|
13
|
+
"""The serial number has already been determined."""
|
|
14
|
+
|
|
15
|
+
def __init__(self):
|
|
16
|
+
super().__init__(self.__doc__) # type: ignore
|
|
@@ -0,0 +1,59 @@
|
|
|
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
|
+
|
|
4
|
+
from logging import getLogger
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
from pytest import Item, Mark
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class NodeInfo(object):
|
|
11
|
+
"""Test node info."""
|
|
12
|
+
|
|
13
|
+
def __init__(self, item: Item):
|
|
14
|
+
self._item = item
|
|
15
|
+
self._log = getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
self._case_name = self._get_human_name(
|
|
18
|
+
item.own_markers,
|
|
19
|
+
"case_name",
|
|
20
|
+
)
|
|
21
|
+
self._module_name = self._get_human_name(
|
|
22
|
+
item.parent.own_markers,
|
|
23
|
+
"module_name",
|
|
24
|
+
)
|
|
25
|
+
self._module_id = Path(item.parent.nodeid).stem
|
|
26
|
+
self._case_id = item.name
|
|
27
|
+
|
|
28
|
+
@property
|
|
29
|
+
def module_id(self):
|
|
30
|
+
return self._module_id
|
|
31
|
+
|
|
32
|
+
@property
|
|
33
|
+
def case_id(self):
|
|
34
|
+
return self._case_id
|
|
35
|
+
|
|
36
|
+
@property
|
|
37
|
+
def module_name(self):
|
|
38
|
+
return self._module_name
|
|
39
|
+
|
|
40
|
+
@property
|
|
41
|
+
def case_name(self):
|
|
42
|
+
return self._case_name
|
|
43
|
+
|
|
44
|
+
def _get_human_name(self, markers: list[Mark], marker_name: str) -> str:
|
|
45
|
+
"""Get human name from markers.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
markers (list[Mark]): item markers list
|
|
49
|
+
marker_name (str): marker name
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
str: human name by user
|
|
53
|
+
"""
|
|
54
|
+
for marker in markers:
|
|
55
|
+
if marker.name == marker_name:
|
|
56
|
+
if marker.args:
|
|
57
|
+
return marker.args[0]
|
|
58
|
+
|
|
59
|
+
return ""
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
|
|
4
|
+
from logging import getLogger
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ProgressCalculator(object):
|
|
8
|
+
"""Test run progress calculator."""
|
|
9
|
+
|
|
10
|
+
def __init__(self):
|
|
11
|
+
self._progress_nodeids: set[str] = set()
|
|
12
|
+
self._tests_amount: int = 1
|
|
13
|
+
self._log = getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
def set_test_amount(self, amount: int):
|
|
16
|
+
"""Set test amount.
|
|
17
|
+
|
|
18
|
+
Raises:
|
|
19
|
+
ValueError: if test amount is less than 0
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
amount (int): test amount
|
|
23
|
+
"""
|
|
24
|
+
if amount <= 0:
|
|
25
|
+
raise ValueError("Test amount must be greater than 0.")
|
|
26
|
+
self._tests_amount = amount
|
|
27
|
+
|
|
28
|
+
def calculate(self, nodeid: str) -> int:
|
|
29
|
+
"""Calculate test progress.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
nodeid (str): current node id
|
|
33
|
+
|
|
34
|
+
Returns:
|
|
35
|
+
int: test progress in percent
|
|
36
|
+
"""
|
|
37
|
+
self._progress_nodeids.add(nodeid)
|
|
38
|
+
return len(self._progress_nodeids) * 100 // self._tests_amount
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
|
|
4
|
+
class Singleton(object):
|
|
5
|
+
"""Singleton class.
|
|
6
|
+
|
|
7
|
+
In the child class must be used constructor of type:
|
|
8
|
+
|
|
9
|
+
def __init__(self):
|
|
10
|
+
if not self._initialized:
|
|
11
|
+
...
|
|
12
|
+
your code
|
|
13
|
+
...
|
|
14
|
+
self._initialized = True
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
_instance = None
|
|
18
|
+
_initialized = False
|
|
19
|
+
|
|
20
|
+
def __new__(cls, *args, **kwargs): # noqa: D102
|
|
21
|
+
if not cls._instance:
|
|
22
|
+
cls._instance = super().__new__(cls, *args, **kwargs)
|
|
23
|
+
return cls._instance
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: hardpy
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: HardPy library for device testing
|
|
5
|
+
Project-URL: repository, https://github.com/everypindevices/hardpy
|
|
6
|
+
Author: Everypin
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Classifier: Development Status :: 4 - Beta
|
|
9
|
+
Classifier: Framework :: Pytest
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
12
|
+
Classifier: Operating System :: OS Independent
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
19
|
+
Classifier: Topic :: Software Development :: Testing
|
|
20
|
+
Classifier: Topic :: Software Development :: Testing :: Acceptance
|
|
21
|
+
Classifier: Topic :: Utilities
|
|
22
|
+
Requires-Python: <4,>=3.10
|
|
23
|
+
Requires-Dist: fastapi>=0.100.1
|
|
24
|
+
Requires-Dist: glom>=23.3.0
|
|
25
|
+
Requires-Dist: natsort>=8.4.0
|
|
26
|
+
Requires-Dist: pycouchdb>=1.14.2
|
|
27
|
+
Requires-Dist: pydantic>=2.4.0
|
|
28
|
+
Requires-Dist: pytest<9,>7
|
|
29
|
+
Requires-Dist: uvicorn>=0.23.2
|
|
30
|
+
Provides-Extra: build
|
|
31
|
+
Requires-Dist: build==1.0.3; extra == 'build'
|
|
32
|
+
Provides-Extra: dev
|
|
33
|
+
Requires-Dist: black; extra == 'dev'
|
|
34
|
+
Requires-Dist: mypy; extra == 'dev'
|
|
35
|
+
Requires-Dist: wemake-python-styleguide; extra == 'dev'
|
|
36
|
+
Description-Content-Type: text/markdown
|
|
37
|
+
|
|
38
|
+
<h1 align="center">
|
|
39
|
+
<img src="docs/img/logo512.png" alt="HardPy" style="width:200px;">
|
|
40
|
+
</h1>
|
|
41
|
+
|
|
42
|
+
<h1 align="center">
|
|
43
|
+
<b>HardPy</b>
|
|
44
|
+
</h1>
|
|
45
|
+
|
|
46
|
+
<p align="center">
|
|
47
|
+
HardPy is a python library for creating a test bench for devices.
|
|
48
|
+
</p>
|
|
49
|
+
|
|
50
|
+
## Overview
|
|
51
|
+
|
|
52
|
+
HardPy allows you to:
|
|
53
|
+
|
|
54
|
+
* Create test benches for devices using [pytest](https://docs.pytest.org/);
|
|
55
|
+
* Use a browser to view, run, and stop tests;
|
|
56
|
+
* Store test results in the [CouchDB](https://couchdb.apache.org/) database.
|
|
57
|
+
|
|
58
|
+
## To Install
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
pip3 install hardpy
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Examples
|
|
65
|
+
|
|
66
|
+
Find examples of using the **HardPy** in the `examples` folder.
|
|
67
|
+
|
|
68
|
+
## Getting Started
|
|
69
|
+
|
|
70
|
+
#### CouchDB
|
|
71
|
+
|
|
72
|
+
Launch CouchDB with Docker.
|
|
73
|
+
Create `couchdb.ini` file:
|
|
74
|
+
|
|
75
|
+
```ini
|
|
76
|
+
[chttpd]
|
|
77
|
+
enable_cors=true
|
|
78
|
+
|
|
79
|
+
[cors]
|
|
80
|
+
origins = *
|
|
81
|
+
methods = GET, PUT, POST, HEAD, DELETE
|
|
82
|
+
credentials = true
|
|
83
|
+
headers = accept, authorization, content-type, origin, referer, x-csrf-token
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Run the Docker container from folder with couchdb.ini file:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
docker run --name couchdb -p 5984:5984 -e COUCHDB_USER=dev -e COUCHDB_PASSWORD=dev -v ./couchdb.ini:/opt/couchdb/etc/local.ini couchdb:3.3
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
#### Test steps
|
|
93
|
+
|
|
94
|
+
Add simple test to `tests` folder
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
# conftest.py
|
|
98
|
+
import pytest
|
|
99
|
+
import hardpy
|
|
100
|
+
|
|
101
|
+
def pytest_configure(config: pytest.Config):
|
|
102
|
+
config.pluginmanager.register(hardpy.HardpyPlugin())
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
```python
|
|
106
|
+
# test_1.py
|
|
107
|
+
import pytest
|
|
108
|
+
|
|
109
|
+
def test_one():
|
|
110
|
+
assert True
|
|
111
|
+
```
|
|
112
|
+
#### Operator panel
|
|
113
|
+
|
|
114
|
+
Launch `hardpy-panel` from tests folder or launch `hardpy-panel tests` and open page http://localhost:8000/ in browser.
|
|
115
|
+
|
|
116
|
+
<h1 align="center">
|
|
117
|
+
<img src="docs/img/hardpy_operator_panel_hello_hardpy.png"
|
|
118
|
+
alt="hardpy operator panel" style="width:600px;">
|
|
119
|
+
</h1>
|
|
120
|
+
|
|
121
|
+
#### Test report
|
|
122
|
+
|
|
123
|
+
The last test report is stored in **runstore** database, document - **current**.
|
|
124
|
+
You can view the CouchDB instance through Fauxton web interface: http://127.0.0.1:5984/_utils
|
|
125
|
+
|
|
126
|
+
<h1 align="center">
|
|
127
|
+
<img src="docs/img/runstore_hello_hardpy.png"
|
|
128
|
+
alt="hardpy runstore" style="width:600px;">
|
|
129
|
+
</h1>
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
hardpy/__init__.py,sha256=_IaxXKdnYEnxyDOLKCvBHisLX45MbCBgVOlymMS-0so,937
|
|
2
|
+
hardpy/hardpy_panel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
hardpy/hardpy_panel/api.py,sha256=D5w0Y2VPfdOsatlGMKY0ywMKRNmNfZvcke4uGhyrRqI,1565
|
|
4
|
+
hardpy/hardpy_panel/runner.py,sha256=pmyIgdXIf-RvNFUsw5uBUdXzBOLeGOFzBTZMxQg45KM,1852
|
|
5
|
+
hardpy/hardpy_panel/frontend/dist/asset-manifest.json,sha256=Z6KDx9WMNghh4d_7w52kTSdEec-lup56JR6JEP3WY94,2824
|
|
6
|
+
hardpy/hardpy_panel/frontend/dist/favicon.ico,sha256=sgIk5PKUKEKBDpkSrc8dJgjpObp0iF82Mec0GpfKId4,15406
|
|
7
|
+
hardpy/hardpy_panel/frontend/dist/index.html,sha256=u1IJG5LkBLmaPgL-dYJ4rIfmxzf0xNhmmOupezuobgg,656
|
|
8
|
+
hardpy/hardpy_panel/frontend/dist/logo512.png,sha256=-fIMbqX7PYUpheK4kX1C1erRTe_hHZwFQYDLrAbhFRU,34188
|
|
9
|
+
hardpy/hardpy_panel/frontend/dist/manifest.json,sha256=PfmJlN2JMJtHS6OnhU4b4X5wPQC_yRBdjesjoirObSA,502
|
|
10
|
+
hardpy/hardpy_panel/frontend/dist/static/css/main.e8a862f1.css,sha256=gNl6kGMBhtswNrUU6X2S6uosRU7xhxqI_p9gsEtBUqE,318244
|
|
11
|
+
hardpy/hardpy_panel/frontend/dist/static/css/main.e8a862f1.css.map,sha256=CoYkLsN-XK5NHffWFxpBdC71kX1kfsn5mjw3SPMBShI,512750
|
|
12
|
+
hardpy/hardpy_panel/frontend/dist/static/js/808.ce070002.chunk.js,sha256=Tf8LD7uNGTtm5GY-vg93YQ8g2728c-wt_71ZV9zXpJI,7313
|
|
13
|
+
hardpy/hardpy_panel/frontend/dist/static/js/808.ce070002.chunk.js.map,sha256=P3QMCMlR0ZJqKgSQMk_f3iomFHM_BHqxRdZ9s0vnaUk,16938
|
|
14
|
+
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-16px-paths.d605910e.chunk.js,sha256=ySe_bW75GCQ1sWHusVPvUz8t0gXUAARhX2NYQnIutOM,248230
|
|
15
|
+
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-16px-paths.d605910e.chunk.js.map,sha256=eKghDBd2Pk0aL-mhukJFns5QH40XPS_rAQyOQNSzOG4,303052
|
|
16
|
+
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-20px-paths.7ee05cc8.chunk.js,sha256=2WkIlvn3T4wEu_Iaz9HoiOGsnSqU82ZhMvoZTYgrPaY,256588
|
|
17
|
+
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-20px-paths.7ee05cc8.chunk.js.map,sha256=1P_Bmlpi-0Z6jOdNcCMQ5Pz1ypezhWkJh3DKUIK2o_k,311540
|
|
18
|
+
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths-loader.0aa89747.chunk.js,sha256=qeKVWBUQ_3c24N9bZLDgF6uxOOpujCzxui2P2mpOerw,475
|
|
19
|
+
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths-loader.0aa89747.chunk.js.map,sha256=J4w-cMsnYEUn2c3LMg0XTq9PekyEhF6VklTgt4ti6MY,1486
|
|
20
|
+
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.chunk.js,sha256=-C47YqlTkKCDpsqHMty-Gw7ma_QARu-H_OdSq8ajDjY,420
|
|
21
|
+
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.chunk.js.map,sha256=p1xKHRK4AZutkZsQHiWSNU61tYp7I3iUuyLLm3eqkHQ,2833
|
|
22
|
+
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js,sha256=Jl5xm_jQ9IXKhCagHHvnIhwYXb379Q5FFBiqPoKdUIE,605
|
|
23
|
+
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js.map,sha256=amJiG2QaJMRR9Y2M0C2soOqd75xdQHhsVKjwrDSIIT0,2224
|
|
24
|
+
hardpy/hardpy_panel/frontend/dist/static/js/main.8ef63e9b.js,sha256=9SXZe8r-m8MAvgrl4PaSoD0o6oBWPHudDGDuyCoGQwY,982299
|
|
25
|
+
hardpy/hardpy_panel/frontend/dist/static/js/main.8ef63e9b.js.LICENSE.txt,sha256=ForPNukClWMEP3pF9LMYoU-ve-LsyCH-rYU8eLki_FY,2315
|
|
26
|
+
hardpy/hardpy_panel/frontend/dist/static/js/main.8ef63e9b.js.map,sha256=P_8SM0ZMRM_x_RqxwaL6yF0DS7na9I_aMnBgBu8x8Fg,4943986
|
|
27
|
+
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.520846c6beb41df528c8.eot,sha256=PTCTrQYNHX2hIPUaYWtOKrI30-iQGXt_EGxq6JCXie0,117628
|
|
28
|
+
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.5c52b39c697f2323ce8b.svg,sha256=lDCQy06aS-9bmhwuFOUs-EdcR8MP2wqwAwky5oamtkQ,509417
|
|
29
|
+
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.84db1772f4bfb529f64f.woff,sha256=edyqQN0nw4dNBs1pgr7pQB7nJhhR6T_YfklFcG_fHj0,53344
|
|
30
|
+
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.b67ee1736e20e37a3225.woff2,sha256=B8GmKQn3syZejgghoYsm2txy6Jy6RpUD-7Bbv-u_JC8,41612
|
|
31
|
+
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.e02ecf515378db143652.ttf,sha256=wA1ItrnCJli8ESQ1KwLR3egJZG55dKBbLPonqFIa0K0,117420
|
|
32
|
+
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.429cacb8accf72488451.ttf,sha256=WOcMDqEVBixNLV64eYwTLVRLx61HKOjLHkGXXeoqJPg,120472
|
|
33
|
+
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.6ae3791ee2d86fc228a6.svg,sha256=BsTLtmUaqeiMSZwv2ysmTV4qWVv-qYbwsE0_sVUjJk0,546938
|
|
34
|
+
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.8cecf62de42997e4d82f.woff2,sha256=1k6PvzcKh53cY1fYJB_CfHFcw_fUfuTGOb_BpW9EGr8,42808
|
|
35
|
+
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.afbadb627d43b7857223.eot,sha256=RPan5eGrt9_bHe9FXYXVYsbOA4J-BgNweKZJNaVXf2I,120680
|
|
36
|
+
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.e857f5a5132b8bfa71a1.woff,sha256=mQZTxE1PyyAL16VWuASOvXlZFwuI4aCPvbrhfgpdIdU,55356
|
|
37
|
+
hardpy/hardpy_panel/frontend/dist/static/media/logo_smol.5b16f92447a4a9e80331.png,sha256=E4K7drvhJCg9HcTpRihOXZhVJVBZ7-W97Se-3tDb46o,14485
|
|
38
|
+
hardpy/pytest_hardpy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
|
+
hardpy/pytest_hardpy/plugin.py,sha256=wvZaEpJHufYl5vPWXoeMPpnwud6vvL8el1atX-EowD0,8092
|
|
40
|
+
hardpy/pytest_hardpy/pytest_call.py,sha256=wyMDt4AwQC4qg6pYnevQv7FIhIvHNYreQdU1kEenqdY,5910
|
|
41
|
+
hardpy/pytest_hardpy/pytest_wrapper.py,sha256=mocoISmNE5sfWtY8rsAe-8N9PxWV7ASUr6pRj9N6yUo,3453
|
|
42
|
+
hardpy/pytest_hardpy/db/__init__.py,sha256=MxDufncz0zgRAxrndvPXXW4NrU7rRP7MzIrR7S5Cwwo,558
|
|
43
|
+
hardpy/pytest_hardpy/db/base_connector.py,sha256=7KUgPY-GmAo8MFN4OFpG5y3WH1xjohRnpeQ1gxQF1tg,751
|
|
44
|
+
hardpy/pytest_hardpy/db/base_server.py,sha256=uBnq5zGkzEIq_EGzLw0C8kfDEDvQyN52Y6L41KKL9FQ,397
|
|
45
|
+
hardpy/pytest_hardpy/db/base_store.py,sha256=iKh8qN-sPu79Ogp5857TR0t5RbGssC8V7iFAZAF5aFU,2504
|
|
46
|
+
hardpy/pytest_hardpy/db/const.py,sha256=ffYW54TP0aNF5LhW3g_2G5kVuvqAMWfuJqNDzWZg2nI,618
|
|
47
|
+
hardpy/pytest_hardpy/db/runstore.py,sha256=50amoTIO7OTqd5Ks1_7uTzqjCldLpTapkxbIQOgj1sQ,1023
|
|
48
|
+
hardpy/pytest_hardpy/db/schema.py,sha256=iIclTudP0tauTWLYiEW9MMlvBfuWOteA7eRzDU5gKwI,6859
|
|
49
|
+
hardpy/pytest_hardpy/db/statestore.py,sha256=1BUfA4oqG4vx7z5v_uUYi_Un6YA769JeuShxDicrl9Q,636
|
|
50
|
+
hardpy/pytest_hardpy/reporter/__init__.py,sha256=RONapygH3c_FyXokAlyCVJXGV2cV_jCYDxLymvvA1uE,322
|
|
51
|
+
hardpy/pytest_hardpy/reporter/base.py,sha256=kHYSLVxiq5Fyf4V-xGtgfOS3nImN1j5c13zcvqK1sq0,1343
|
|
52
|
+
hardpy/pytest_hardpy/reporter/hook_reporter.py,sha256=_7mM3B0U_vsuGGAKuX7jtuS045XVRouCeF0Q8uSUAwY,10181
|
|
53
|
+
hardpy/pytest_hardpy/reporter/runner_reporter.py,sha256=NXkBIoERqmLI-GYtHavmOWC5t6NIpcAE-NECrUKIAJs,827
|
|
54
|
+
hardpy/pytest_hardpy/result/__init__.py,sha256=NMeCGx3yh8ds9VpaUpuNFDxbwgYFq3e-o7W6rYIv8uI,346
|
|
55
|
+
hardpy/pytest_hardpy/result/couchdb_config.py,sha256=QZryfA2QoHIjzbVT3OAD76DCNppCghtRWdZMZ5v7KhY,611
|
|
56
|
+
hardpy/pytest_hardpy/result/report_loader/__init__.py,sha256=FuHuD6IFZyaKj0yu5urhf6nkxGbiPONJ-WHnJ2jHwyc,251
|
|
57
|
+
hardpy/pytest_hardpy/result/report_loader/couchdb_loader.py,sha256=1BGncK1NnwYJanm5TYETjMkqR7tmrUfGK8Sgnp2JZC8,2203
|
|
58
|
+
hardpy/pytest_hardpy/result/report_reader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
59
|
+
hardpy/pytest_hardpy/result/report_reader/couchdb_reader.py,sha256=WqetspIsQzu3iJ_HGo3XNkx4iXj6RC9o_SaRqyT-c-c,5634
|
|
60
|
+
hardpy/pytest_hardpy/utils/__init__.py,sha256=IeOr27pgzvMolQtEXJxODJKNdQAFww8EjjW-Gy1Gx2M,684
|
|
61
|
+
hardpy/pytest_hardpy/utils/config_data.py,sha256=F8khHsvkEsJjDnoHeLjI0rgsAfETN7nSlEP2snf2kio,990
|
|
62
|
+
hardpy/pytest_hardpy/utils/const.py,sha256=rjW1Rzhe2vCr8GeQqeN_pafepGDYhjhY4u1VfTOVI6U,625
|
|
63
|
+
hardpy/pytest_hardpy/utils/exception.py,sha256=5GnVkOchSPDEXaOXaruO0YzKXoY7b3Y5mVU5-51ZKRg,457
|
|
64
|
+
hardpy/pytest_hardpy/utils/node_info.py,sha256=9aK8X-lNrY3unjHAR-DBS6GFKyo7rEoDH-CTy_WGdFw,1437
|
|
65
|
+
hardpy/pytest_hardpy/utils/progress_calculator.py,sha256=r0qb3p6_yDIyLeCshF3Ceo5pCzd3BoTahL4rCD2oMNw,1041
|
|
66
|
+
hardpy/pytest_hardpy/utils/singleton.py,sha256=C8cgRDydnG2b5dcN1LCLw4aM-AUMAvJc1W39mTkNWlQ,614
|
|
67
|
+
hardpy-0.1.0.dist-info/METADATA,sha256=fAfyR3m3ZccxR-F_HCjTQS6VKXjPMtX1kp3ucB9dPDo,3393
|
|
68
|
+
hardpy-0.1.0.dist-info/WHEEL,sha256=TJPnKdtrSue7xZ_AVGkp9YXcvDrobsjBds1du3Nx6dc,87
|
|
69
|
+
hardpy-0.1.0.dist-info/entry_points.txt,sha256=q73g5GfznSUpjkayi0SV4uaAtrf7D-7rmDoWoEZmZe0,120
|
|
70
|
+
hardpy-0.1.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
71
|
+
hardpy-0.1.0.dist-info/RECORD,,
|