bec-ipython-client 3.70.0__py3-none-any.whl → 3.86.1__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.
Potentially problematic release.
This version of bec-ipython-client might be problematic. Click here for more details.
- .gitignore +3 -0
- PKG-INFO +1 -1
- bec_ipython_client/callbacks/device_progress.py +11 -6
- bec_ipython_client/callbacks/ipython_live_updates.py +46 -18
- bec_ipython_client/callbacks/live_table.py +36 -11
- bec_ipython_client/callbacks/move_device.py +121 -59
- bec_ipython_client/callbacks/utils.py +5 -23
- bec_ipython_client/main.py +71 -6
- bec_ipython_client/signals.py +9 -3
- {bec_ipython_client-3.70.0.dist-info → bec_ipython_client-3.86.1.dist-info}/METADATA +1 -1
- bec_ipython_client-3.86.1.dist-info/RECORD +44 -0
- {bec_ipython_client-3.70.0.dist-info → bec_ipython_client-3.86.1.dist-info}/WHEEL +1 -1
- demo.py +2 -1
- pyproject.toml +1 -1
- tests/client_tests/conftest.py +19 -0
- tests/client_tests/test_bec_client.py +31 -0
- tests/client_tests/test_ipython_live_updates.py +259 -68
- tests/client_tests/test_live_table.py +0 -1
- tests/client_tests/test_move_callback.py +112 -70
- tests/end-2-end/_ensure_requirements_container.py +3 -3
- tests/end-2-end/test_procedures_e2e.py +26 -17
- tests/end-2-end/test_scans_e2e.py +19 -13
- tests/end-2-end/test_scans_lib_e2e.py +18 -12
- bec_ipython_client-3.70.0.dist-info/RECORD +0 -43
- {bec_ipython_client-3.70.0.dist-info → bec_ipython_client-3.86.1.dist-info}/entry_points.txt +0 -0
|
@@ -8,14 +8,14 @@ image_name = (
|
|
|
8
8
|
)
|
|
9
9
|
podman = PodmanCliUtils()
|
|
10
10
|
|
|
11
|
-
for i in range(1,
|
|
11
|
+
for i in range(1, 6):
|
|
12
12
|
try:
|
|
13
13
|
output = podman._run_and_capture_error("podman", "pull", image_name)
|
|
14
14
|
print("successfully pulled requirements image for current version")
|
|
15
15
|
exit(0)
|
|
16
16
|
except ProcedureWorkerError as e:
|
|
17
17
|
print(e)
|
|
18
|
-
print("retrying in
|
|
19
|
-
sleep(
|
|
18
|
+
print("retrying in 5 minutes...")
|
|
19
|
+
sleep(5 * 60)
|
|
20
20
|
print(f"No more retries. Check if {image_name} actually exists!")
|
|
21
21
|
exit(1)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import time
|
|
4
|
+
from dataclasses import dataclass
|
|
4
5
|
from importlib.metadata import version
|
|
5
6
|
from typing import TYPE_CHECKING, Callable, Generator
|
|
6
7
|
from unittest.mock import MagicMock, patch
|
|
@@ -11,7 +12,7 @@ from bec_ipython_client.main import BECIPythonClient
|
|
|
11
12
|
from bec_lib import messages
|
|
12
13
|
from bec_lib.endpoints import MessageEndpoints
|
|
13
14
|
from bec_lib.logger import bec_logger
|
|
14
|
-
from bec_server.scan_server.procedures.constants import
|
|
15
|
+
from bec_server.scan_server.procedures.constants import _CONTAINER, _WORKER
|
|
15
16
|
from bec_server.scan_server.procedures.container_utils import get_backend
|
|
16
17
|
from bec_server.scan_server.procedures.container_worker import ContainerProcedureWorker
|
|
17
18
|
from bec_server.scan_server.procedures.manager import ProcedureManager
|
|
@@ -28,6 +29,15 @@ logger = bec_logger.logger
|
|
|
28
29
|
pytestmark = pytest.mark.random_order(disabled=True)
|
|
29
30
|
|
|
30
31
|
|
|
32
|
+
@dataclass(frozen=True)
|
|
33
|
+
class PATCHED_CONSTANTS:
|
|
34
|
+
WORKER = _WORKER()
|
|
35
|
+
CONTAINER = _CONTAINER()
|
|
36
|
+
MANAGER_SHUTDOWN_TIMEOUT_S = 2
|
|
37
|
+
BEC_VERSION = version("bec_lib")
|
|
38
|
+
REDIS_HOST = "localhost"
|
|
39
|
+
|
|
40
|
+
|
|
31
41
|
@pytest.fixture
|
|
32
42
|
def client_logtool_and_manager(
|
|
33
43
|
bec_ipython_client_fixture_with_logtool: tuple[BECIPythonClient, "LogTestTool"],
|
|
@@ -52,7 +62,7 @@ def _wait_while(cond: Callable[[], bool], timeout_s):
|
|
|
52
62
|
def test_building_worker_image():
|
|
53
63
|
podman_utils = get_backend()
|
|
54
64
|
build = podman_utils.build_worker_image()
|
|
55
|
-
assert len(build._command_output.splitlines()[-1]) == 64
|
|
65
|
+
assert len(build._command_output.splitlines()[-1]) == 64 # type: ignore
|
|
56
66
|
assert podman_utils.image_exists(f"bec_procedure_worker:v{version('bec_lib')}")
|
|
57
67
|
|
|
58
68
|
|
|
@@ -62,7 +72,7 @@ def test_procedure_runner_spawns_worker(
|
|
|
62
72
|
client_logtool_and_manager: tuple[BECIPythonClient, "LogTestTool", ProcedureManager],
|
|
63
73
|
):
|
|
64
74
|
client, _, manager = client_logtool_and_manager
|
|
65
|
-
assert manager.
|
|
75
|
+
assert manager._active_workers == {}
|
|
66
76
|
endpoint = MessageEndpoints.procedure_request()
|
|
67
77
|
msg = messages.ProcedureRequestMessage(
|
|
68
78
|
identifier="sleep", args_kwargs=((), {"time_s": 2}), queue="test"
|
|
@@ -77,21 +87,22 @@ def test_procedure_runner_spawns_worker(
|
|
|
77
87
|
manager.add_callback("test", cb)
|
|
78
88
|
client.connector.xadd(topic=endpoint, msg_dict=msg.model_dump())
|
|
79
89
|
|
|
80
|
-
_wait_while(lambda: manager.
|
|
81
|
-
_wait_while(lambda: manager.
|
|
90
|
+
_wait_while(lambda: manager._active_workers == {}, 5)
|
|
91
|
+
_wait_while(lambda: manager._active_workers != {}, 20)
|
|
82
92
|
|
|
83
93
|
assert logs != []
|
|
84
94
|
|
|
85
95
|
|
|
86
96
|
@pytest.mark.timeout(100)
|
|
87
97
|
@patch("bec_server.scan_server.procedures.manager.procedure_registry.is_registered", lambda _: True)
|
|
98
|
+
@patch("bec_server.scan_server.procedures.container_worker.PROCEDURE", PATCHED_CONSTANTS())
|
|
88
99
|
def test_happy_path_container_procedure_runner(
|
|
89
100
|
client_logtool_and_manager: tuple[BECIPythonClient, "LogTestTool", ProcedureManager],
|
|
90
101
|
):
|
|
91
102
|
test_args = (1, 2, 3)
|
|
92
103
|
test_kwargs = {"a": "b", "c": "d"}
|
|
93
104
|
client, logtool, manager = client_logtool_and_manager
|
|
94
|
-
assert manager.
|
|
105
|
+
assert manager._active_workers == {}
|
|
95
106
|
conn = client.connector
|
|
96
107
|
endpoint = MessageEndpoints.procedure_request()
|
|
97
108
|
msg = messages.ProcedureRequestMessage(
|
|
@@ -99,12 +110,15 @@ def test_happy_path_container_procedure_runner(
|
|
|
99
110
|
)
|
|
100
111
|
conn.xadd(topic=endpoint, msg_dict=msg.model_dump())
|
|
101
112
|
|
|
102
|
-
_wait_while(lambda: manager.
|
|
103
|
-
_wait_while(lambda: manager.
|
|
113
|
+
_wait_while(lambda: manager._active_workers == {}, 5)
|
|
114
|
+
_wait_while(lambda: manager._active_workers != {}, 20)
|
|
104
115
|
|
|
105
116
|
logtool.fetch()
|
|
106
117
|
assert logtool.is_present_in_any_message("procedure accepted: True, message:")
|
|
107
|
-
assert logtool.is_present_in_any_message(
|
|
118
|
+
assert logtool.is_present_in_any_message(
|
|
119
|
+
"ContainerWorker started container for queue primary"
|
|
120
|
+
), f"Log content relating to procedures: {manager._logs}"
|
|
121
|
+
|
|
108
122
|
res, msg = logtool.are_present_in_order(
|
|
109
123
|
[
|
|
110
124
|
"Container worker 'primary' status update: IDLE",
|
|
@@ -114,12 +128,7 @@ def test_happy_path_container_procedure_runner(
|
|
|
114
128
|
]
|
|
115
129
|
)
|
|
116
130
|
assert res, f"failed on {msg}"
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
f"Builtin procedure log_message_args_kwargs called with args: {test_args} and kwargs: {test_kwargs}",
|
|
121
|
-
"Container worker 'primary' status update: IDLE",
|
|
122
|
-
"Container worker 'primary' status update: FINISHED",
|
|
123
|
-
]
|
|
131
|
+
|
|
132
|
+
assert logtool.is_present_in_any_message(
|
|
133
|
+
f"Builtin procedure log_message_args_kwargs called with args: {test_args} and kwargs: {test_kwargs}"
|
|
124
134
|
)
|
|
125
|
-
assert res, f"failed on {msg}"
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import _thread
|
|
2
4
|
import io
|
|
3
5
|
import os
|
|
4
6
|
import threading
|
|
5
7
|
import time
|
|
6
8
|
from contextlib import redirect_stdout
|
|
9
|
+
from typing import TYPE_CHECKING
|
|
7
10
|
from unittest.mock import PropertyMock
|
|
8
11
|
|
|
9
12
|
import h5py
|
|
@@ -19,6 +22,9 @@ from bec_lib.logger import bec_logger
|
|
|
19
22
|
|
|
20
23
|
logger = bec_logger.logger
|
|
21
24
|
|
|
25
|
+
if TYPE_CHECKING: # pragma: no cover
|
|
26
|
+
from bec_ipython_client.main import BECIPythonClient
|
|
27
|
+
|
|
22
28
|
# pylint: disable=protected-access
|
|
23
29
|
|
|
24
30
|
|
|
@@ -201,13 +207,13 @@ def test_mv_scan_mv(bec_ipython_client_fixture):
|
|
|
201
207
|
|
|
202
208
|
|
|
203
209
|
@pytest.mark.timeout(100)
|
|
204
|
-
def test_scan_abort(bec_ipython_client_fixture):
|
|
210
|
+
def test_scan_abort(bec_ipython_client_fixture: BECIPythonClient):
|
|
205
211
|
def send_abort(bec):
|
|
206
212
|
while True:
|
|
207
213
|
current_scan_info = bec.queue.scan_storage.current_scan_info
|
|
208
214
|
if not current_scan_info:
|
|
209
215
|
continue
|
|
210
|
-
status = current_scan_info.
|
|
216
|
+
status = current_scan_info.status.lower()
|
|
211
217
|
if status not in ["running", "deferred_pause"]:
|
|
212
218
|
continue
|
|
213
219
|
if bec.queue.scan_storage.current_scan is None:
|
|
@@ -217,7 +223,7 @@ def test_scan_abort(bec_ipython_client_fixture):
|
|
|
217
223
|
break
|
|
218
224
|
while True:
|
|
219
225
|
queue = bec.queue.queue_storage.current_scan_queue
|
|
220
|
-
if queue["primary"]
|
|
226
|
+
if queue["primary"].info[0].status == "DEFERRED_PAUSE":
|
|
221
227
|
break
|
|
222
228
|
time.sleep(0.5)
|
|
223
229
|
_thread.interrupt_main()
|
|
@@ -241,7 +247,7 @@ def test_scan_abort(bec_ipython_client_fixture):
|
|
|
241
247
|
time.sleep(0.5)
|
|
242
248
|
|
|
243
249
|
current_queue = bec.queue.queue_storage.current_scan_queue["primary"]
|
|
244
|
-
while current_queue
|
|
250
|
+
while current_queue.info or current_queue.status != "RUNNING":
|
|
245
251
|
time.sleep(0.5)
|
|
246
252
|
current_queue = bec.queue.queue_storage.current_scan_queue["primary"]
|
|
247
253
|
|
|
@@ -307,7 +313,7 @@ def test_queued_scan(bec_ipython_client_fixture):
|
|
|
307
313
|
while len(scan2.scan.live_data) != 50:
|
|
308
314
|
time.sleep(0.5)
|
|
309
315
|
current_queue = bec.queue.queue_storage.current_scan_queue["primary"]
|
|
310
|
-
while current_queue
|
|
316
|
+
while current_queue.info or current_queue.status != "RUNNING":
|
|
311
317
|
time.sleep(0.5)
|
|
312
318
|
current_queue = bec.queue.queue_storage.current_scan_queue["primary"]
|
|
313
319
|
scan_number_end = bec.queue.next_scan_number
|
|
@@ -356,7 +362,7 @@ def test_scan_restart(bec_ipython_client_fixture):
|
|
|
356
362
|
scan2.wait()
|
|
357
363
|
|
|
358
364
|
current_queue = bec.queue.queue_storage.current_scan_queue["primary"]
|
|
359
|
-
while current_queue
|
|
365
|
+
while current_queue.info or current_queue.status != "RUNNING":
|
|
360
366
|
time.sleep(0.5)
|
|
361
367
|
current_queue = bec.queue.queue_storage.current_scan_queue["primary"]
|
|
362
368
|
scan_number_end = bec.queue.next_scan_number
|
|
@@ -364,7 +370,7 @@ def test_scan_restart(bec_ipython_client_fixture):
|
|
|
364
370
|
|
|
365
371
|
|
|
366
372
|
@pytest.mark.timeout(100)
|
|
367
|
-
def test_scan_observer_repeat_queued(bec_ipython_client_fixture):
|
|
373
|
+
def test_scan_observer_repeat_queued(bec_ipython_client_fixture: BECIPythonClient):
|
|
368
374
|
bec = bec_ipython_client_fixture
|
|
369
375
|
bec.metadata.update({"unit_test": "test_scan_observer_repeat_queued"})
|
|
370
376
|
scans = bec.scans
|
|
@@ -396,7 +402,7 @@ def test_scan_observer_repeat_queued(bec_ipython_client_fixture):
|
|
|
396
402
|
scan2.wait()
|
|
397
403
|
|
|
398
404
|
current_queue = bec.queue.queue_storage.current_scan_queue["primary"]
|
|
399
|
-
while current_queue
|
|
405
|
+
while current_queue.info or current_queue.status != "RUNNING":
|
|
400
406
|
time.sleep(0.5)
|
|
401
407
|
current_queue = bec.queue.queue_storage.current_scan_queue["primary"]
|
|
402
408
|
scan_number_end = bec.queue.next_scan_number
|
|
@@ -433,7 +439,7 @@ def test_scan_observer_repeat(bec_ipython_client_fixture):
|
|
|
433
439
|
scan1.wait()
|
|
434
440
|
|
|
435
441
|
current_queue = bec.queue.queue_storage.current_scan_queue["primary"]
|
|
436
|
-
while current_queue
|
|
442
|
+
while current_queue.info or current_queue.status != "RUNNING":
|
|
437
443
|
time.sleep(0.5)
|
|
438
444
|
current_queue = bec.queue.queue_storage.current_scan_queue["primary"]
|
|
439
445
|
while True:
|
|
@@ -737,12 +743,12 @@ def test_update_config(bec_ipython_client_fixture):
|
|
|
737
743
|
bec = bec_ipython_client_fixture
|
|
738
744
|
bec.metadata.update({"unit_test": "test_update_config"})
|
|
739
745
|
demo_config_path = os.path.join(os.path.dirname(configs.__file__), "demo_config.yaml")
|
|
740
|
-
config = bec.
|
|
746
|
+
config = bec.device_manager.config_helper._load_config_from_file(demo_config_path)
|
|
741
747
|
config.pop("samx")
|
|
742
|
-
bec.
|
|
748
|
+
bec.device_manager.config_helper.send_config_request(action="set", config=config)
|
|
743
749
|
assert "samx" not in bec.device_manager.devices
|
|
744
|
-
config = bec.
|
|
745
|
-
bec.
|
|
750
|
+
config = bec.device_manager.config_helper._load_config_from_file(demo_config_path)
|
|
751
|
+
bec.device_manager.config_helper.send_config_request(action="set", config=config)
|
|
746
752
|
|
|
747
753
|
|
|
748
754
|
@pytest.mark.timeout(100)
|
|
@@ -322,7 +322,9 @@ def test_config_reload(
|
|
|
322
322
|
num_devices = len(bec.device_manager.devices)
|
|
323
323
|
if raises_error:
|
|
324
324
|
with pytest.raises(DeviceConfigError):
|
|
325
|
-
bec.config.update_session_with_file(
|
|
325
|
+
bec.config.update_session_with_file(
|
|
326
|
+
runtime_config_file_path, force=True, validate=False
|
|
327
|
+
)
|
|
326
328
|
if deletes_config:
|
|
327
329
|
assert len(bec.device_manager.devices) == 0
|
|
328
330
|
elif disabled_device:
|
|
@@ -330,7 +332,7 @@ def test_config_reload(
|
|
|
330
332
|
else:
|
|
331
333
|
assert len(bec.device_manager.devices) == num_devices
|
|
332
334
|
else:
|
|
333
|
-
bec.config.update_session_with_file(runtime_config_file_path)
|
|
335
|
+
bec.config.update_session_with_file(runtime_config_file_path, force=True, validate=False)
|
|
334
336
|
assert len(bec.device_manager.devices) == 2
|
|
335
337
|
for dev in disabled_device:
|
|
336
338
|
assert bec.device_manager.devices[dev].enabled is False
|
|
@@ -375,7 +377,7 @@ def test_config_reload_with_describe_failure(bec_test_config_file_path, bec_clie
|
|
|
375
377
|
f.write(yaml.dump(config))
|
|
376
378
|
|
|
377
379
|
with pytest.raises(DeviceConfigError):
|
|
378
|
-
bec.config.update_session_with_file(runtime_config_file_path)
|
|
380
|
+
bec.config.update_session_with_file(runtime_config_file_path, force=True, validate=False)
|
|
379
381
|
|
|
380
382
|
assert len(bec.device_manager.devices) == 2
|
|
381
383
|
assert bec.device_manager.devices["eyefoc"].enabled is True
|
|
@@ -386,7 +388,7 @@ def test_config_reload_with_describe_failure(bec_test_config_file_path, bec_clie
|
|
|
386
388
|
f"e2e_test_hexapod_fail", messages.DeviceStatusMessage(device="hexapod", status=0)
|
|
387
389
|
)
|
|
388
390
|
|
|
389
|
-
bec.config.update_session_with_file(runtime_config_file_path)
|
|
391
|
+
bec.config.update_session_with_file(runtime_config_file_path, force=True)
|
|
390
392
|
assert len(bec.device_manager.devices) == 2
|
|
391
393
|
assert bec.device_manager.devices["eyefoc"].enabled is True
|
|
392
394
|
assert bec.device_manager.devices["hexapod"].enabled is True
|
|
@@ -412,13 +414,13 @@ def test_config_add_remove_device(bec_client_lib):
|
|
|
412
414
|
"readOnly": False,
|
|
413
415
|
}
|
|
414
416
|
}
|
|
415
|
-
bec.
|
|
417
|
+
bec.device_manager.config_helper.send_config_request(action="add", config=config)
|
|
416
418
|
with pytest.raises(DeviceConfigError) as config_error:
|
|
417
|
-
bec.
|
|
419
|
+
bec.device_manager.config_helper.send_config_request(action="add", config=config)
|
|
418
420
|
assert config_error.match("Device new_device already exists")
|
|
419
421
|
assert "new_device" in dev
|
|
420
422
|
|
|
421
|
-
bec.
|
|
423
|
+
bec.device_manager.config_helper.send_config_request(action="remove", config={"new_device": {}})
|
|
422
424
|
assert "new_device" not in dev
|
|
423
425
|
|
|
424
426
|
device_config_msg = bec.connector.get(MessageEndpoints.device_config())
|
|
@@ -429,7 +431,7 @@ def test_config_add_remove_device(bec_client_lib):
|
|
|
429
431
|
|
|
430
432
|
config["new_device"]["deviceClass"] = "ophyd_devices.doesnt_exist"
|
|
431
433
|
with pytest.raises(DeviceConfigError) as config_error:
|
|
432
|
-
bec.
|
|
434
|
+
bec.device_manager.config_helper.send_config_request(action="add", config=config)
|
|
433
435
|
assert config_error.match("module 'ophyd_devices' has no attribute 'doesnt_exist'")
|
|
434
436
|
assert "new_device" not in dev
|
|
435
437
|
assert "samx" in dev
|
|
@@ -461,17 +463,21 @@ def test_cached_device_readout(bec_client_lib):
|
|
|
461
463
|
dev = bec.device_manager.devices
|
|
462
464
|
|
|
463
465
|
dev.samx.setpoint.put(5)
|
|
464
|
-
data = dev.samx.setpoint.get()
|
|
466
|
+
data = dev.samx.setpoint.get(cached=True)
|
|
465
467
|
assert data == 5
|
|
466
468
|
|
|
467
|
-
orig_velocity = dev.samx.velocity.get()
|
|
469
|
+
orig_velocity = dev.samx.velocity.get(cached=True)
|
|
468
470
|
dev.samx.velocity.put(10)
|
|
469
|
-
data = dev.samx.velocity.get()
|
|
471
|
+
data = dev.samx.velocity.get(cached=True)
|
|
470
472
|
assert data == 10
|
|
471
473
|
|
|
472
|
-
config = dev.samx.read_configuration()
|
|
474
|
+
config = dev.samx.read_configuration(cached=True)
|
|
473
475
|
assert config["samx_velocity"]["value"] == 10
|
|
474
476
|
|
|
477
|
+
dev.samx.velocity.set(20).wait()
|
|
478
|
+
data = dev.samx.velocity.get(cached=True)
|
|
479
|
+
assert data == 20
|
|
480
|
+
|
|
475
481
|
dev.samx.velocity.put(orig_velocity)
|
|
476
482
|
|
|
477
483
|
data = dev.hexapod.x.readback.read()
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
.gitignore,sha256=UmJ0gTRAPp4EI1A6tb9Pi-k5uxDIb_NWJU9ye6AW-8Y,3306
|
|
2
|
-
PKG-INFO,sha256=8InaX9sdNJR4GYyFYQ4MxSmsiSYuXiUO8FTYFB5ruBU,1052
|
|
3
|
-
demo.py,sha256=TE-niyXPUEAP-GaL-QRBPgnaxfXqBmTsBiKUxl3F_VQ,7053
|
|
4
|
-
pyproject.toml,sha256=Tnvc9IgRWhxdkfFa6p9UsMPkkpapIOPzmMV6ocwsdnY,1229
|
|
5
|
-
bec_ipython_client/__init__.py,sha256=ihd_V8I7Qo0MWKMo7bcvPf-ZyUQqkcNf8IAWLJKiFJE,79
|
|
6
|
-
bec_ipython_client/beamline_mixin.py,sha256=scMWIFbHJajyECzbwEVKyQUGjpqA9C_KiU2M6FuRH_Q,1067
|
|
7
|
-
bec_ipython_client/bec_magics.py,sha256=Rz2aXkUCeAV_VxdXqLUNHh8T44kSH9ha83OiEtdptzI,2792
|
|
8
|
-
bec_ipython_client/bec_startup.py,sha256=GGlHyxnSCQfYF5n-pYq2ic0pSyW5zvnT2PAlI5kY77w,1930
|
|
9
|
-
bec_ipython_client/main.py,sha256=OQeDX1XxavvKo-0lpM8-Pd8tkMIS09DG7fqeCjsIEHw,11237
|
|
10
|
-
bec_ipython_client/prettytable.py,sha256=TnhGPGuU0XEvnIYJ1UfTEwadcowFW4rqJW8z_Sm0EDw,2534
|
|
11
|
-
bec_ipython_client/progressbar.py,sha256=aDKYjzXmGSwa82ewm59V8WSuqVQz9GiZPx5G65fEwpk,11090
|
|
12
|
-
bec_ipython_client/signals.py,sha256=mbThPo6h3mQ6RFRm9viETDMC_unFa7QxiymCdM_ZK7U,4194
|
|
13
|
-
bec_ipython_client/callbacks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
-
bec_ipython_client/callbacks/device_progress.py,sha256=y3GFSlCD-etOIrLJkX2ozxEyCNRMaRAaTdZmN8xOcjk,2385
|
|
15
|
-
bec_ipython_client/callbacks/ipython_live_updates.py,sha256=tcr3ATyg46NAS3yQHhdOS7KFJnfVxri36PuKpILjyqU,10322
|
|
16
|
-
bec_ipython_client/callbacks/live_table.py,sha256=2FjNSTC5HbNgg-aNJcEfNZRnhIUqJoRRTthU3L1UKD4,13350
|
|
17
|
-
bec_ipython_client/callbacks/move_device.py,sha256=FXCztPGqKNmaSKs9Q13y7syZJs57IZo4mJH6GTOIbOU,5863
|
|
18
|
-
bec_ipython_client/callbacks/utils.py,sha256=AEEzsfD9S2ZMuJA4yAxy9gMa1iPMCxQ3zr7ZDO01bHE,5702
|
|
19
|
-
bec_ipython_client/high_level_interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
-
bec_ipython_client/high_level_interfaces/bec_hli.py,sha256=G1eF-lbLEDuN2mr_AYSxhhGb4LT6P72g0a4sU9M9zgk,1221
|
|
21
|
-
bec_ipython_client/high_level_interfaces/spec_hli.py,sha256=z7WtjiC4LtMfKJn12SbguHPCLqbAsZNfUDyiUW0LOiU,5818
|
|
22
|
-
bec_ipython_client/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
|
-
bec_ipython_client/plugins/SLS/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
-
bec_ipython_client/plugins/SLS/sls_info.py,sha256=93GU_XNRDsCO0ZvUrCf_SWnUMJ1FlRTJSuXXh_bYJ30,4934
|
|
25
|
-
bec_ipython_client/plugins/XTreme/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
-
bec_ipython_client/plugins/XTreme/x-treme.py,sha256=ZKI_EEPYyWW-sdrK9DIllb81aeObc1O3fU1eWqipjTQ,3631
|
|
27
|
-
bec_ipython_client/plugins/flomni/flomni_config.yaml,sha256=bCN1VKCzF6tw24HYeUE2b81kXMXzhEd69Ea8_q8Ywfk,6184
|
|
28
|
-
tests/conftest.py,sha256=4yzGYqs8EVOxxY9Bu-yGbzmOpzG9dxs3cwSCzjmRziQ,233
|
|
29
|
-
tests/client_tests/test_beamline_mixins.py,sha256=8Ws0bmzl2gSW0VuOVu80_JbYNb5Y-htchmrrptwjwDo,4611
|
|
30
|
-
tests/client_tests/test_bec_client.py,sha256=pMpjDpgdeynHMJXZkXCMYERm5OEwu4VR50ID28eNFhc,7722
|
|
31
|
-
tests/client_tests/test_device_progress.py,sha256=GEw2g8MQZnv5mxABEZlxBmaMpxVS33wogaYohFolDEs,2353
|
|
32
|
-
tests/client_tests/test_ipython_live_updates.py,sha256=HpA16Mx0WdseqlfP0FojlAd6VfvjnwAUReDkItZVYWs,6081
|
|
33
|
-
tests/client_tests/test_live_table.py,sha256=5ZtCWDYBm_Vxg1lw6Nuj5qpmtY4VPGCYdX-cY00dSf8,18178
|
|
34
|
-
tests/client_tests/test_move_callback.py,sha256=e5c14pa9tUsMPgNhI9m7vrml5TKEAmMAQKLuiZPftDw,7026
|
|
35
|
-
tests/client_tests/test_pretty_table.py,sha256=uQ-KPb3RXoCFE_t1IrpkT6kZAoqW7pFXxbFc445sX0Y,469
|
|
36
|
-
tests/end-2-end/_ensure_requirements_container.py,sha256=iAcTHqudgJMh7yS9kmfN1bqfqUgvj6ZG-LyuJVIfgFE,722
|
|
37
|
-
tests/end-2-end/test_procedures_e2e.py,sha256=3CPzjW3VpsSU8GKVP814SSvLZ0c7bBtPB_VtX725TCY,4737
|
|
38
|
-
tests/end-2-end/test_scans_e2e.py,sha256=CxlXjQrzDJebaoZObt_oYx41wbnHLuJLSjKlno4u2B4,30981
|
|
39
|
-
tests/end-2-end/test_scans_lib_e2e.py,sha256=bUxKX7JRRQYtjgyOX1LktpcxOE8aZbQ6Ut_alKQhGYg,19063
|
|
40
|
-
bec_ipython_client-3.70.0.dist-info/METADATA,sha256=8InaX9sdNJR4GYyFYQ4MxSmsiSYuXiUO8FTYFB5ruBU,1052
|
|
41
|
-
bec_ipython_client-3.70.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
42
|
-
bec_ipython_client-3.70.0.dist-info/entry_points.txt,sha256=oQUXYY0jjD9ZvKPHwaGn2wkUIWpDZM8L4ixDA3RlBWE,53
|
|
43
|
-
bec_ipython_client-3.70.0.dist-info/RECORD,,
|
{bec_ipython_client-3.70.0.dist-info → bec_ipython_client-3.86.1.dist-info}/entry_points.txt
RENAMED
|
File without changes
|