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.
Files changed (47) hide show
  1. hardpy/__init__.py +49 -49
  2. hardpy/cli/cli.py +8 -9
  3. hardpy/cli/template.py +6 -6
  4. hardpy/common/config.py +19 -18
  5. hardpy/hardpy_panel/api.py +9 -9
  6. hardpy/hardpy_panel/frontend/dist/asset-manifest.json +3 -3
  7. hardpy/hardpy_panel/frontend/dist/index.html +1 -1
  8. hardpy/hardpy_panel/frontend/dist/logo192.png +0 -0
  9. hardpy/hardpy_panel/frontend/dist/static/css/main.e8a862f1.css.map +1 -1
  10. hardpy/hardpy_panel/frontend/dist/static/js/main.6f09d61a.js +3 -0
  11. hardpy/hardpy_panel/frontend/dist/static/js/{main.7c954faf.js.map → main.6f09d61a.js.map} +1 -1
  12. hardpy/pytest_hardpy/db/__init__.py +4 -5
  13. hardpy/pytest_hardpy/db/base_connector.py +6 -5
  14. hardpy/pytest_hardpy/db/base_server.py +1 -1
  15. hardpy/pytest_hardpy/db/base_store.py +23 -9
  16. hardpy/pytest_hardpy/db/const.py +3 -1
  17. hardpy/pytest_hardpy/db/runstore.py +13 -15
  18. hardpy/pytest_hardpy/db/schema/__init__.py +9 -0
  19. hardpy/pytest_hardpy/db/{schema.py → schema/v1.py} +120 -79
  20. hardpy/pytest_hardpy/db/statestore.py +7 -20
  21. hardpy/pytest_hardpy/plugin.py +128 -85
  22. hardpy/pytest_hardpy/pytest_call.py +80 -32
  23. hardpy/pytest_hardpy/pytest_wrapper.py +8 -8
  24. hardpy/pytest_hardpy/reporter/__init__.py +2 -2
  25. hardpy/pytest_hardpy/reporter/base.py +32 -7
  26. hardpy/pytest_hardpy/reporter/hook_reporter.py +66 -37
  27. hardpy/pytest_hardpy/reporter/runner_reporter.py +6 -8
  28. hardpy/pytest_hardpy/result/__init__.py +2 -2
  29. hardpy/pytest_hardpy/result/couchdb_config.py +20 -16
  30. hardpy/pytest_hardpy/result/report_loader/couchdb_loader.py +2 -2
  31. hardpy/pytest_hardpy/result/report_reader/couchdb_reader.py +36 -20
  32. hardpy/pytest_hardpy/utils/__init__.py +34 -29
  33. hardpy/pytest_hardpy/utils/connection_data.py +6 -8
  34. hardpy/pytest_hardpy/utils/const.py +1 -1
  35. hardpy/pytest_hardpy/utils/dialog_box.py +105 -66
  36. hardpy/pytest_hardpy/utils/exception.py +14 -8
  37. hardpy/pytest_hardpy/utils/machineid.py +15 -0
  38. hardpy/pytest_hardpy/utils/node_info.py +45 -16
  39. hardpy/pytest_hardpy/utils/progress_calculator.py +4 -3
  40. hardpy/pytest_hardpy/utils/singleton.py +23 -16
  41. {hardpy-0.6.1.dist-info → hardpy-0.8.0.dist-info}/METADATA +26 -33
  42. {hardpy-0.6.1.dist-info → hardpy-0.8.0.dist-info}/RECORD +46 -43
  43. hardpy/hardpy_panel/frontend/dist/static/js/main.7c954faf.js +0 -3
  44. /hardpy/hardpy_panel/frontend/dist/static/js/{main.7c954faf.js.LICENSE.txt → main.6f09d61a.js.LICENSE.txt} +0 -0
  45. {hardpy-0.6.1.dist-info → hardpy-0.8.0.dist-info}/WHEEL +0 -0
  46. {hardpy-0.6.1.dist-info → hardpy-0.8.0.dist-info}/entry_points.txt +0 -0
  47. {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
- from pytest import Item, Mark
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._module_id = Path(item.parent.nodeid).stem
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
- if marker.args:
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
- raise ValueError("Test amount must be greater than 0.")
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
- class Singleton:
5
- """Singleton class.
5
+ from typing import Generic, TypeVar
6
6
 
7
- In the child class must be used constructor of type:
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
- _instance = None
18
- _initialized = False
10
+ class SingletonMeta(type, Generic[T]): # noqa: D101
11
+ _instances: dict[SingletonMeta[T], T] = {} # noqa: RUF012
19
12
 
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
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.6.1
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: <4,>=3.10
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: pycouchdb>=1.14.2
30
- Requires-Dist: pydantic>=2.4.0
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: rtoml~=0.11.0
33
- Requires-Dist: typer<1.0,>=0.12
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: black; extra == 'dev'
39
- Requires-Dist: mypy; extra == 'dev'
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://everypinio.github.io/hardpy/img/logo256.png" alt="HardPy" style="width:200px;">
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
- **Source Code**: <a href=https://github.com/everypinio/hardpy target="_blank">https://github.com/everypinio/hardpy</a>
56
+ [![PyPI version](https://img.shields.io/pypi/v/hardpy)](https://pypi.org/project/hardpy/)
57
+ ![python versions](https://img.shields.io/pypi/pyversions/hardpy.svg)
58
+ [![pytest versions](https://img.shields.io/badge/pytest-%3E%3D7.0%20%3C9.0-blue)](https://docs.pytest.org/en/latest/)
59
+ [![Documentation](https://img.shields.io/badge/Documentation%20-Overview%20-%20%23007ec6)](https://everypinio.github.io/hardpy/)
60
60
 
61
- **PyPi**: <a href=https://pypi.org/project/hardpy/ target="_blank">https://pypi.org/project/hardpy/</a>
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
- Find more examples of using the **HardPy** in the [examples](https://github.com/everypinio/hardpy/tree/main/examples) folder.
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=1GtlRzkpmNVjZ6LcNYFVmEtgFCR3T6gLSLBLrZA9Nog,1692
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=Z0KGzZplCaHfyttKjMIqnE5upaca-H1XyiaZ2fUCHvM,4504
4
- hardpy/cli/template.py,sha256=IgroGdzkKUn5BExDYtzw9djr1Ryvj39wRUF-VlKCToE,6461
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=rkvbFXFxoqBkYsEbCcnWX5d6G9hzS9Mr4mgQoSMbY6U,4497
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=ew_3cTMW5XzS_EtHkH41z8ckOcJ_a5_zi3-AE8OKtEI,2969
9
- hardpy/hardpy_panel/frontend/dist/asset-manifest.json,sha256=BnMkNkch6nsMmxLzKmOB3ne_jq-d5ksz2AS_M25r-jA,2824
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=6Ea-Fn6tO3DbWeeYbMp4HYix1SILrdny4OKnk2odti8,656
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=CoYkLsN-XK5NHffWFxpBdC71kX1kfsn5mjw3SPMBShI,512750
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.7c954faf.js,sha256=e6kjJZEVUdfYrF2TE7_jXWmRkxv555N6ARVR5OSNquA,1062573
29
- hardpy/hardpy_panel/frontend/dist/static/js/main.7c954faf.js.LICENSE.txt,sha256=ForPNukClWMEP3pF9LMYoU-ve-LsyCH-rYU8eLki_FY,2315
30
- hardpy/hardpy_panel/frontend/dist/static/js/main.7c954faf.js.map,sha256=VpaF9MC2wZxpMZf-a7PgfXikuXzwK4nL3qKmknf-yn4,5306007
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=5DF29vbTPQ-nohiDDYay6Ml6GUHFnxZZDZHtKSFAOZE,14044
44
- hardpy/pytest_hardpy/pytest_call.py,sha256=yXhp40ccOyeN0AJygenjQQ6fQKS2B85eW4-wZP2OgIQ,10184
45
- hardpy/pytest_hardpy/pytest_wrapper.py,sha256=p11L4d1VIDmgeG8ltRQrmBRXqK1HRqBCQo63Qia_0SQ,4495
46
- hardpy/pytest_hardpy/db/__init__.py,sha256=MxDufncz0zgRAxrndvPXXW4NrU7rRP7MzIrR7S5Cwwo,558
47
- hardpy/pytest_hardpy/db/base_connector.py,sha256=cmNV4Y6jFij8Fpp_74W0nqdBFa3J9c9in7MDeNJ4ZL0,1046
48
- hardpy/pytest_hardpy/db/base_server.py,sha256=zZbek5jNjtXRVxOhFLWvmKrtOZsbQwrsW0pcql2gpUg,396
49
- hardpy/pytest_hardpy/db/base_store.py,sha256=WkgBvvY4pEYp83jP3HxxSfmLztoMzAXh199J_mOQcX8,2900
50
- hardpy/pytest_hardpy/db/const.py,sha256=7jmJOZA-V-Jjf8vyFqTuyqrKueiPDUO60jNj2z5jKsQ,738
51
- hardpy/pytest_hardpy/db/runstore.py,sha256=50amoTIO7OTqd5Ks1_7uTzqjCldLpTapkxbIQOgj1sQ,1023
52
- hardpy/pytest_hardpy/db/schema.py,sha256=dDwVlXT1Jt_A-ZtjjbZG_QR6AeqTdHT79eLEIjkZIxU,8262
53
- hardpy/pytest_hardpy/db/statestore.py,sha256=IBgPXQ0aAtaAOVW2Q-U9Pv0GqYY8o340K30EvDRdsAI,1025
54
- hardpy/pytest_hardpy/reporter/__init__.py,sha256=RONapygH3c_FyXokAlyCVJXGV2cV_jCYDxLymvvA1uE,322
55
- hardpy/pytest_hardpy/reporter/base.py,sha256=mnu_1exZ7IHj5SvhsAeRdZoZPe9uZFQoTt-Bg0wsO5s,1933
56
- hardpy/pytest_hardpy/reporter/hook_reporter.py,sha256=WE7Z5KP-9VapexIev6Igd-H9Vxp_bjWxyug6fgbpJgA,10255
57
- hardpy/pytest_hardpy/reporter/runner_reporter.py,sha256=NXkBIoERqmLI-GYtHavmOWC5t6NIpcAE-NECrUKIAJs,827
58
- hardpy/pytest_hardpy/result/__init__.py,sha256=NMeCGx3yh8ds9VpaUpuNFDxbwgYFq3e-o7W6rYIv8uI,346
59
- hardpy/pytest_hardpy/result/couchdb_config.py,sha256=kttsrWzv9D99R3ms-hFbzVbrZ78B2me6rrJgncfs5jk,3129
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=Wwo_JBoPpwh72iHFaq5ZqHZw-_tWsXyalqje1jzYlfY,2247
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=Ns82mzerDa4HipX6Xea1uGkXmhf8UotX6KsiChD1ViM,5618
64
- hardpy/pytest_hardpy/utils/__init__.py,sha256=R2a5la6zEQdEeeL-W-OWpAFFzXHswu8a_nAw3C53y38,1295
65
- hardpy/pytest_hardpy/utils/connection_data.py,sha256=GTKXzl9MXt1XkwEPi6NxdWUghRmZOWBV8nfgnbRh50s,541
66
- hardpy/pytest_hardpy/utils/const.py,sha256=SsqRisrq9OlCb9cK5sEjFW_bZ9V2Qw61P9iYObIj5Fg,423
67
- hardpy/pytest_hardpy/utils/dialog_box.py,sha256=lY_q_SGRdWtza4paHrsMfKTCsSkN_V8WIH7V7r_PNdo,8187
68
- hardpy/pytest_hardpy/utils/exception.py,sha256=BlkVea4wwHJeXcU1rpUqH9IbMBFQYHghOXhHWSvDz8Q,1156
69
- hardpy/pytest_hardpy/utils/node_info.py,sha256=qBzNCv-0YwIcLxES3kIvOLSblaJ3ICrtKl-tdF2Ndnk,3149
70
- hardpy/pytest_hardpy/utils/progress_calculator.py,sha256=L6jJgkO1uxx5U2KKmQfTsGwgX5Atrqka5KV7uiMcou8,1033
71
- hardpy/pytest_hardpy/utils/singleton.py,sha256=vP1BMzLkQF0j7t7crijPj6uyAowfviihJeXDJvhTDxU,606
72
- hardpy-0.6.1.dist-info/METADATA,sha256=HtkFMKxgEnDfNOSz8C-CQcyGYAyF_kmF2fAJM7MfcVI,3586
73
- hardpy-0.6.1.dist-info/WHEEL,sha256=TJPnKdtrSue7xZ_AVGkp9YXcvDrobsjBds1du3Nx6dc,87
74
- hardpy-0.6.1.dist-info/entry_points.txt,sha256=nL2sMkKMScNaOE0IPkYnu9Yr-BUswZvGSrwY-SxHY3E,102
75
- hardpy-0.6.1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
76
- hardpy-0.6.1.dist-info/RECORD,,
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,,