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.
Files changed (71) hide show
  1. hardpy/__init__.py +34 -0
  2. hardpy/hardpy_panel/__init__.py +0 -0
  3. hardpy/hardpy_panel/api.py +71 -0
  4. hardpy/hardpy_panel/frontend/dist/asset-manifest.json +36 -0
  5. hardpy/hardpy_panel/frontend/dist/favicon.ico +0 -0
  6. hardpy/hardpy_panel/frontend/dist/index.html +1 -0
  7. hardpy/hardpy_panel/frontend/dist/logo512.png +0 -0
  8. hardpy/hardpy_panel/frontend/dist/manifest.json +25 -0
  9. hardpy/hardpy_panel/frontend/dist/static/css/main.e8a862f1.css +2 -0
  10. hardpy/hardpy_panel/frontend/dist/static/css/main.e8a862f1.css.map +1 -0
  11. hardpy/hardpy_panel/frontend/dist/static/js/808.ce070002.chunk.js +2 -0
  12. hardpy/hardpy_panel/frontend/dist/static/js/808.ce070002.chunk.js.map +1 -0
  13. hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-16px-paths.d605910e.chunk.js +2 -0
  14. hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-16px-paths.d605910e.chunk.js.map +1 -0
  15. hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-20px-paths.7ee05cc8.chunk.js +2 -0
  16. hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-20px-paths.7ee05cc8.chunk.js.map +1 -0
  17. hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths-loader.0aa89747.chunk.js +2 -0
  18. hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths-loader.0aa89747.chunk.js.map +1 -0
  19. hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.chunk.js +2 -0
  20. hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.chunk.js.map +1 -0
  21. hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js +2 -0
  22. hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js.map +1 -0
  23. hardpy/hardpy_panel/frontend/dist/static/js/main.8ef63e9b.js +3 -0
  24. hardpy/hardpy_panel/frontend/dist/static/js/main.8ef63e9b.js.LICENSE.txt +90 -0
  25. hardpy/hardpy_panel/frontend/dist/static/js/main.8ef63e9b.js.map +1 -0
  26. hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.520846c6beb41df528c8.eot +0 -0
  27. hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.5c52b39c697f2323ce8b.svg +1806 -0
  28. hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.84db1772f4bfb529f64f.woff +0 -0
  29. hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.b67ee1736e20e37a3225.woff2 +0 -0
  30. hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.e02ecf515378db143652.ttf +0 -0
  31. hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.429cacb8accf72488451.ttf +0 -0
  32. hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.6ae3791ee2d86fc228a6.svg +1806 -0
  33. hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.8cecf62de42997e4d82f.woff2 +0 -0
  34. hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.afbadb627d43b7857223.eot +0 -0
  35. hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.e857f5a5132b8bfa71a1.woff +0 -0
  36. hardpy/hardpy_panel/frontend/dist/static/media/logo_smol.5b16f92447a4a9e80331.png +0 -0
  37. hardpy/hardpy_panel/runner.py +52 -0
  38. hardpy/pytest_hardpy/__init__.py +0 -0
  39. hardpy/pytest_hardpy/db/__init__.py +18 -0
  40. hardpy/pytest_hardpy/db/base_connector.py +24 -0
  41. hardpy/pytest_hardpy/db/base_server.py +14 -0
  42. hardpy/pytest_hardpy/db/base_store.py +88 -0
  43. hardpy/pytest_hardpy/db/const.py +25 -0
  44. hardpy/pytest_hardpy/db/runstore.py +30 -0
  45. hardpy/pytest_hardpy/db/schema.py +292 -0
  46. hardpy/pytest_hardpy/db/statestore.py +19 -0
  47. hardpy/pytest_hardpy/plugin.py +244 -0
  48. hardpy/pytest_hardpy/pytest_call.py +218 -0
  49. hardpy/pytest_hardpy/pytest_wrapper.py +117 -0
  50. hardpy/pytest_hardpy/reporter/__init__.py +10 -0
  51. hardpy/pytest_hardpy/reporter/base.py +42 -0
  52. hardpy/pytest_hardpy/reporter/hook_reporter.py +307 -0
  53. hardpy/pytest_hardpy/reporter/runner_reporter.py +29 -0
  54. hardpy/pytest_hardpy/result/__init__.py +10 -0
  55. hardpy/pytest_hardpy/result/couchdb_config.py +22 -0
  56. hardpy/pytest_hardpy/result/report_loader/__init__.py +10 -0
  57. hardpy/pytest_hardpy/result/report_loader/couchdb_loader.py +62 -0
  58. hardpy/pytest_hardpy/result/report_reader/__init__.py +0 -0
  59. hardpy/pytest_hardpy/result/report_reader/couchdb_reader.py +164 -0
  60. hardpy/pytest_hardpy/utils/__init__.py +19 -0
  61. hardpy/pytest_hardpy/utils/config_data.py +31 -0
  62. hardpy/pytest_hardpy/utils/const.py +29 -0
  63. hardpy/pytest_hardpy/utils/exception.py +16 -0
  64. hardpy/pytest_hardpy/utils/node_info.py +59 -0
  65. hardpy/pytest_hardpy/utils/progress_calculator.py +38 -0
  66. hardpy/pytest_hardpy/utils/singleton.py +23 -0
  67. hardpy-0.1.0.dist-info/METADATA +129 -0
  68. hardpy-0.1.0.dist-info/RECORD +71 -0
  69. hardpy-0.1.0.dist-info/WHEEL +4 -0
  70. hardpy-0.1.0.dist-info/entry_points.txt +5 -0
  71. 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,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.21.1
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,5 @@
1
+ [console_scripts]
2
+ hardpy-panel = hardpy.hardpy_panel.runner:run
3
+
4
+ [pytest11]
5
+ pytest_hardpy = hardpy.pytest_hardpy.plugin