hardpy 0.10.1__tar.gz → 0.11.0__tar.gz

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 (88) hide show
  1. {hardpy-0.10.1 → hardpy-0.11.0}/PKG-INFO +1 -1
  2. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/__init__.py +2 -0
  3. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/cli/cli.py +0 -12
  4. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/cli/template.py +0 -4
  5. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/common/config.py +11 -21
  6. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/asset-manifest.json +3 -3
  7. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/index.html +1 -1
  8. hardpy-0.11.0/hardpy/hardpy_panel/frontend/dist/static/js/main.114c5914.js +3 -0
  9. hardpy-0.11.0/hardpy/hardpy_panel/frontend/dist/static/js/main.114c5914.js.map +1 -0
  10. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/base_store.py +7 -2
  11. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/const.py +3 -0
  12. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/schema/v1.py +22 -0
  13. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/plugin.py +4 -12
  14. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/pytest_call.py +30 -41
  15. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/pytest_wrapper.py +7 -17
  16. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/reporter/base.py +9 -4
  17. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/reporter/hook_reporter.py +7 -0
  18. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/__init__.py +2 -0
  19. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/connection_data.py +0 -4
  20. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/dialog_box.py +59 -6
  21. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/exception.py +1 -0
  22. {hardpy-0.10.1 → hardpy-0.11.0}/pyproject.toml +1 -1
  23. hardpy-0.10.1/hardpy/hardpy_panel/frontend/dist/static/js/main.8a7d8f7d.js +0 -3
  24. hardpy-0.10.1/hardpy/hardpy_panel/frontend/dist/static/js/main.8a7d8f7d.js.map +0 -1
  25. {hardpy-0.10.1 → hardpy-0.11.0}/.gitignore +0 -0
  26. {hardpy-0.10.1 → hardpy-0.11.0}/LICENSE +0 -0
  27. {hardpy-0.10.1 → hardpy-0.11.0}/README.md +0 -0
  28. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/cli/__init__.py +0 -0
  29. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/common/__init__.py +0 -0
  30. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/common/stand_cloud/__init__.py +0 -0
  31. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/common/stand_cloud/connector.py +0 -0
  32. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/common/stand_cloud/exception.py +0 -0
  33. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/common/stand_cloud/oauth_callback.py +0 -0
  34. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/common/stand_cloud/registration.py +0 -0
  35. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/common/stand_cloud/token_storage.py +0 -0
  36. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/__init__.py +0 -0
  37. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/api.py +0 -0
  38. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/favicon.ico +0 -0
  39. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/logo192.png +0 -0
  40. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/logo512.png +0 -0
  41. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/manifest.json +0 -0
  42. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/css/main.e8a862f1.css +0 -0
  43. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/css/main.e8a862f1.css.map +0 -0
  44. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/808.ce070002.chunk.js +0 -0
  45. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/808.ce070002.chunk.js.map +0 -0
  46. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-16px-paths.d605910e.chunk.js +0 -0
  47. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-16px-paths.d605910e.chunk.js.map +0 -0
  48. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-20px-paths.7ee05cc8.chunk.js +0 -0
  49. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-20px-paths.7ee05cc8.chunk.js.map +0 -0
  50. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths-loader.0aa89747.chunk.js +0 -0
  51. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths-loader.0aa89747.chunk.js.map +0 -0
  52. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.chunk.js +0 -0
  53. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.chunk.js.map +0 -0
  54. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js +0 -0
  55. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js.map +0 -0
  56. /hardpy-0.10.1/hardpy/hardpy_panel/frontend/dist/static/js/main.8a7d8f7d.js.LICENSE.txt → /hardpy-0.11.0/hardpy/hardpy_panel/frontend/dist/static/js/main.114c5914.js.LICENSE.txt +0 -0
  57. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.520846c6beb41df528c8.eot +0 -0
  58. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.5c52b39c697f2323ce8b.svg +0 -0
  59. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.84db1772f4bfb529f64f.woff +0 -0
  60. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.b67ee1736e20e37a3225.woff2 +0 -0
  61. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.e02ecf515378db143652.ttf +0 -0
  62. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.429cacb8accf72488451.ttf +0 -0
  63. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.6ae3791ee2d86fc228a6.svg +0 -0
  64. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.8cecf62de42997e4d82f.woff2 +0 -0
  65. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.afbadb627d43b7857223.eot +0 -0
  66. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.e857f5a5132b8bfa71a1.woff +0 -0
  67. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/hardpy_panel/frontend/dist/static/media/logo_smol.5b16f92447a4a9e80331.png +0 -0
  68. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/__init__.py +0 -0
  69. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/__init__.py +0 -0
  70. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/base_connector.py +0 -0
  71. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/base_server.py +0 -0
  72. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/runstore.py +0 -0
  73. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/schema/__init__.py +0 -0
  74. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/db/statestore.py +0 -0
  75. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/reporter/__init__.py +0 -0
  76. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/reporter/runner_reporter.py +0 -0
  77. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/result/__init__.py +0 -0
  78. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/result/couchdb_config.py +0 -0
  79. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/result/report_loader/__init__.py +0 -0
  80. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/result/report_loader/couchdb_loader.py +0 -0
  81. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/result/report_loader/stand_cloud_loader.py +0 -0
  82. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/result/report_reader/__init__.py +0 -0
  83. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/result/report_reader/couchdb_reader.py +0 -0
  84. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/const.py +0 -0
  85. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/machineid.py +0 -0
  86. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/node_info.py +0 -0
  87. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/progress_calculator.py +0 -0
  88. {hardpy-0.10.1 → hardpy-0.11.0}/hardpy/pytest_hardpy/utils/singleton.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hardpy
3
- Version: 0.10.1
3
+ Version: 0.11.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/
@@ -30,6 +30,7 @@ from hardpy.pytest_hardpy.utils import (
30
30
  DuplicateSerialNumberError,
31
31
  DuplicateTestStandLocationError,
32
32
  DuplicateTestStandNameError,
33
+ HTMLComponent,
33
34
  ImageComponent,
34
35
  MultistepWidget,
35
36
  NumericInputWidget,
@@ -48,6 +49,7 @@ __all__ = [
48
49
  "DuplicateSerialNumberError",
49
50
  "DuplicateTestStandLocationError",
50
51
  "DuplicateTestStandNameError",
52
+ "HTMLComponent",
51
53
  "ImageComponent",
52
54
  "MultistepWidget",
53
55
  "NumericInputWidget",
@@ -59,14 +59,6 @@ def init( # noqa: PLR0913
59
59
  default=default_config.frontend.port,
60
60
  help="Specify a frontend port.",
61
61
  ),
62
- socket_host: str = typer.Option(
63
- default=default_config.socket.host,
64
- help="Specify a socket host.",
65
- ),
66
- socket_port: int = typer.Option(
67
- default=default_config.socket.port,
68
- help="Specify a socket port.",
69
- ),
70
62
  sc_address: str = typer.Option(
71
63
  default="",
72
64
  help="Specify a StandCloud address.",
@@ -87,8 +79,6 @@ def init( # noqa: PLR0913
87
79
  database_port (int): Database port
88
80
  frontend_host (str): Panel operator host
89
81
  frontend_port (int): Panel operator port
90
- socket_host (str): Socket host
91
- socket_port (int): Socket port
92
82
  sc_address (str): StandCloud address
93
83
  sc_connection_only (bool): Flag to check StandCloud service availability
94
84
  """
@@ -101,8 +91,6 @@ def init( # noqa: PLR0913
101
91
  database_port=database_port,
102
92
  frontend_host=frontend_host,
103
93
  frontend_port=frontend_port,
104
- socket_host=socket_host,
105
- socket_port=socket_port,
106
94
  sc_address=sc_address,
107
95
  sc_connection_only=sc_connection_only,
108
96
  )
@@ -138,8 +138,6 @@ log_cli_format = %%(asctime)s [%%(levelname)s] %%(message)s
138
138
  log_cli_date_format = %H:%M:%S
139
139
  addopts = --hardpy-pt
140
140
  --hardpy-db-url http://{}:{}@{}:{}/
141
- --hardpy-sh {}
142
- --hardpy-sp {}
143
141
  """
144
142
 
145
143
  test_1_py = """import pytest
@@ -207,8 +205,6 @@ class TemplateGenerator:
207
205
  self._config.database.password,
208
206
  self._config.database.host,
209
207
  self._config.database.port,
210
- self._config.socket.host,
211
- self._config.socket.port,
212
208
  )
213
209
 
214
210
  @property
@@ -42,14 +42,6 @@ class FrontendConfig(BaseModel):
42
42
  port: int = 8000
43
43
 
44
44
 
45
- class SocketConfig(BaseModel):
46
- """Socket configuration."""
47
-
48
- model_config = ConfigDict(extra="forbid")
49
-
50
- host: str = "localhost"
51
- port: int = 6525
52
-
53
45
  class StandCloudConfig(BaseModel):
54
46
  """StandCloud configuration."""
55
47
 
@@ -58,7 +50,7 @@ class StandCloudConfig(BaseModel):
58
50
  address: str = ""
59
51
  connection_only: bool = False
60
52
 
61
- class HardpyConfig(BaseModel):
53
+ class HardpyConfig(BaseModel, extra="allow"):
62
54
  """HardPy configuration."""
63
55
 
64
56
  model_config = ConfigDict(extra="forbid")
@@ -67,7 +59,6 @@ class HardpyConfig(BaseModel):
67
59
  tests_dir: str = "tests"
68
60
  database: DatabaseConfig = DatabaseConfig()
69
61
  frontend: FrontendConfig = FrontendConfig()
70
- socket: SocketConfig = SocketConfig()
71
62
  stand_cloud: StandCloudConfig = StandCloudConfig()
72
63
 
73
64
 
@@ -87,8 +78,6 @@ class ConfigManager:
87
78
  database_port: int,
88
79
  frontend_host: str,
89
80
  frontend_port: int,
90
- socket_host: str,
91
- socket_port: int,
92
81
  sc_address: str = "",
93
82
  sc_connection_only: bool = False,
94
83
  ) -> None:
@@ -102,8 +91,6 @@ class ConfigManager:
102
91
  database_port (int): Database port.
103
92
  frontend_host (str): Operator panel host.
104
93
  frontend_port (int): Operator panel port.
105
- socket_host (str): Socket host.
106
- socket_port (int): Socket port.
107
94
  sc_address (str): StandCloud address.
108
95
  sc_connection_only (bool): StandCloud check availability.
109
96
  """
@@ -114,8 +101,6 @@ class ConfigManager:
114
101
  cls.obj.database.port = database_port
115
102
  cls.obj.frontend.host = frontend_host
116
103
  cls.obj.frontend.port = frontend_port
117
- cls.obj.socket.host = socket_host
118
- cls.obj.socket.port = socket_port
119
104
  cls.obj.stand_cloud.address = sc_address
120
105
  cls.obj.stand_cloud.connection_only = sc_connection_only
121
106
 
@@ -149,13 +134,18 @@ class ConfigManager:
149
134
  return None
150
135
  try:
151
136
  with Path.open(toml_path / "hardpy.toml", "rb") as f:
152
- cls.obj = HardpyConfig(**tomli.load(f))
153
- return cls.obj # noqa: TRY300
154
- except tomli.TOMLDecodeError:
155
- logger.exception("Error parsing TOML")
137
+ toml_data = tomli.load(f)
138
+ except tomli.TOMLDecodeError as exc:
139
+ msg = f"Error parsing TOML: {exc}"
140
+ logger.exception(msg)
141
+ return None
142
+
143
+ try:
144
+ cls.obj = HardpyConfig(**toml_data)
156
145
  except ValidationError:
157
146
  logger.exception("Error parsing TOML")
158
- return None
147
+ return None
148
+ return cls.obj
159
149
 
160
150
  @classmethod
161
151
  def get_config(cls) -> HardpyConfig:
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "/static/css/main.e8a862f1.css",
4
- "main.js": "/static/js/main.8a7d8f7d.js",
4
+ "main.js": "/static/js/main.114c5914.js",
5
5
  "blueprint-icons-all-paths-loader.js": "/static/js/blueprint-icons-all-paths-loader.0aa89747.chunk.js",
6
6
  "blueprint-icons-split-paths-by-size-loader.js": "/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js",
7
7
  "static/js/808.ce070002.chunk.js": "/static/js/808.ce070002.chunk.js",
@@ -21,7 +21,7 @@
21
21
  "static/media/logo_smol.png": "/static/media/logo_smol.5b16f92447a4a9e80331.png",
22
22
  "index.html": "/index.html",
23
23
  "main.e8a862f1.css.map": "/static/css/main.e8a862f1.css.map",
24
- "main.8a7d8f7d.js.map": "/static/js/main.8a7d8f7d.js.map",
24
+ "main.114c5914.js.map": "/static/js/main.114c5914.js.map",
25
25
  "blueprint-icons-all-paths-loader.0aa89747.chunk.js.map": "/static/js/blueprint-icons-all-paths-loader.0aa89747.chunk.js.map",
26
26
  "blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js.map": "/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js.map",
27
27
  "808.ce070002.chunk.js.map": "/static/js/808.ce070002.chunk.js.map",
@@ -31,6 +31,6 @@
31
31
  },
32
32
  "entrypoints": [
33
33
  "static/css/main.e8a862f1.css",
34
- "static/js/main.8a7d8f7d.js"
34
+ "static/js/main.114c5914.js"
35
35
  ]
36
36
  }
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>HardPy Operator Panel</title><script defer="defer" src="/static/js/main.8a7d8f7d.js"></script><link href="/static/css/main.e8a862f1.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>HardPy Operator Panel</title><script defer="defer" src="/static/js/main.114c5914.js"></script><link href="/static/css/main.e8a862f1.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>