bec-ipython-client 3.80.1__py3-none-any.whl → 3.81.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.
PKG-INFO CHANGED
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bec_ipython_client
3
- Version: 3.80.1
3
+ Version: 3.81.1
4
4
  Summary: BEC IPython client
5
5
  Project-URL: Bug Tracker, https://github.com/bec-project/bec/issues
6
6
  Project-URL: Homepage, https://github.com/bec-project/bec
@@ -13,6 +13,7 @@ import redis
13
13
  import redis.exceptions
14
14
  from IPython.terminal.ipapp import TerminalIPythonApp
15
15
  from IPython.terminal.prompts import Prompts, Token
16
+ from pydantic import ValidationError
16
17
  from rich.console import Console
17
18
  from rich.panel import Panel
18
19
  from rich.text import Text
@@ -30,6 +31,7 @@ from bec_lib.client import BECClient
30
31
  from bec_lib.logger import bec_logger
31
32
  from bec_lib.redis_connector import RedisConnector
32
33
  from bec_lib.service_config import ServiceConfig
34
+ from bec_lib.utils.pydantic_pretty_print import pretty_print_pydantic_validation_error
33
35
 
34
36
  logger = bec_logger.logger
35
37
 
@@ -248,6 +250,9 @@ def _ip_exception_handler(
248
250
  evalue.pretty_print()
249
251
  print("For more details, use 'bec.show_last_alarm()'")
250
252
  return
253
+ if issubclass(etype, ValidationError):
254
+ pretty_print_pydantic_validation_error(evalue)
255
+ return
251
256
  if issubclass(etype, (ScanInterruption, DeviceConfigError)):
252
257
  print(f"\x1b[31m {evalue.__class__.__name__}:\x1b[0m {evalue}")
253
258
  return
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bec_ipython_client
3
- Version: 3.80.1
3
+ Version: 3.81.1
4
4
  Summary: BEC IPython client
5
5
  Project-URL: Bug Tracker, https://github.com/bec-project/bec/issues
6
6
  Project-URL: Homepage, https://github.com/bec-project/bec
@@ -1,12 +1,12 @@
1
1
  .gitignore,sha256=XxC6jyyftTo2CLtm4K8axuNPYwA9Wgaz2R93WhX8bTQ,3364
2
- PKG-INFO,sha256=T3KVSOZ1vVlNFJ5iI50vT-ltY8bvsnMLTShLqSsVY6c,1052
2
+ PKG-INFO,sha256=xMt50LXDwn0e5sbMCpOJPLHto0M0QlxVYdq_xPdDBjI,1052
3
3
  demo.py,sha256=AquJB-0Tu2bIEFpcJ0Q3RUBt1xldqS6GgU5CjOAg_ww,7083
4
- pyproject.toml,sha256=YqhKbWHRHsStxWgriASVFFBD5PxaUuYTZPnkXrED4pY,1229
4
+ pyproject.toml,sha256=TL7yZ1FyhACzBV-RxBDrNqJF2OhY1ytGa-XGQrmPTSo,1229
5
5
  bec_ipython_client/__init__.py,sha256=ihd_V8I7Qo0MWKMo7bcvPf-ZyUQqkcNf8IAWLJKiFJE,79
6
6
  bec_ipython_client/beamline_mixin.py,sha256=scMWIFbHJajyECzbwEVKyQUGjpqA9C_KiU2M6FuRH_Q,1067
7
7
  bec_ipython_client/bec_magics.py,sha256=Rz2aXkUCeAV_VxdXqLUNHh8T44kSH9ha83OiEtdptzI,2792
8
8
  bec_ipython_client/bec_startup.py,sha256=GGlHyxnSCQfYF5n-pYq2ic0pSyW5zvnT2PAlI5kY77w,1930
9
- bec_ipython_client/main.py,sha256=DSUyV4Lzc7PRD-Ag_07Ap-1VO3r_SktV1zpWKKqSUr8,13306
9
+ bec_ipython_client/main.py,sha256=XxSaiRuvDPKRzM3yuPz3FW5I0wnfyL2SgEfEG3VrDJg,13543
10
10
  bec_ipython_client/prettytable.py,sha256=TnhGPGuU0XEvnIYJ1UfTEwadcowFW4rqJW8z_Sm0EDw,2534
11
11
  bec_ipython_client/progressbar.py,sha256=aDKYjzXmGSwa82ewm59V8WSuqVQz9GiZPx5G65fEwpk,11090
12
12
  bec_ipython_client/signals.py,sha256=mbThPo6h3mQ6RFRm9viETDMC_unFa7QxiymCdM_ZK7U,4194
@@ -36,9 +36,9 @@ tests/client_tests/test_move_callback.py,sha256=bUCcWoz_tc-yRAtwmEUMrKE_qKwatop_
36
36
  tests/client_tests/test_pretty_table.py,sha256=uQ-KPb3RXoCFE_t1IrpkT6kZAoqW7pFXxbFc445sX0Y,469
37
37
  tests/end-2-end/_ensure_requirements_container.py,sha256=RT2a5cUZnXtMjJRlPImGzgyX-KJPLiav5WSp_l3wzv8,725
38
38
  tests/end-2-end/test_procedures_e2e.py,sha256=xjczbB33Cf5pDLe1KWcalRRBrSxOQ3cbV3s3w3GsC_A,4922
39
- tests/end-2-end/test_scans_e2e.py,sha256=CxlXjQrzDJebaoZObt_oYx41wbnHLuJLSjKlno4u2B4,30981
40
- tests/end-2-end/test_scans_lib_e2e.py,sha256=-yYW-bm2jmXg4QYa6jSQFRlaLa81zeUvP7oTodccWg0,19213
41
- bec_ipython_client-3.80.1.dist-info/METADATA,sha256=T3KVSOZ1vVlNFJ5iI50vT-ltY8bvsnMLTShLqSsVY6c,1052
42
- bec_ipython_client-3.80.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
43
- bec_ipython_client-3.80.1.dist-info/entry_points.txt,sha256=oQUXYY0jjD9ZvKPHwaGn2wkUIWpDZM8L4ixDA3RlBWE,53
44
- bec_ipython_client-3.80.1.dist-info/RECORD,,
39
+ tests/end-2-end/test_scans_e2e.py,sha256=GMStotxqu24794TxIFc55PCtOjuG2qbkmibcUj7r-DI,31069
40
+ tests/end-2-end/test_scans_lib_e2e.py,sha256=dqs0ojkyQWStIQbqABq9mQrjqQyE43gr37VPhxvQ8b8,19427
41
+ bec_ipython_client-3.81.1.dist-info/METADATA,sha256=xMt50LXDwn0e5sbMCpOJPLHto0M0QlxVYdq_xPdDBjI,1052
42
+ bec_ipython_client-3.81.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
43
+ bec_ipython_client-3.81.1.dist-info/entry_points.txt,sha256=oQUXYY0jjD9ZvKPHwaGn2wkUIWpDZM8L4ixDA3RlBWE,53
44
+ bec_ipython_client-3.81.1.dist-info/RECORD,,
pyproject.toml CHANGED
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_ipython_client"
7
- version = "3.80.1"
7
+ version = "3.81.1"
8
8
  description = "BEC IPython client"
9
9
  requires-python = ">=3.11"
10
10
  classifiers = [
@@ -737,12 +737,12 @@ def test_update_config(bec_ipython_client_fixture):
737
737
  bec = bec_ipython_client_fixture
738
738
  bec.metadata.update({"unit_test": "test_update_config"})
739
739
  demo_config_path = os.path.join(os.path.dirname(configs.__file__), "demo_config.yaml")
740
- config = bec.config._load_config_from_file(demo_config_path)
740
+ config = bec.device_manager.config_helper._load_config_from_file(demo_config_path)
741
741
  config.pop("samx")
742
- bec.config.send_config_request(action="set", config=config)
742
+ bec.device_manager.config_helper.send_config_request(action="set", config=config)
743
743
  assert "samx" not in bec.device_manager.devices
744
- config = bec.config._load_config_from_file(demo_config_path)
745
- bec.config.send_config_request(action="set", config=config)
744
+ config = bec.device_manager.config_helper._load_config_from_file(demo_config_path)
745
+ bec.device_manager.config_helper.send_config_request(action="set", config=config)
746
746
 
747
747
 
748
748
  @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(runtime_config_file_path)
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.config.send_config_request(action="add", config=config)
417
+ bec.device_manager.config_helper.send_config_request(action="add", config=config)
416
418
  with pytest.raises(DeviceConfigError) as config_error:
417
- bec.config.send_config_request(action="add", config=config)
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.config.send_config_request(action="remove", config={"new_device": {}})
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.config.send_config_request(action="add", config=config)
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