bec-widgets 0.56.1__py3-none-any.whl → 0.56.3__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 (38) hide show
  1. .gitlab-ci.yml +1 -1
  2. CHANGELOG.md +28 -30
  3. PKG-INFO +1 -1
  4. bec_widgets/cli/__init__.py +0 -7
  5. bec_widgets/cli/auto_updates.py +45 -13
  6. bec_widgets/cli/client.py +20 -0
  7. bec_widgets/cli/client_utils.py +11 -5
  8. bec_widgets/widgets/dock/dock.py +6 -2
  9. bec_widgets/widgets/dock/dock_area.py +8 -3
  10. bec_widgets/widgets/figure/figure.py +1 -1
  11. bec_widgets/widgets/spiral_progress_bar/ring.py +2 -2
  12. bec_widgets/widgets/spiral_progress_bar/spiral_progress_bar.py +1 -2
  13. {bec_widgets-0.56.1.dist-info → bec_widgets-0.56.3.dist-info}/METADATA +1 -1
  14. {bec_widgets-0.56.1.dist-info → bec_widgets-0.56.3.dist-info}/RECORD +38 -28
  15. docs/_static/custom.css +170 -0
  16. docs/{developer/reference.md → api_reference/api_reference.md} +3 -1
  17. docs/assets/apps_48dp.svg +1 -0
  18. docs/assets/display_settings_48dp.svg +1 -0
  19. docs/assets/index_api.svg +97 -0
  20. docs/assets/index_contribute.svg +76 -0
  21. docs/assets/index_getting_started.svg +66 -0
  22. docs/assets/index_user_guide.svg +67 -0
  23. docs/assets/rocket_launch_48dp.svg +1 -0
  24. docs/conf.py +3 -3
  25. docs/developer/developer.md +0 -8
  26. docs/index.md +39 -8
  27. docs/user/api_reference/api_reference.md +11 -0
  28. docs/user/{apps.md → applications/applications.md} +1 -1
  29. docs/user/getting_started/getting_started.md +12 -0
  30. docs/user/{installation.md → getting_started/installation.md} +1 -1
  31. docs/user/user.md +51 -22
  32. docs/user/{widgets.md → widgets/widgets.md} +3 -3
  33. pyproject.toml +1 -1
  34. tests/end-2-end/test_bec_dock_rpc_e2e.py +73 -5
  35. tests/unit_tests/test_client_utils.py +2 -2
  36. tests/unit_tests/test_spiral_progress_bar.py +5 -5
  37. {bec_widgets-0.56.1.dist-info → bec_widgets-0.56.3.dist-info}/WHEEL +0 -0
  38. {bec_widgets-0.56.1.dist-info → bec_widgets-0.56.3.dist-info}/licenses/LICENSE +0 -0
.gitlab-ci.yml CHANGED
@@ -273,7 +273,7 @@ end-2-end-conda:
273
273
  - cd ../
274
274
  - pip install -e .[dev,pyqt6]
275
275
  - cd ./tests/end-2-end
276
- - pytest --start-servers --flush-redis --random-order
276
+ - pytest -v --start-servers --flush-redis --random-order
277
277
 
278
278
  artifacts:
279
279
  when: on_failure
CHANGELOG.md CHANGED
@@ -2,6 +2,34 @@
2
2
 
3
3
 
4
4
 
5
+ ## v0.56.3 (2024-06-05)
6
+
7
+ ### Ci
8
+
9
+ * ci: increased verbosity for e2e tests ([`4af1abe`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/4af1abe4e15b62d2f7e70bf987a1a7d8694ef4d5))
10
+
11
+ ### Fix
12
+
13
+ * fix: fixed support for auto updates ([`131f49d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/131f49da8ea65af4d44b50e81c1acfc29cd92093))
14
+
15
+
16
+ ## v0.56.2 (2024-06-05)
17
+
18
+ ### Documentation
19
+
20
+ * docs: restructured docs layout ([`3c9181d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/3c9181d93d68faa4efb3b91c486ca9ca935975a0))
21
+
22
+ ### Fix
23
+
24
+ * fix(bar): ring saves current value in config ([`9648e3e`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/9648e3ea96a4109be6be694d855151ed6d3ad661))
25
+
26
+ * fix(dock): dock saves configs of all children widgets ([`4be756a`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/4be756a8676421c3a3451458995232407295df84))
27
+
28
+ * fix(dock_area): save/restore state is saved in config ([`46face0`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/46face0ee59122f04cb383da685a6658beeeb389))
29
+
30
+ * fix(figure): added correct types of configs to subplot widgets ([`6f3b1ea`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/6f3b1ea985c18929b9bab54239eeb600f03b274a))
31
+
32
+
5
33
  ## v0.56.1 (2024-06-04)
6
34
 
7
35
  ### Fix
@@ -145,33 +173,3 @@
145
173
 
146
174
 
147
175
  ## v0.51.0 (2024-05-07)
148
-
149
- ### Build
150
-
151
- * build(cli): changed repo name to bec_widgets ([`799ea55`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/799ea554de9a7f3720d100be4886a63f02c6a390))
152
-
153
- * build(setup): fakeredis added to dev env ([`df32350`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/df323504fea024a97304d96c2e39e61450714069))
154
-
155
- * build(setup): PyQt6 version is set to 6.7 ([`0ab8aa3`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/0ab8aa3a2fe51b5c38b25fca44c1c422bb42478d))
156
-
157
- ### Ci
158
-
159
- * ci: added rule for parent-child pipelines ([`e085125`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/e0851250eecb85503db929d37f75d2ba366308a6))
160
-
161
- ### Feature
162
-
163
- * feat(utils): added plugin helper to find and load ([`5ece269`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/5ece269adb0e9b0c2a468f1dfbaa6212e86d3561))
164
-
165
-
166
- ## v0.50.2 (2024-04-30)
167
-
168
- ### Fix
169
-
170
- * fix: 'disconnect_slot' has to be symmetric with 'connect_slot' regarding QtThreadSafeCallback ([`0dfcaa4`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/0dfcaa4b708948af0a40ec7cf34d03ff1e96ffac))
171
-
172
-
173
- ## v0.50.1 (2024-04-29)
174
-
175
- ### Fix
176
-
177
- * fix(cli): BECFigure takes the port to connect to redis from the current BECClient, supporting plugins ([`57cb136`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/57cb136a098e87a452414bf44e627edb562f6799))
PKG-INFO CHANGED
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.56.1
3
+ Version: 0.56.3
4
4
  Summary: BEC Widgets
5
5
  Project-URL: Bug Tracker, https://gitlab.psi.ch/bec/bec_widgets/issues
6
6
  Project-URL: Homepage, https://gitlab.psi.ch/bec/bec_widgets
@@ -1,8 +1 @@
1
- from bec_lib.utils.import_utils import lazy_import_from
2
-
3
- # from .auto_updates import AutoUpdates, ScanInfo
4
- # TODO: put back when Pydantic gets faster
5
- AutoUpdates, ScanInfo = lazy_import_from(
6
- "bec_widgets.cli.auto_updates", ("AutoUpdates", "ScanInfo")
7
- )
8
1
  from .client import BECDockArea, BECFigure
@@ -5,7 +5,7 @@ from typing import TYPE_CHECKING
5
5
  from pydantic import BaseModel
6
6
 
7
7
  if TYPE_CHECKING:
8
- from .client import BECFigure
8
+ from .client import BECDockArea, BECFigure
9
9
 
10
10
 
11
11
  class ScanInfo(BaseModel):
@@ -18,9 +18,20 @@ class ScanInfo(BaseModel):
18
18
 
19
19
 
20
20
  class AutoUpdates:
21
- def __init__(self, figure: BECFigure, enabled: bool = True):
22
- self.enabled = enabled
23
- self.figure = figure
21
+ create_default_dock: bool = False
22
+ enabled: bool = False
23
+ dock_name: str = None
24
+
25
+ def __init__(self, gui: BECDockArea):
26
+ self.gui = gui
27
+
28
+ def start_default_dock(self):
29
+ """
30
+ Create a default dock for the auto updates.
31
+ """
32
+ dock = self.gui.add_dock("default_figure")
33
+ dock.add_widget_bec("BECFigure")
34
+ self.dock_name = "default_figure"
24
35
 
25
36
  @staticmethod
26
37
  def get_scan_info(msg) -> ScanInfo:
@@ -44,6 +55,18 @@ class AutoUpdates:
44
55
  status=status,
45
56
  )
46
57
 
58
+ def get_default_figure(self) -> BECFigure | None:
59
+ """
60
+ Get the default figure from the GUI.
61
+ """
62
+ dock = self.gui.panels.get(self.dock_name, [])
63
+ if not dock:
64
+ return None
65
+ widgets = dock.widget_list
66
+ if not widgets:
67
+ return None
68
+ return widgets[0]
69
+
47
70
  def run(self, msg):
48
71
  """
49
72
  Run the update function if enabled.
@@ -86,33 +109,42 @@ class AutoUpdates:
86
109
  """
87
110
  Simple line scan.
88
111
  """
112
+ fig = self.get_default_figure()
113
+ if not fig:
114
+ return
89
115
  dev_x = info.scan_report_devices[0]
90
- dev_y = self.get_selected_device(info.monitored_devices, self.figure.selected_device)
116
+ dev_y = self.get_selected_device(info.monitored_devices, self.gui.selected_device)
91
117
  if not dev_y:
92
118
  return
93
- self.figure.clear_all()
94
- plt = self.figure.plot(dev_x, dev_y)
119
+ fig.clear_all()
120
+ plt = fig.plot(x_name=dev_x, y_name=dev_y)
95
121
  plt.set(title=f"Scan {info.scan_number}", x_label=dev_x, y_label=dev_y)
96
122
 
97
123
  def simple_grid_scan(self, info: ScanInfo) -> None:
98
124
  """
99
125
  Simple grid scan.
100
126
  """
127
+ fig = self.get_default_figure()
128
+ if not fig:
129
+ return
101
130
  dev_x = info.scan_report_devices[0]
102
131
  dev_y = info.scan_report_devices[1]
103
- dev_z = self.get_selected_device(info.monitored_devices, self.figure.selected_device)
104
- self.figure.clear_all()
105
- plt = self.figure.plot(dev_x, dev_y, dev_z, label=f"Scan {info.scan_number}")
132
+ dev_z = self.get_selected_device(info.monitored_devices, self.gui.selected_device)
133
+ fig.clear_all()
134
+ plt = fig.plot(x_name=dev_x, y_name=dev_y, z_name=dev_z, label=f"Scan {info.scan_number}")
106
135
  plt.set(title=f"Scan {info.scan_number}", x_label=dev_x, y_label=dev_y)
107
136
 
108
137
  def best_effort(self, info: ScanInfo) -> None:
109
138
  """
110
139
  Best effort scan.
111
140
  """
141
+ fig = self.get_default_figure()
142
+ if not fig:
143
+ return
112
144
  dev_x = info.scan_report_devices[0]
113
- dev_y = self.get_selected_device(info.monitored_devices, self.figure.selected_device)
145
+ dev_y = self.get_selected_device(info.monitored_devices, self.gui.selected_device)
114
146
  if not dev_y:
115
147
  return
116
- self.figure.clear_all()
117
- plt = self.figure.plot(dev_x, dev_y, label=f"Scan {info.scan_number}")
148
+ fig.clear_all()
149
+ plt = fig.plot(x_name=dev_x, y_name=dev_y, label=f"Scan {info.scan_number}")
118
150
  plt.set(title=f"Scan {info.scan_number}", x_label=dev_x, y_label=dev_y)
bec_widgets/cli/client.py CHANGED
@@ -1410,6 +1410,16 @@ class BECMotorMap(RPCBase):
1410
1410
 
1411
1411
 
1412
1412
  class BECDock(RPCBase):
1413
+ @property
1414
+ @rpc_call
1415
+ def config_dict(self) -> "dict":
1416
+ """
1417
+ Get the configuration of the widget.
1418
+
1419
+ Returns:
1420
+ dict: The configuration of the widget.
1421
+ """
1422
+
1413
1423
  @property
1414
1424
  @rpc_call
1415
1425
  def rpc_id(self) -> "str":
@@ -1528,6 +1538,16 @@ class BECDock(RPCBase):
1528
1538
 
1529
1539
 
1530
1540
  class BECDockArea(RPCBase, BECGuiClientMixin):
1541
+ @property
1542
+ @rpc_call
1543
+ def config_dict(self) -> "dict":
1544
+ """
1545
+ Get the configuration of the widget.
1546
+
1547
+ Returns:
1548
+ dict: The configuration of the widget.
1549
+ """
1550
+
1531
1551
  @property
1532
1552
  @rpc_call
1533
1553
  def panels(self) -> "dict":
@@ -17,10 +17,13 @@ from bec_lib.utils.import_utils import isinstance_based_on_class_name, lazy_impo
17
17
  from qtpy.QtCore import QCoreApplication
18
18
 
19
19
  import bec_widgets.cli.client as client
20
+ from bec_widgets.cli.auto_updates import AutoUpdates
20
21
 
21
22
  if TYPE_CHECKING:
22
23
  from bec_lib.device import DeviceBase
23
24
 
25
+ from bec_widgets.cli.client import BECDockArea, BECFigure
26
+
24
27
  messages = lazy_import("bec_lib.messages")
25
28
  # from bec_lib.connector import MessageObject
26
29
  MessageObject = lazy_import_from("bec_lib.connector", ("MessageObject",))
@@ -62,16 +65,19 @@ class BECGuiClientMixin:
62
65
  def __init__(self, **kwargs) -> None:
63
66
  super().__init__(**kwargs)
64
67
  self._process = None
65
- self.update_script = self._get_update_script()
68
+ self.auto_updates = self._get_update_script()
66
69
  self._target_endpoint = MessageEndpoints.scan_status()
67
70
  self._selected_device = None
68
71
  self.stderr_output = []
69
72
 
70
- def _get_update_script(self) -> AutoUpdates:
73
+ def _get_update_script(self) -> AutoUpdates | None:
71
74
  eps = imd.entry_points(group="bec.widgets.auto_updates")
72
75
  for ep in eps:
73
76
  if ep.name == "plugin_widgets_update":
74
- return ep.load()(figure=self)
77
+ try:
78
+ return ep.load()(gui=self)
79
+ except Exception as e:
80
+ print(f"Error loading auto update script from plugin: {str(e)}")
75
81
  return None
76
82
 
77
83
  @property
@@ -97,7 +103,7 @@ class BECGuiClientMixin:
97
103
 
98
104
  @staticmethod
99
105
  def _handle_msg_update(msg: MessageObject, parent: BECGuiClientMixin) -> None:
100
- if parent.update_script is not None:
106
+ if parent.auto_updates is not None:
101
107
  # pylint: disable=protected-access
102
108
  parent._update_script_msg_parser(msg.value)
103
109
 
@@ -105,7 +111,7 @@ class BECGuiClientMixin:
105
111
  if isinstance(msg, messages.ScanStatusMessage):
106
112
  if not self.gui_is_alive():
107
113
  return
108
- self.update_script.run(msg)
114
+ self.auto_updates.run(msg)
109
115
 
110
116
  def show(self) -> None:
111
117
  """
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import TYPE_CHECKING, Literal, Optional
3
+ from typing import TYPE_CHECKING, Any, Literal, Optional
4
4
 
5
5
  from pydantic import Field
6
6
  from pyqtgraph.dockarea import Dock
@@ -15,7 +15,7 @@ if TYPE_CHECKING:
15
15
 
16
16
 
17
17
  class DockConfig(ConnectionConfig):
18
- widgets: dict[str, ConnectionConfig] = Field({}, description="The widgets in the dock.")
18
+ widgets: dict[str, Any] = Field({}, description="The widgets in the dock.")
19
19
  position: Literal["bottom", "top", "left", "right", "above", "below"] = Field(
20
20
  "bottom", description="The position of the dock."
21
21
  )
@@ -26,6 +26,7 @@ class DockConfig(ConnectionConfig):
26
26
 
27
27
  class BECDock(BECConnector, Dock):
28
28
  USER_ACCESS = [
29
+ "config_dict",
29
30
  "rpc_id",
30
31
  "widget_list",
31
32
  "show_title_bar",
@@ -179,6 +180,7 @@ class BECDock(BECConnector, Dock):
179
180
 
180
181
  widget = RPCWidgetHandler.create_widget(widget_type)
181
182
  self.addWidget(widget, row=row, col=col, rowspan=rowspan, colspan=colspan)
183
+ self.config.widgets[widget.gui_id] = widget.config
182
184
 
183
185
  return widget
184
186
 
@@ -209,6 +211,7 @@ class BECDock(BECConnector, Dock):
209
211
  self.layout_manager.shift_widgets(shift, start_row=row)
210
212
 
211
213
  self.addWidget(widget, row=row, col=col, rowspan=rowspan, colspan=colspan)
214
+ self.config.widgets[widget.gui_id] = widget.config
212
215
 
213
216
  def move_widget(self, widget: QWidget, new_row: int, new_col: int):
214
217
  """
@@ -242,6 +245,7 @@ class BECDock(BECConnector, Dock):
242
245
  """
243
246
  widget = self.rpc_register.get_rpc_by_id(widget_rpc_id)
244
247
  self.layout.removeWidget(widget)
248
+ self.config.widgets.pop(widget_rpc_id, None)
245
249
  widget.close()
246
250
 
247
251
  def remove(self):
@@ -16,10 +16,14 @@ from .dock import BECDock, DockConfig
16
16
 
17
17
  class DockAreaConfig(ConnectionConfig):
18
18
  docks: dict[str, DockConfig] = Field({}, description="The docks in the dock area.")
19
+ docks_state: Optional[dict] = Field(
20
+ None, description="The state of the docks in the dock area."
21
+ )
19
22
 
20
23
 
21
24
  class BECDockArea(BECConnector, DockArea):
22
25
  USER_ACCESS = [
26
+ "config_dict",
23
27
  "panels",
24
28
  "save_state",
25
29
  "remove_dock",
@@ -81,7 +85,7 @@ class BECDockArea(BECConnector, DockArea):
81
85
  extra(str): Extra docks that are in the dockarea but that are not mentioned in state will be added to the bottom of the dockarea, unless otherwise specified by the extra argument.
82
86
  """
83
87
  if state is None:
84
- state = self._last_state
88
+ state = self.config.docks_state
85
89
  self.restoreState(state, missing=missing, extra=extra)
86
90
 
87
91
  def save_state(self) -> dict:
@@ -91,8 +95,9 @@ class BECDockArea(BECConnector, DockArea):
91
95
  Returns:
92
96
  dict: The state of the dock area.
93
97
  """
94
- self._last_state = self.saveState()
95
- return self._last_state
98
+ last_state = self.saveState()
99
+ self.config.docks_state = last_state
100
+ return last_state
96
101
 
97
102
  def remove_dock(self, name: str):
98
103
  """
@@ -26,7 +26,7 @@ class FigureConfig(ConnectionConfig):
26
26
  theme: Literal["dark", "light"] = Field("dark", description="The theme of the figure widget.")
27
27
  num_cols: int = Field(1, description="The number of columns in the figure widget.")
28
28
  num_rows: int = Field(1, description="The number of rows in the figure widget.")
29
- widgets: dict[str, SubplotConfig] = Field(
29
+ widgets: dict[str, Waveform1DConfig | ImageConfig | MotorMapConfig | SubplotConfig] = Field(
30
30
  {}, description="The list of widgets to be added to the figure widget."
31
31
  )
32
32
 
@@ -36,6 +36,7 @@ class RingConnections(BaseModel):
36
36
 
37
37
 
38
38
  class RingConfig(ConnectionConfig):
39
+ value: int | float | None = Field(0, description="Value for the progress bars.")
39
40
  direction: int | None = Field(
40
41
  -1, description="Direction of the progress bars. -1 for clockwise, 1 for counter-clockwise."
41
42
  )
@@ -102,7 +103,6 @@ class Ring(BECConnector):
102
103
  self.background_color = None
103
104
  self.start_position = None
104
105
  self.config = config
105
- self.value = 0
106
106
  self.RID = None
107
107
  self._init_config_params()
108
108
 
@@ -114,7 +114,7 @@ class Ring(BECConnector):
114
114
  self.set_connections(self.config.connections.slot, self.config.connections.endpoint)
115
115
 
116
116
  def set_value(self, value: int | float):
117
- self.value = round(
117
+ self.config.value = round(
118
118
  max(self.config.min_value, min(self.config.max_value, value)), self.config.precision
119
119
  )
120
120
 
@@ -115,7 +115,6 @@ class SpiralProgressBar(BECConnector, QWidget):
115
115
  self.entry_validator = EntryValidator(self.dev)
116
116
 
117
117
  self.RID = None
118
- self.values = None
119
118
 
120
119
  # For updating bar behaviour
121
120
  self._auto_updates = True
@@ -544,7 +543,7 @@ class SpiralProgressBar(BECConnector, QWidget):
544
543
  pen = QtGui.QPen(ring.color, ring.config.line_width, QtCore.Qt.SolidLine)
545
544
  pen.setCapStyle(QtCore.Qt.RoundCap)
546
545
  painter.setPen(pen)
547
- proportion = (ring.value - ring.config.min_value) / (
546
+ proportion = (ring.config.value - ring.config.min_value) / (
548
547
  (ring.config.max_value - ring.config.min_value) + 1e-3
549
548
  )
550
549
  angle = int(proportion * 360 * 16 * ring.config.direction)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.56.1
3
+ Version: 0.56.3
4
4
  Summary: BEC Widgets
5
5
  Project-URL: Bug Tracker, https://gitlab.psi.ch/bec/bec_widgets/issues
6
6
  Project-URL: Homepage, https://gitlab.psi.ch/bec/bec_widgets
@@ -1,12 +1,12 @@
1
1
  .gitignore,sha256=cMQ1MLmnoR88aMCCJwUyfoTnufzl4-ckmHtlFUqHcT4,3253
2
- .gitlab-ci.yml,sha256=14teoIFfOHkepa-_tW9nAxSF3sjdWnRMFLfu2yooR5s,12236
2
+ .gitlab-ci.yml,sha256=RF2JeGh8tG09DyAOwEu991IZy3C8Vm6lI8O_4Dr9B9Q,12239
3
3
  .pylintrc,sha256=OstrgmEyP0smNFBKoIN5_26-UmNZgMHnbjvAWX0UrLs,18535
4
4
  .readthedocs.yaml,sha256=aSOc277LqXcsTI6lgvm_JY80lMlr69GbPKgivua2cS0,603
5
- CHANGELOG.md,sha256=hZS8WkcyftWivZY--uu9Batq5Ig6ntZL856PUpZc2d4,7040
5
+ CHANGELOG.md,sha256=kanSLoK5uphXdlmpcQqyPg1Z31HfUlC-tbK4nmYvz8o,6924
6
6
  LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
7
- PKG-INFO,sha256=4rY1pWoAcOkokzBNWFTqvh8_74Dz7kdoz-j57_wuvn8,1135
7
+ PKG-INFO,sha256=V34V-R1GQv2uDyzy9qDYTnNNe2dbkeeDVpFI-Q8GSkU,1135
8
8
  README.md,sha256=y4jB6wvArS7N8_iTbKWnSM_oRAqLA2GqgzUR-FMh5sU,2645
9
- pyproject.toml,sha256=FfsH75R3b_wXYFyNh22RBMlAabKycZ7JpBrm3_fvsGo,1803
9
+ pyproject.toml,sha256=zn3vc-ka-y-TAwav3-etEpelzU-jsqo1KOzt55_6Ucw,1803
10
10
  .git_hooks/pre-commit,sha256=n3RofIZHJl8zfJJIUomcMyYGFi_rwq4CC19z0snz3FI,286
11
11
  .gitlab/issue_templates/bug_report_template.md,sha256=gAuyEwl7XlnebBrkiJ9AqffSNOywmr8vygUFWKTuQeI,386
12
12
  .gitlab/issue_templates/documentation_update_template.md,sha256=FHLdb3TS_D9aL4CYZCjyXSulbaW5mrN2CmwTaeLPbNw,860
@@ -15,10 +15,10 @@ pyproject.toml,sha256=FfsH75R3b_wXYFyNh22RBMlAabKycZ7JpBrm3_fvsGo,1803
15
15
  bec_widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  bec_widgets/assets/bec_widgets_icon.png,sha256=K8dgGwIjalDh9PRHUsSQBqgdX7a00nM3igZdc20pkYM,1747017
17
17
  bec_widgets/assets/terminal_icon.png,sha256=bJl7Tft4Fi2uxvuXI8o14uMHnI9eAWKSU2uftXCH9ws,3889
18
- bec_widgets/cli/__init__.py,sha256=v5oaQMydRVEaqKNI73A3_AbQ0efXxBt2SLoUBKANrV8,301
19
- bec_widgets/cli/auto_updates.py,sha256=ptZeBKr13o9THc8oKLn93K_16i6G3pxzw8hZ4MUgjW4,3845
20
- bec_widgets/cli/client.py,sha256=kg4hnEM6B1-V_i8qsypjZ1r45aTJTA9hz4VfjWlbYSE,52501
21
- bec_widgets/cli/client_utils.py,sha256=IPWfseFBYFjCmBp4LsXyNUOcV5KTTdiW1jsLvG3jF5A,10536
18
+ bec_widgets/cli/__init__.py,sha256=tLD8HWgyURhMjYlKZ43pBu-qvGD1LI5o3n3rEieg-70,43
19
+ bec_widgets/cli/auto_updates.py,sha256=RFc9sbNE9Ec8K3U1DSrLzwUweM3W51Lmcp9D2gSt2e4,4696
20
+ bec_widgets/cli/client.py,sha256=tQIaQcNnOkF3M-Ym4_U7vMwpYWgVPEGAJY4ibnlPLgM,52909
21
+ bec_widgets/cli/client_utils.py,sha256=gxa9TpYCWa0a7jsrMaWv_FQOnfeqP-xht8PYbhcEgys,10802
22
22
  bec_widgets/cli/generate_cli.py,sha256=tBt-F4Xccg9Pj2zuDEGHd0Ho1fKLfCf3PuSa8KmelQk,4431
23
23
  bec_widgets/cli/rpc_register.py,sha256=QxXUZu5XNg00Yf5O3UHWOXg3-f_pzKjjoZYMOa-MOJc,2216
24
24
  bec_widgets/cli/rpc_wigdet_handler.py,sha256=OXHoiDFJPzbQ5RO0bzIX5aUXeMMlJTwAiTmB0_7Chj4,913
@@ -48,10 +48,10 @@ bec_widgets/utils/widget_io.py,sha256=f36198CvT_EzWQ_cg2G-4tRRsaMdJ3yVqsZWKJCQEf
48
48
  bec_widgets/utils/yaml_dialog.py,sha256=cMVif-39SB9WjwGH5FWBJcFs4tnfFJFs5cacydRyhy0,1853
49
49
  bec_widgets/widgets/__init__.py,sha256=LKgIuY3CI-NHCa_bY9pThYhxLH0MHDo8iNEJDDVIVmw,172
50
50
  bec_widgets/widgets/dock/__init__.py,sha256=B7foHt02gnhM7mFksa7GJVwT7n0j_JvYDCt6wc6XR5g,61
51
- bec_widgets/widgets/dock/dock.py,sha256=vnOQnOWWnd-3X07kniSW_I5l0uEHZOaWhfuqZkDGIqE,8467
52
- bec_widgets/widgets/dock/dock_area.py,sha256=UaI5Z-c9C16lhTbXmEVzfl55Y8ymKSk4sPWGleIsUVY,7182
51
+ bec_widgets/widgets/dock/dock.py,sha256=fUb8VTYU2yS5N5KOUf1X1m_F1kpDullX3m71llRbBP8,8653
52
+ bec_widgets/widgets/dock/dock_area.py,sha256=8E-rBZxM7pE423jPaXMRKb1YGlAR9oAQvJubNDpemSI,7361
53
53
  bec_widgets/widgets/figure/__init__.py,sha256=3hGx_KOV7QHCYAV06aNuUgKq4QIYCjUTad-DrwkUaBM,44
54
- bec_widgets/widgets/figure/figure.py,sha256=MbnG6d738aYgNiFuOFHgyaGre0eVLA8OdSg-Xx7XIYU,29712
54
+ bec_widgets/widgets/figure/figure.py,sha256=OzeKZme89JnzMcKT1sACnyw951EtRoSUALl58upY6b4,29762
55
55
  bec_widgets/widgets/figure/plots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
56
  bec_widgets/widgets/figure/plots/plot_base.py,sha256=oNUXEe94bD0_fVu-HPMRaoAuwPMW0DOAN8vvOeRz254,8513
57
57
  bec_widgets/widgets/figure/plots/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -80,32 +80,42 @@ bec_widgets/widgets/motor_control/selection/selection.ui,sha256=vXXpvNWuL6xyHhW7
80
80
  bec_widgets/widgets/scan_control/__init__.py,sha256=IOfHl15vxb_uC6KN62-PeUzbBha_vQyqkkXbJ2HU674,38
81
81
  bec_widgets/widgets/scan_control/scan_control.py,sha256=B5n2U2iVtTCY3Tx93JyBqzGCDCmWhWwAOhbPelLI-bs,17168
82
82
  bec_widgets/widgets/spiral_progress_bar/__init__.py,sha256=4efbtcqCToMIw5bkQrTzy2TzuBCXvlhuUPh1bYC_Yzg,51
83
- bec_widgets/widgets/spiral_progress_bar/ring.py,sha256=WLz0OVvyRfeJnTKS6_0Lqh-V4P7G64vuzAcOO18QU9A,7008
84
- bec_widgets/widgets/spiral_progress_bar/spiral_progress_bar.py,sha256=Geev5PwJUsYgzoY0a-fx6ZmBOptKTPeJa_Mp8Ouh0fY,22563
83
+ bec_widgets/widgets/spiral_progress_bar/ring.py,sha256=_wUIZOZ_UZaI3U9-s-VS5v-yv5NBPB991WoXunNr1jI,7077
84
+ bec_widgets/widgets/spiral_progress_bar/spiral_progress_bar.py,sha256=AjQsZDEqPlTn0kE4xkYKOj2ae5vJ9gW-k3yz1Y32vsY,22543
85
85
  bec_widgets/widgets/toolbar/__init__.py,sha256=d-TP4_cr_VbpwreMM4ePnfZ5YXsEPQ45ibEf75nuGoE,36
86
86
  bec_widgets/widgets/toolbar/toolbar.py,sha256=e0zCD_0q7K4NVhrzD8001Qvfxt-VhqHTgofchS9NgCM,5125
87
87
  docs/Makefile,sha256=i2WHuFlgfyAPEW4ssEP8NY4cOibDJrVjvzSEU8_Ggwc,634
88
- docs/conf.py,sha256=pASMheaNEMnHl91PHQWUW0uu3OqXByYnDeSrlrVAUeI,2474
89
- docs/index.md,sha256=6HrqaPXb5uUPEtM2gZaVUi1wM1kUYmdC2aIFpmItzZ0,453
88
+ docs/conf.py,sha256=HxLxupNGu0Smhwn57g1kFdjZzFuaWVREgRJKhT1zi2k,2464
89
+ docs/index.md,sha256=8ZCgaLIbJsYvt-jwi--QxsNwnK4-k3rejIeOOLclG40,1101
90
90
  docs/make.bat,sha256=vKazJE8RW49Cy8K7hm8QYbletvAd8YkeKsaPA_dWnXs,800
91
91
  docs/requirements.txt,sha256=SbcWrLYX6tEZNMCUETgsE50Y7VioR1VX6YCeifuJWEc,140
92
+ docs/_static/custom.css,sha256=v4Nk7r8LZslhOV8RaSUb15bG4miwiZ4-kZyXBLnSyms,13487
92
93
  docs/_templates/custom-class-template.rst,sha256=HPuPaGJob2zXlWOl5FmA-hAZRbUTGQmdqo3HS1iIFog,711
93
94
  docs/_templates/custom-module-template.rst,sha256=MXYXAz06HP_mbblO--iFwL08xROmSBo7U4O-hPbMcZU,1228
94
- docs/developer/developer.md,sha256=xJvO-EAf-9SqDARRnqFLRd8k_o258U97V0DmvgZKMos,477
95
- docs/developer/reference.md,sha256=P0uuBwSWuDhbXifSbyDKJRkDhb1_nETckTTnt12-A4g,150
95
+ docs/api_reference/api_reference.md,sha256=D2l5H4fd50uc55ShTFS0JhtDYCma01dIX69oHKN-K2w,167
96
+ docs/assets/apps_48dp.svg,sha256=9lJkkEQi-thzy_bXeFKyqJLaohmlTzAZJ1Lccw585jg,292
97
+ docs/assets/display_settings_48dp.svg,sha256=-K7ZhJdpt7jZA8NSIGVIhMOm0fK18rWHnwlli5pn6qs,568
98
+ docs/assets/index_api.svg,sha256=CeYPwqYps-ygfwA6_frNER4wV3Q7EGoW-ltlRaCOOpM,3519
99
+ docs/assets/index_contribute.svg,sha256=OCjvYBw_JhcY_D5Zd7f1MctQvq1YNalYlqPNwB1XBhs,2528
100
+ docs/assets/index_getting_started.svg,sha256=Www1OXmauYlouZD51AR6-VG2vxrEig8-jjuDPhzkNxc,3977
101
+ docs/assets/index_user_guide.svg,sha256=sRjKwOHVJStBYIQUFVcnfmbeXd2qAp0HYjleSp66XCI,6429
102
+ docs/assets/rocket_launch_48dp.svg,sha256=pdrPrBcKWUa5OlgWKM0B6TA6qAW7E57d7C7YW2r1OT8,1070
103
+ docs/developer/developer.md,sha256=7Z6sfkk_7BgwZ2vaX4z5_cJrs0miyeAYSGpqMbyBmOI,415
96
104
  docs/introduction/introduction.md,sha256=wp7jmhkUtJnSnEnmIAZGUcau_3-5e5-FohvZb63khw4,1432
97
- docs/user/apps.md,sha256=qD-thmWqP9-m_Jq6peZCDhCXNJO-8TUIt4DWUQI3Dg4,139
98
105
  docs/user/customisation.md,sha256=Og0NuUsTs8HdwKtpHnycGmH8wCqOeYgj2ozlYRJ-Drk,249
99
- docs/user/installation.md,sha256=8eotL5UQALR8z5aZ5fiJuR3yJOldg2S91ngvn2VVp7I,1233
100
- docs/user/user.md,sha256=e5WKSginne0HMP7KpqmYEqBtHsPUgw36Egwrq3YUnpg,1997
101
- docs/user/widgets.md,sha256=viEb7_nqXKcnJT3HqWvq9d2MKRtuwORf58xCquwUWOo,1903
106
+ docs/user/user.md,sha256=uCTcjclIi6rdjYRQebko6bWFEVsjyfshsVU3BDYrC-Y,1403
107
+ docs/user/api_reference/api_reference.md,sha256=q2Imc48Rq6GcAP0R4bS3KuW5ptZZdsV4wxGJb3JJQHg,174
108
+ docs/user/applications/applications.md,sha256=hs8WKVuxBENV2Q7m4wN8wmSI_B3JBYrSYS1IYdbyoWg,147
109
+ docs/user/getting_started/getting_started.md,sha256=BagVhtCSoLgYlVaaYOep3KT5r_8DjtQKYj2g-PoU7uw,346
110
+ docs/user/getting_started/installation.md,sha256=Rt7O2VI5LRrrRpru1YSb8KAd92znFhHJFs7vhpmHIXQ,1239
102
111
  docs/user/widgets/motor.gif,sha256=FtaWdRHx4UZaGJPpq8LNhMMgX4PFcAB6IZ93JCMEh_w,2280719
103
112
  docs/user/widgets/scatter_2D.gif,sha256=yHpsuAUseMafJjI_J5BcOhmE3nu9VFn_Xm9XHzJaH5I,13188862
104
113
  docs/user/widgets/w1D.gif,sha256=tuHbleJpl6bJFNNC2OdndF5LF7IyfvlkFCMGZajrQPs,622773
114
+ docs/user/widgets/widgets.md,sha256=vIfilXMyE1iPQMQXGH8wEjXWsFI6GPI0Cn9VQg5lLwI,1879
105
115
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
106
116
  tests/end-2-end/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
117
  tests/end-2-end/conftest.py,sha256=b5Yebbj8C1-IcXq23XGbOnXF0kOZD_Po46Z-p4cBwfs,1346
108
- tests/end-2-end/test_bec_dock_rpc_e2e.py,sha256=PAEKKf2iRcwzBs5v_Egrbpd_zn-KYHV_hH1xj8Tqi2w,7582
118
+ tests/end-2-end/test_bec_dock_rpc_e2e.py,sha256=E2XR6cgmyrHknbe-97LhuSAGlsPguc5VOQ2-Q5Apvm0,9843
109
119
  tests/end-2-end/test_bec_figure_rpc_e2e.py,sha256=X8lQLx2NsB6-nU61IhVtAw1-pJ4A2qFgx5PxOWC0V7Q,5527
110
120
  tests/end-2-end/test_rpc_register_e2e.py,sha256=M7sSq3us2yQIW5tAIFOFfBULatZTQNLdt0frh1bINts,1595
111
121
  tests/unit_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -116,14 +126,14 @@ tests/unit_tests/test_bec_dispatcher.py,sha256=rYPiRizHaswhGZw55IBMneDFxmPiCCLAZ
116
126
  tests/unit_tests/test_bec_dock.py,sha256=gvtNkkCPrDFY_1qZ53ZXChdgmQFSwwQrr1VeZC5ybKc,3610
117
127
  tests/unit_tests/test_bec_figure.py,sha256=xYAftY8bI_EH-SlNPD0Tjd7FS_47ouZ1E4hrpjPt7O4,8002
118
128
  tests/unit_tests/test_bec_motor_map.py,sha256=AfD_9-x6VV3TPnkQgNfFYRndPHDsGx-a_YknFeDr6hc,4588
119
- tests/unit_tests/test_client_utils.py,sha256=YFJMqx4XBF_gKOFLfVkaQK3nx4TETtv6kQhJUjH-Rqo,802
129
+ tests/unit_tests/test_client_utils.py,sha256=eViJ1Tz-HX9TkMvQH6W8cO-c3_1I8bUc4_Yen6LOc0E,830
120
130
  tests/unit_tests/test_crosshair.py,sha256=3OMAJ2ZaISYXMOtkXf1rPdy94vCr8njeLi6uHblBL9Q,5045
121
131
  tests/unit_tests/test_generate_cli_client.py,sha256=J7CFoO67txGu_u1Mwk32EejRX204FRuvmVg_yhAr1WM,2397
122
132
  tests/unit_tests/test_motor_control.py,sha256=NBekcGALo5mYkuyBJvBhvJkWiQDV82hI4GmsobRzjTI,20770
123
133
  tests/unit_tests/test_plot_base.py,sha256=bOdlgAxh9oKk5PwiQ_MSFmzr44uJ61Tlg242RCIhl5c,2610
124
134
  tests/unit_tests/test_rpc_register.py,sha256=hECjZEimd440mwRrO0rg7L3PKN7__3DgjmESN6wx3bo,1179
125
135
  tests/unit_tests/test_scan_control.py,sha256=7dtGpE0g4FqUhhQeCkyJl-9o7NH3DFZJgEaqDmBYbBc,7551
126
- tests/unit_tests/test_spiral_progress_bar.py,sha256=NY-zFt_fQ-_4_J2Paql8VdqJ-mozOFYZrZ-Y3iKNYcA,12383
136
+ tests/unit_tests/test_spiral_progress_bar.py,sha256=yak3N9-TmEM3lQZPSROL4cAx9mior__se1XADlMScks,12418
127
137
  tests/unit_tests/test_waveform1d.py,sha256=Xi9TdZmxoMmmje37lq03FG9lytEdZCTUEjtOC0LvZjA,15263
128
138
  tests/unit_tests/test_widget_io.py,sha256=FeL3ZYSBQnRt6jxj8VGYw1cmcicRQyHKleahw7XIyR0,3475
129
139
  tests/unit_tests/test_yaml_dialog.py,sha256=HNrqferkdg02-9ieOhhI2mr2Qvt7GrYgXmQ061YCTbg,5794
@@ -132,7 +142,7 @@ tests/unit_tests/test_configs/config_device_no_entry.yaml,sha256=hdvue9KLc_kfNzG
132
142
  tests/unit_tests/test_configs/config_scan.yaml,sha256=vo484BbWOjA_e-h6bTjSV9k7QaQHrlAvx-z8wtY-P4E,1915
133
143
  tests/unit_tests/test_msgs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
134
144
  tests/unit_tests/test_msgs/available_scans_message.py,sha256=m_z97hIrjHXXMa2Ex-UvsPmTxOYXfjxyJaGkIY6StTY,46532
135
- bec_widgets-0.56.1.dist-info/METADATA,sha256=4rY1pWoAcOkokzBNWFTqvh8_74Dz7kdoz-j57_wuvn8,1135
136
- bec_widgets-0.56.1.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
137
- bec_widgets-0.56.1.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
138
- bec_widgets-0.56.1.dist-info/RECORD,,
145
+ bec_widgets-0.56.3.dist-info/METADATA,sha256=V34V-R1GQv2uDyzy9qDYTnNNe2dbkeeDVpFI-Q8GSkU,1135
146
+ bec_widgets-0.56.3.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
147
+ bec_widgets-0.56.3.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
148
+ bec_widgets-0.56.3.dist-info/RECORD,,