hardpy 0.8.0__py3-none-any.whl → 0.9.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 +2 -0
- hardpy/hardpy_panel/frontend/dist/asset-manifest.json +3 -3
- hardpy/hardpy_panel/frontend/dist/index.html +1 -1
- hardpy/hardpy_panel/frontend/dist/static/js/main.403e9cd8.js +3 -0
- hardpy/hardpy_panel/frontend/dist/static/js/main.403e9cd8.js.map +1 -0
- hardpy/pytest_hardpy/db/const.py +5 -0
- hardpy/pytest_hardpy/db/schema/v1.py +10 -3
- hardpy/pytest_hardpy/plugin.py +4 -0
- hardpy/pytest_hardpy/pytest_call.py +79 -42
- hardpy/pytest_hardpy/pytest_wrapper.py +4 -4
- hardpy/pytest_hardpy/utils/dialog_box.py +10 -0
- {hardpy-0.8.0.dist-info → hardpy-0.9.0.dist-info}/METADATA +2 -1
- {hardpy-0.8.0.dist-info → hardpy-0.9.0.dist-info}/RECORD +17 -17
- hardpy/hardpy_panel/frontend/dist/static/js/main.6f09d61a.js +0 -3
- hardpy/hardpy_panel/frontend/dist/static/js/main.6f09d61a.js.map +0 -1
- /hardpy/hardpy_panel/frontend/dist/static/js/{main.6f09d61a.js.LICENSE.txt → main.403e9cd8.js.LICENSE.txt} +0 -0
- {hardpy-0.8.0.dist-info → hardpy-0.9.0.dist-info}/WHEEL +0 -0
- {hardpy-0.8.0.dist-info → hardpy-0.9.0.dist-info}/entry_points.txt +0 -0
- {hardpy-0.8.0.dist-info → hardpy-0.9.0.dist-info}/licenses/LICENSE +0 -0
hardpy/pytest_hardpy/db/const.py
CHANGED
|
@@ -42,7 +42,10 @@ class CaseStateStore(IBaseResult):
|
|
|
42
42
|
"text": "some text"
|
|
43
43
|
},
|
|
44
44
|
"type": "textinput"
|
|
45
|
-
}
|
|
45
|
+
},
|
|
46
|
+
visible: true,
|
|
47
|
+
id: "af6ac3e7-7ce8-4a6b-bb9d-88c3e10b5c7a",
|
|
48
|
+
font_size: 14
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
51
|
}
|
|
@@ -241,7 +244,8 @@ class ResultStateStore(IBaseResult):
|
|
|
241
244
|
"operator_msg": {
|
|
242
245
|
"msg": "Operator message",
|
|
243
246
|
"title": "Message",
|
|
244
|
-
"visible":
|
|
247
|
+
"visible": true,
|
|
248
|
+
"id": "f45ac1e7-2ce8-4a6b-bb9d-8863e30bcc78"
|
|
245
249
|
},
|
|
246
250
|
"modules": {
|
|
247
251
|
"test_1_a": {
|
|
@@ -266,7 +270,10 @@ class ResultStateStore(IBaseResult):
|
|
|
266
270
|
"text": "some text"
|
|
267
271
|
},
|
|
268
272
|
"type": "textinput"
|
|
269
|
-
}
|
|
273
|
+
},
|
|
274
|
+
visible: true,
|
|
275
|
+
id: "f45bc1e7-2c18-4a4b-2b9d-8863e30bcc78",
|
|
276
|
+
font_size: 14
|
|
270
277
|
}
|
|
271
278
|
},
|
|
272
279
|
"test_minute_parity": {
|
hardpy/pytest_hardpy/plugin.py
CHANGED
|
@@ -7,6 +7,7 @@ from logging import getLogger
|
|
|
7
7
|
from pathlib import Path, PurePath
|
|
8
8
|
from platform import system
|
|
9
9
|
from re import compile as re_compile
|
|
10
|
+
from time import sleep
|
|
10
11
|
from typing import Any, Callable
|
|
11
12
|
|
|
12
13
|
from _pytest._code.code import (
|
|
@@ -254,6 +255,9 @@ class HardpyPlugin:
|
|
|
254
255
|
|
|
255
256
|
# first attempt was in pytest_runtest_call
|
|
256
257
|
for current_attempt in range(2, attempt + 1):
|
|
258
|
+
# add pause between attempts to verify STOP condition
|
|
259
|
+
sleep(1)
|
|
260
|
+
|
|
257
261
|
self._reporter.set_module_status(module_id, TestStatus.RUN)
|
|
258
262
|
self._reporter.set_case_status(module_id, case_id, TestStatus.RUN)
|
|
259
263
|
self._reporter.set_case_attempt(module_id, case_id, current_attempt)
|
|
@@ -5,7 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
import socket
|
|
6
6
|
from dataclasses import dataclass
|
|
7
7
|
from os import environ
|
|
8
|
-
from
|
|
8
|
+
from select import select
|
|
9
9
|
from typing import Any
|
|
10
10
|
from uuid import uuid4
|
|
11
11
|
|
|
@@ -25,6 +25,7 @@ from hardpy.pytest_hardpy.utils import (
|
|
|
25
25
|
DuplicateSerialNumberError,
|
|
26
26
|
DuplicateTestStandLocationError,
|
|
27
27
|
DuplicateTestStandNameError,
|
|
28
|
+
ImageComponent,
|
|
28
29
|
)
|
|
29
30
|
|
|
30
31
|
|
|
@@ -306,52 +307,76 @@ def run_dialog_box(dialog_box_data: DialogBox) -> Any: # noqa: ANN401
|
|
|
306
307
|
current_test.case_id,
|
|
307
308
|
DF.DIALOG_BOX,
|
|
308
309
|
)
|
|
309
|
-
|
|
310
|
-
reporter.set_doc_value(key, {}, statestore_only=True)
|
|
311
|
-
reporter.update_db_by_doc()
|
|
312
|
-
debounce_time = 0.2
|
|
313
|
-
sleep(debounce_time)
|
|
310
|
+
_cleanup_widget(reporter, key)
|
|
314
311
|
|
|
315
312
|
reporter.set_doc_value(key, dialog_box_data.to_dict(), statestore_only=True)
|
|
316
313
|
reporter.update_db_by_doc()
|
|
317
314
|
|
|
315
|
+
# get socket data
|
|
318
316
|
input_dbx_data = _get_socket_raw_data()
|
|
319
317
|
|
|
320
|
-
|
|
321
|
-
reporter.set_doc_value(key, {}, statestore_only=True)
|
|
322
|
-
reporter.update_db_by_doc()
|
|
318
|
+
_cleanup_widget(reporter, key)
|
|
323
319
|
return dialog_box_data.widget.convert_data(input_dbx_data)
|
|
324
320
|
|
|
325
321
|
|
|
326
|
-
def set_operator_message(
|
|
322
|
+
def set_operator_message(
|
|
323
|
+
msg: str,
|
|
324
|
+
title: str | None = None,
|
|
325
|
+
block: bool = True,
|
|
326
|
+
image: ImageComponent | None = None,
|
|
327
|
+
font_size: int = 14,
|
|
328
|
+
) -> None:
|
|
327
329
|
"""Set operator message.
|
|
328
330
|
|
|
329
331
|
The function should be used to handle events outside of testing.
|
|
330
332
|
For messages to the operator during testing, there is the function `run_dialog_box`.
|
|
331
333
|
|
|
332
334
|
Args:
|
|
333
|
-
msg (str):
|
|
334
|
-
title (str | None):
|
|
335
|
+
msg (str): message
|
|
336
|
+
title (str | None): title
|
|
337
|
+
image (ImageComponent | None): operator message info
|
|
338
|
+
block (bool): if True, the function will block until the message is closed
|
|
339
|
+
font_size (int): font size
|
|
335
340
|
"""
|
|
336
341
|
reporter = RunnerReporter()
|
|
337
342
|
key = reporter.generate_key(DF.OPERATOR_MSG)
|
|
343
|
+
_cleanup_widget(reporter, key)
|
|
338
344
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
sleep(debounce_time)
|
|
345
|
+
if font_size < 1:
|
|
346
|
+
msg = "The 'font_size' argument cannot be less than 1"
|
|
347
|
+
raise ValueError(msg)
|
|
343
348
|
|
|
344
|
-
msg_data = {
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
+
msg_data = {
|
|
350
|
+
DF.MSG: msg,
|
|
351
|
+
DF.TITLE: title,
|
|
352
|
+
DF.VISIBLE: True,
|
|
353
|
+
DF.IMAGE: image.to_dict() if image else None,
|
|
354
|
+
DF.ID: str(uuid4()),
|
|
355
|
+
DF.FONT_SIZE: int(font_size),
|
|
356
|
+
}
|
|
349
357
|
reporter.set_doc_value(key, msg_data, statestore_only=True)
|
|
350
358
|
reporter.update_db_by_doc()
|
|
351
359
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
360
|
+
if block:
|
|
361
|
+
# get socket data
|
|
362
|
+
is_msg_visible = _get_socket_raw_data()
|
|
363
|
+
|
|
364
|
+
msg_data[DF.VISIBLE] = is_msg_visible
|
|
365
|
+
reporter.set_doc_value(key, msg_data, statestore_only=True)
|
|
366
|
+
reporter.update_db_by_doc()
|
|
367
|
+
|
|
368
|
+
_cleanup_widget(reporter, key)
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
def clear_operator_message() -> None:
|
|
372
|
+
"""Clear operator message.
|
|
373
|
+
|
|
374
|
+
Clears the current message to the operator if it exists, otherwise does nothing.
|
|
375
|
+
"""
|
|
376
|
+
reporter = RunnerReporter()
|
|
377
|
+
key = reporter.generate_key(DF.OPERATOR_MSG)
|
|
378
|
+
|
|
379
|
+
_cleanup_widget(reporter, key)
|
|
355
380
|
|
|
356
381
|
|
|
357
382
|
def get_current_attempt() -> int:
|
|
@@ -391,25 +416,37 @@ def _get_current_test() -> CurrentTestInfo:
|
|
|
391
416
|
|
|
392
417
|
def _get_socket_raw_data() -> str:
|
|
393
418
|
# create socket connection
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
419
|
+
with socket.socket() as server:
|
|
420
|
+
server.setblocking(False)
|
|
421
|
+
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
422
|
+
|
|
423
|
+
con_data = ConnectionData()
|
|
424
|
+
try:
|
|
425
|
+
server.bind((con_data.socket_host, con_data.socket_port))
|
|
426
|
+
except OSError as exc:
|
|
427
|
+
msg = "Socket creating error"
|
|
428
|
+
server.close()
|
|
429
|
+
raise RuntimeError(msg) from exc
|
|
430
|
+
server.listen(1)
|
|
431
|
+
|
|
432
|
+
client = None
|
|
433
|
+
while True:
|
|
434
|
+
ready_to_read, _, _ = select([server], [], [], 0.5)
|
|
435
|
+
if ready_to_read:
|
|
436
|
+
client, _ = server.accept()
|
|
437
|
+
break
|
|
438
|
+
|
|
439
|
+
# receive data
|
|
440
|
+
max_input_data_len = 1024
|
|
441
|
+
socket_data = client.recv(max_input_data_len).decode("utf-8")
|
|
442
|
+
|
|
443
|
+
# close connection
|
|
444
|
+
client.close()
|
|
402
445
|
server.close()
|
|
403
|
-
raise RuntimeError(msg) from exc
|
|
404
|
-
server.listen(1)
|
|
405
|
-
client, _ = server.accept()
|
|
406
446
|
|
|
407
|
-
|
|
408
|
-
max_input_data_len = 1024
|
|
409
|
-
socket_data = client.recv(max_input_data_len).decode("utf-8")
|
|
447
|
+
return socket_data
|
|
410
448
|
|
|
411
|
-
# close connection
|
|
412
|
-
client.close()
|
|
413
|
-
server.close()
|
|
414
449
|
|
|
415
|
-
|
|
450
|
+
def _cleanup_widget(reporter: RunnerReporter, key: str) -> None:
|
|
451
|
+
reporter.set_doc_value(key, {}, statestore_only=True)
|
|
452
|
+
reporter.update_db_by_doc()
|
|
@@ -134,10 +134,10 @@ class PyTestWrapper:
|
|
|
134
134
|
bool: True if dialog box was confirmed/closed, else False
|
|
135
135
|
"""
|
|
136
136
|
try:
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
137
|
+
with socket() as client:
|
|
138
|
+
client.connect((self.config.socket.host, self.config.socket.port))
|
|
139
|
+
client.sendall(data.encode("utf-8"))
|
|
140
|
+
client.close()
|
|
141
141
|
except Exception: # noqa: BLE001
|
|
142
142
|
return False
|
|
143
143
|
return True
|
|
@@ -9,6 +9,7 @@ from copy import deepcopy
|
|
|
9
9
|
from dataclasses import dataclass
|
|
10
10
|
from enum import Enum
|
|
11
11
|
from typing import Any, Final
|
|
12
|
+
from uuid import uuid4
|
|
12
13
|
|
|
13
14
|
from hardpy.pytest_hardpy.utils.exception import ImageError, WidgetInfoError
|
|
14
15
|
|
|
@@ -315,6 +316,7 @@ class DialogBox:
|
|
|
315
316
|
title_bar (str | None): title bar
|
|
316
317
|
widget (IWidget | None): widget info
|
|
317
318
|
image (ImageComponent | None): image
|
|
319
|
+
font_size (int): font size
|
|
318
320
|
"""
|
|
319
321
|
|
|
320
322
|
def __init__(
|
|
@@ -323,11 +325,19 @@ class DialogBox:
|
|
|
323
325
|
title_bar: str | None = None,
|
|
324
326
|
widget: IWidget | None = None,
|
|
325
327
|
image: ImageComponent | None = None,
|
|
328
|
+
font_size: int = 14,
|
|
326
329
|
) -> None:
|
|
327
330
|
self.widget: IWidget = BaseWidget() if widget is None else widget
|
|
328
331
|
self.image: ImageComponent | None = image
|
|
329
332
|
self.dialog_text: str = dialog_text
|
|
330
333
|
self.title_bar: str | None = title_bar
|
|
334
|
+
self.visible: bool = True
|
|
335
|
+
self.id = str(uuid4())
|
|
336
|
+
self.font_size = font_size
|
|
337
|
+
|
|
338
|
+
if font_size < 1:
|
|
339
|
+
msg = "The 'font_size' argument cannot be less than 1"
|
|
340
|
+
raise ValueError(msg)
|
|
331
341
|
|
|
332
342
|
def to_dict(self) -> dict:
|
|
333
343
|
"""Convert DialogBox to dictionary.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: hardpy
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.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/
|
|
@@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3 :: Only
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.10
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.11
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
22
|
Classifier: Topic :: Software Development :: Libraries
|
|
22
23
|
Classifier: Topic :: Software Development :: Testing
|
|
23
24
|
Classifier: Topic :: Software Development :: Testing :: Acceptance
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
hardpy/__init__.py,sha256=
|
|
1
|
+
hardpy/__init__.py,sha256=jW9I0Zwb1EU-YO0oSehgoGq5ZVCMTqiZeeNOrzdjXdw,1799
|
|
2
2
|
hardpy/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
3
|
hardpy/cli/cli.py,sha256=DJFkqEx5-ft0rpbARDGFb-tIMNlBc76d2hzF_btVDHA,4573
|
|
4
4
|
hardpy/cli/template.py,sha256=a9BZX8uFbIwyGfUex0PWGVirZ6GlkVpfpAdNsP_fqYo,6478
|
|
@@ -6,9 +6,9 @@ hardpy/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
6
6
|
hardpy/common/config.py,sha256=aeSEAnl4FQkHw35JlbKqlC1CbZyhBQphA6YmMuzhWLw,4461
|
|
7
7
|
hardpy/hardpy_panel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
8
|
hardpy/hardpy_panel/api.py,sha256=XQeTsh-TJxizaQYpzFVDHPUG6XOIZJThbxtdyjgEKSo,2992
|
|
9
|
-
hardpy/hardpy_panel/frontend/dist/asset-manifest.json,sha256=
|
|
9
|
+
hardpy/hardpy_panel/frontend/dist/asset-manifest.json,sha256=0XxqgXusGLSpIqqR-rJvKomxSaA5UUQJZuot5VnMuH8,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=tnoelByKKp6G_dA93WG3WSrk6Ln4vBS4e7A5PrcaaSs,656
|
|
12
12
|
hardpy/hardpy_panel/frontend/dist/logo192.png,sha256=E4K7drvhJCg9HcTpRihOXZhVJVBZ7-W97Se-3tDb46o,14485
|
|
13
13
|
hardpy/hardpy_panel/frontend/dist/logo512.png,sha256=-fIMbqX7PYUpheK4kX1C1erRTe_hHZwFQYDLrAbhFRU,34188
|
|
14
14
|
hardpy/hardpy_panel/frontend/dist/manifest.json,sha256=PfmJlN2JMJtHS6OnhU4b4X5wPQC_yRBdjesjoirObSA,502
|
|
@@ -26,9 +26,9 @@ hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.c
|
|
|
26
26
|
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-all-paths.f63155c9.chunk.js.map,sha256=p1xKHRK4AZutkZsQHiWSNU61tYp7I3iUuyLLm3eqkHQ,2833
|
|
27
27
|
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js,sha256=Jl5xm_jQ9IXKhCagHHvnIhwYXb379Q5FFBiqPoKdUIE,605
|
|
28
28
|
hardpy/hardpy_panel/frontend/dist/static/js/blueprint-icons-split-paths-by-size-loader.52a072d3.chunk.js.map,sha256=amJiG2QaJMRR9Y2M0C2soOqd75xdQHhsVKjwrDSIIT0,2224
|
|
29
|
-
hardpy/hardpy_panel/frontend/dist/static/js/main.
|
|
30
|
-
hardpy/hardpy_panel/frontend/dist/static/js/main.
|
|
31
|
-
hardpy/hardpy_panel/frontend/dist/static/js/main.
|
|
29
|
+
hardpy/hardpy_panel/frontend/dist/static/js/main.403e9cd8.js,sha256=ANnIGk2RhGmmh5Xa6RAZCMrsKMfPeDiA9eQ8VFDIoPc,1067460
|
|
30
|
+
hardpy/hardpy_panel/frontend/dist/static/js/main.403e9cd8.js.LICENSE.txt,sha256=ForPNukClWMEP3pF9LMYoU-ve-LsyCH-rYU8eLki_FY,2315
|
|
31
|
+
hardpy/hardpy_panel/frontend/dist/static/js/main.403e9cd8.js.map,sha256=-4lbjH-S9tUmu9k_w_Le5EwB-jpLfVzTSvc4iCZUdTE,5324286
|
|
32
32
|
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.520846c6beb41df528c8.eot,sha256=PTCTrQYNHX2hIPUaYWtOKrI30-iQGXt_EGxq6JCXie0,117628
|
|
33
33
|
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.5c52b39c697f2323ce8b.svg,sha256=lDCQy06aS-9bmhwuFOUs-EdcR8MP2wqwAwky5oamtkQ,509417
|
|
34
34
|
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-16.84db1772f4bfb529f64f.woff,sha256=edyqQN0nw4dNBs1pgr7pQB7nJhhR6T_YfklFcG_fHj0,53344
|
|
@@ -41,18 +41,18 @@ hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.afbadb627d43b7
|
|
|
41
41
|
hardpy/hardpy_panel/frontend/dist/static/media/blueprint-icons-20.e857f5a5132b8bfa71a1.woff,sha256=mQZTxE1PyyAL16VWuASOvXlZFwuI4aCPvbrhfgpdIdU,55356
|
|
42
42
|
hardpy/hardpy_panel/frontend/dist/static/media/logo_smol.5b16f92447a4a9e80331.png,sha256=E4K7drvhJCg9HcTpRihOXZhVJVBZ7-W97Se-3tDb46o,14485
|
|
43
43
|
hardpy/pytest_hardpy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
44
|
-
hardpy/pytest_hardpy/plugin.py,sha256=
|
|
45
|
-
hardpy/pytest_hardpy/pytest_call.py,sha256=
|
|
46
|
-
hardpy/pytest_hardpy/pytest_wrapper.py,sha256=
|
|
44
|
+
hardpy/pytest_hardpy/plugin.py,sha256=nrA1p33RR5Wef1YjqI6olzR8HgBZUCkMahDsJJnN55E,16008
|
|
45
|
+
hardpy/pytest_hardpy/pytest_call.py,sha256=S8v5XHm8iG_KcVeBHlb97aupGSWpadsaH_dfLLGTGEQ,12628
|
|
46
|
+
hardpy/pytest_hardpy/pytest_wrapper.py,sha256=bB1HLeviGDHTIYqclrKb5qEjAB9l_OqWGE688BlpETw,4554
|
|
47
47
|
hardpy/pytest_hardpy/db/__init__.py,sha256=G6y13JPh8HaH2O9E3_LTH_bTUVSgiezQFjDGaNIljec,557
|
|
48
48
|
hardpy/pytest_hardpy/db/base_connector.py,sha256=5a476F5LwvFUfQ4Yc0Q6biacULDrCk8UHPlpc6n0NRQ,1111
|
|
49
49
|
hardpy/pytest_hardpy/db/base_server.py,sha256=XqTff225iIymPYUGGEja9r9WOilVw7ljcAVp1M8VuAI,404
|
|
50
50
|
hardpy/pytest_hardpy/db/base_store.py,sha256=9TA1BAU4_ARm4dxfhLRNWSnGV98z0rr9U1o0BibBe-U,3532
|
|
51
|
-
hardpy/pytest_hardpy/db/const.py,sha256
|
|
51
|
+
hardpy/pytest_hardpy/db/const.py,sha256=-ResQZFdj7aVvr51AduRTEE_H37CzXYAM3ZnXGRqylI,874
|
|
52
52
|
hardpy/pytest_hardpy/db/runstore.py,sha256=tCXWo2AW0er3lbDcCqYbYxOBbINMZNtfnnjlIJpXmIA,949
|
|
53
53
|
hardpy/pytest_hardpy/db/statestore.py,sha256=0sv4AqzwW_J34O-cb7aN3zmgULIVtZRi_qg4XvC2_L0,586
|
|
54
54
|
hardpy/pytest_hardpy/db/schema/__init__.py,sha256=1S73W3PLQt8gX5Y33nbX1JdwLvnrtlKH4cElID3pwuc,263
|
|
55
|
-
hardpy/pytest_hardpy/db/schema/v1.py,sha256=
|
|
55
|
+
hardpy/pytest_hardpy/db/schema/v1.py,sha256=J4FI5P8F7bVlkJFt2O4FXebydcvu9Sf-TLUVyxNkbcE,9420
|
|
56
56
|
hardpy/pytest_hardpy/reporter/__init__.py,sha256=rztpM2HlLUpMOvad0JHbZU4Mk8PDDQyCFXLhpLktGQI,322
|
|
57
57
|
hardpy/pytest_hardpy/reporter/base.py,sha256=o5Pbl89nWLCFd1mYiFdxCQ9d3FOb9oQ3eruYH60H5CQ,2517
|
|
58
58
|
hardpy/pytest_hardpy/reporter/hook_reporter.py,sha256=haK9Wl3oplTtkkU_6OncBGnGPp5JHnzUCGx91GGqbWQ,11251
|
|
@@ -66,14 +66,14 @@ hardpy/pytest_hardpy/result/report_reader/couchdb_reader.py,sha256=GrROwfTVyJaVL
|
|
|
66
66
|
hardpy/pytest_hardpy/utils/__init__.py,sha256=eNvQ5OjiLHLj9Rn2y4hyIexano1CUNhSMhzaw3IUwn4,1471
|
|
67
67
|
hardpy/pytest_hardpy/utils/connection_data.py,sha256=NVDrkGok5fW2c163bwjBN0F9Ja2CZrwSL0bRUrNXTU0,484
|
|
68
68
|
hardpy/pytest_hardpy/utils/const.py,sha256=RuzRmnpvmUylRbj8CxtaVbo7J9kp6rELvjPdfUzMQLU,407
|
|
69
|
-
hardpy/pytest_hardpy/utils/dialog_box.py,sha256=
|
|
69
|
+
hardpy/pytest_hardpy/utils/dialog_box.py,sha256=aUakpMihJTLRaAWm1Ybt2SPYGBL5Gt9pOmhIMYEHIls,9708
|
|
70
70
|
hardpy/pytest_hardpy/utils/exception.py,sha256=kLvJpAppjFsdnhw7zhUHGMLhS946O36H2-F5wrTeVVE,1380
|
|
71
71
|
hardpy/pytest_hardpy/utils/machineid.py,sha256=6JAzUt7KtjTYn8kL9hSMaCQ20U8liH-zDT9v-5Ch7Q8,296
|
|
72
72
|
hardpy/pytest_hardpy/utils/node_info.py,sha256=mA7u1KHHLIq70ZNOOF7NVlxMmfhwGanVyXpBNfBWQDk,4121
|
|
73
73
|
hardpy/pytest_hardpy/utils/progress_calculator.py,sha256=TPl2gG0ZSvMe8otPythhF9hkD6fa6-mJAhy9yI83-yE,1071
|
|
74
74
|
hardpy/pytest_hardpy/utils/singleton.py,sha256=tjUGs48o_vBeVpRsEBZEOTCoCUikpIFmQ1c3rsfymso,948
|
|
75
|
-
hardpy-0.
|
|
76
|
-
hardpy-0.
|
|
77
|
-
hardpy-0.
|
|
78
|
-
hardpy-0.
|
|
79
|
-
hardpy-0.
|
|
75
|
+
hardpy-0.9.0.dist-info/METADATA,sha256=YM0t39uebOYNf94ua2eWab1GFWtAEhNEhOiQKXVkVAw,3686
|
|
76
|
+
hardpy-0.9.0.dist-info/WHEEL,sha256=TJPnKdtrSue7xZ_AVGkp9YXcvDrobsjBds1du3Nx6dc,87
|
|
77
|
+
hardpy-0.9.0.dist-info/entry_points.txt,sha256=nL2sMkKMScNaOE0IPkYnu9Yr-BUswZvGSrwY-SxHY3E,102
|
|
78
|
+
hardpy-0.9.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
79
|
+
hardpy-0.9.0.dist-info/RECORD,,
|