bec-widgets 1.6.0__py3-none-any.whl → 1.7.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.
CHANGELOG.md CHANGED
@@ -1,14 +1,32 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
- ## v1.6.0 (2024-11-27)
4
+ ## v1.7.0 (2024-12-02)
5
5
 
6
6
  ### Bug Fixes
7
7
 
8
- - **tests**: Make use of BECDockArea with client mixin to start server and use it in tests
9
- ([`da18c2c`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/da18c2ceecf9aeaf0e0ea9b78f4c867b27b9c314))
8
+ - **tests**: Add test for Console widget
9
+ ([`da579b6`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/da579b6d213bcdf28c40c1a9e4e2535fdde824fb))
10
10
 
11
- Depending on the test, auto-updates are enabled or not.
11
+ ### Features
12
+
13
+ - **console**: Add "prompt" signal to inform when shell is at prompt
14
+ ([`3aeb0b6`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/3aeb0b66fbeb03d3d0ee60e108cc6b98fd9aa9b9))
15
+
16
+ - **console**: Add 'terminate' and 'send_ctrl_c' methods to Console
17
+ ([`02086ae`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/02086aeae09233ec4e6ccc0e6a17f2b078d500b8))
18
+
19
+ .terminate() ends the started process, sending SIGTERM signal. If process is not dead after optional
20
+ timeout, SIGKILL is sent. .send_ctrl_c() sends SIGINT to the child process, and waits for prompt
21
+ until optional timeout is reached. Timeouts raise 'TimeoutError' exception.
22
+
23
+
24
+ ## v1.6.0 (2024-11-27)
25
+
26
+ ### Bug Fixes
27
+
28
+ - Add back accidentally removed variables
29
+ ([`e998352`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/e9983521ed2a1c04af048a55ece70a1943a84313))
12
30
 
13
31
  - Differentiate click and drag for DeviceItem, adapt tests accordingly
14
32
  ([`cffcdf2`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/cffcdf292363249bcc7efa9d130431d0bc727fda))
@@ -17,12 +35,6 @@ This fixes the blocking "QDrag.exec_()" on Linux, indeed before the drag'n'drop
17
35
  started with a simple click and it was waiting for drop forever. Now there are 2 different cases,
18
36
  click or drag'n'drop - the drag'n'drop test actually moves the mouse and releases the button.
19
37
 
20
- - **server**: Use dock area by default
21
- ([`2fe7f5e`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/2fe7f5e1510a5ea72676045e6ea3485e6b11c220))
22
-
23
- - **rpc**: Gui hide/show also hide/show all floating docks
24
- ([`c27d058`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/c27d058b01fe604eccec76454e39360122e48515))
25
-
26
38
  - Do not quit automatically when last window is "closed"
27
39
  ([`96e255e`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/96e255e4ef394eb79006a66d13e06775ae235667))
28
40
 
@@ -31,8 +43,16 @@ Qt confuses closed and hidden
31
43
  - No need to call inspect.signature - it can fail on methods coming from C (like Qt methods)
32
44
  ([`6029246`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/60292465e9e52d3248ae681c68c07298b9b3ce14))
33
45
 
34
- - Add back accidentally removed variables
35
- ([`e998352`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/e9983521ed2a1c04af048a55ece70a1943a84313))
46
+ - **rpc**: Gui hide/show also hide/show all floating docks
47
+ ([`c27d058`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/c27d058b01fe604eccec76454e39360122e48515))
48
+
49
+ - **server**: Use dock area by default
50
+ ([`2fe7f5e`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/2fe7f5e1510a5ea72676045e6ea3485e6b11c220))
51
+
52
+ - **tests**: Make use of BECDockArea with client mixin to start server and use it in tests
53
+ ([`da18c2c`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/da18c2ceecf9aeaf0e0ea9b78f4c867b27b9c314))
54
+
55
+ Depending on the test, auto-updates are enabled or not.
36
56
 
37
57
  ### Features
38
58
 
@@ -40,26 +60,26 @@ Qt confuses closed and hidden
40
60
  BECDockArea
41
61
  ([`31d8703`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/31d87036c9801e639a7ca6fc003c90e0c4edb19d))
42
62
 
43
- - Add rpc_id member to client objects
44
- ([`3ba0b1d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/3ba0b1daf5b83da840e90fbbc063ed7b86ebe99b))
45
-
46
- - **client**: Add show()/hide() methods to "gui" object
47
- ([`e68e2b5`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/e68e2b5978339475b97555c3e20795807932fbc9))
48
-
49
- - **server**: Add main window, with proper gui_id derived from given id
50
- ([`daf6ea0`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/daf6ea0159c9ffc7b53bb7ae6b9abc16a302972c))
63
+ - Add '--hide' argument to BEC GUI server
64
+ ([`1f60fec`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/1f60fec7201ed252d7e49bf16f2166ee7f6bed6a))
51
65
 
52
66
  - Add main window container widget
53
67
  ([`f80ec33`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/f80ec33ae5a261dbcab901ae30f4cc802316e554))
54
68
 
69
+ - Add rpc_id member to client objects
70
+ ([`3ba0b1d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/3ba0b1daf5b83da840e90fbbc063ed7b86ebe99b))
71
+
55
72
  - Asynchronous .start() for GUI
56
73
  ([`2047e48`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/2047e484d5a4b2f5ea494a1e49035b35b1bbde35))
57
74
 
58
75
  - Do not take focus when GUI is loaded
59
76
  ([`1f71d8e`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/1f71d8e5eded9952f9b34bfc427e2ff44cf5fc18))
60
77
 
61
- - Add '--hide' argument to BEC GUI server
62
- ([`1f60fec`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/1f60fec7201ed252d7e49bf16f2166ee7f6bed6a))
78
+ - **client**: Add show()/hide() methods to "gui" object
79
+ ([`e68e2b5`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/e68e2b5978339475b97555c3e20795807932fbc9))
80
+
81
+ - **server**: Add main window, with proper gui_id derived from given id
82
+ ([`daf6ea0`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/daf6ea0159c9ffc7b53bb7ae6b9abc16a302972c))
63
83
 
64
84
 
65
85
  ## v1.5.3 (2024-11-21)
@@ -192,19 +212,3 @@ Qt confuses closed and hidden
192
212
 
193
213
  - **colormap_button**: Colormap button with menu to select colormap filtered by the colormap type
194
214
  ([`b039933`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/b039933405e2fbe92bd81bd0748e79e8d443a741))
195
-
196
-
197
- ## v1.2.0 (2024-10-25)
198
-
199
- ### Features
200
-
201
- - **colors**: Evenly spaced color generation + new golden ratio calculation
202
- ([`40c9fea`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/40c9fea35f869ef52e05948dd1989bcd99f602e0))
203
-
204
- ### Refactoring
205
-
206
- - Add bec_lib version to statusbox
207
- ([`5d4b86e`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/5d4b86e1c6e1800051afce4f991153e370767fa6))
208
-
209
-
210
- ## v1.1.0 (2024-10-25)
PKG-INFO CHANGED
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 1.6.0
3
+ Version: 1.7.0
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
@@ -10,9 +10,13 @@ import fcntl
10
10
  import html
11
11
  import os
12
12
  import pty
13
+ import re
14
+ import signal
13
15
  import sys
16
+ import time
14
17
 
15
18
  import pyte
19
+ from pygments.token import Token
16
20
  from pyte.screens import History
17
21
  from qtpy import QtCore, QtGui, QtWidgets
18
22
  from qtpy.QtCore import Property as pyqtProperty
@@ -235,10 +239,14 @@ class BECConsole(QtWidgets.QWidget):
235
239
  PLUGIN = True
236
240
  ICON_NAME = "terminal"
237
241
 
242
+ prompt = pyqtSignal(bool)
243
+
238
244
  def __init__(self, parent=None, cols=132):
239
245
  super().__init__(parent)
240
246
 
241
247
  self.term = _TerminalWidget(self, cols, rows=43)
248
+ self.term.prompt.connect(self.prompt) # forward signal from term to this widget
249
+
242
250
  self.scroll_bar = QScrollBar(Qt.Vertical, self)
243
251
  # self.scroll_bar.hide()
244
252
  layout = QHBoxLayout(self)
@@ -320,9 +328,38 @@ class BECConsole(QtWidgets.QWidget):
320
328
  def start(self, deactivate_ctrl_d=True):
321
329
  self.term.start(deactivate_ctrl_d=deactivate_ctrl_d)
322
330
 
323
- def push(self, text):
331
+ def push(self, text, hit_return=False):
324
332
  """Push some text to the terminal"""
325
- return self.term.push(text)
333
+ return self.term.push(text, hit_return=hit_return)
334
+
335
+ def execute_command(self, command):
336
+ self.push(command, hit_return=True)
337
+
338
+ def set_prompt_tokens(self, *tokens):
339
+ """Prepare regexp to identify prompt, based on tokens
340
+
341
+ Tokens are returned from get_ipython().prompts.in_prompt_tokens()
342
+ """
343
+ regex_parts = []
344
+ for token_type, token_value in tokens:
345
+ if token_type == Token.PromptNum: # Handle dynamic prompt number
346
+ regex_parts.append(r"[\d\?]+") # Match one or more digits or '?'
347
+ else:
348
+ # Escape other prompt parts (e.g., "In [", "]: ")
349
+ if not token_value:
350
+ regex_parts.append(".+?") # arbitrary string
351
+ else:
352
+ regex_parts.append(re.escape(token_value))
353
+
354
+ # Combine into a single regex
355
+ prompt_pattern = "".join(regex_parts)
356
+ self.term._prompt_re = re.compile(prompt_pattern + r"\s*$")
357
+
358
+ def terminate(self, timeout=10):
359
+ self.term.stop(timeout=timeout)
360
+
361
+ def send_ctrl_c(self, timeout=None):
362
+ self.term.send_ctrl_c(timeout)
326
363
 
327
364
  cols = pyqtProperty(int, get_cols, set_cols)
328
365
  rows = pyqtProperty(int, get_rows, set_rows)
@@ -336,7 +373,15 @@ class _TerminalWidget(QtWidgets.QPlainTextEdit):
336
373
  Start ``Backend`` process and render Pyte output as text.
337
374
  """
338
375
 
376
+ prompt = pyqtSignal(bool)
377
+
339
378
  def __init__(self, parent, cols=125, rows=50, **kwargs):
379
+ # regexp to match prompt
380
+ self._prompt_re = None
381
+ # last prompt
382
+ self._prompt_str = None
383
+ # process pid
384
+ self.pid = None
340
385
  # file descriptor to communicate with the subprocess
341
386
  self.fd = None
342
387
  self.backend = None
@@ -433,7 +478,7 @@ class _TerminalWidget(QtWidgets.QPlainTextEdit):
433
478
  self.update_term_size()
434
479
 
435
480
  # Start the Bash process
436
- self.fd = self.fork_shell()
481
+ self.pid, self.fd = self.fork_shell()
437
482
 
438
483
  if self.fd:
439
484
  # Create the ``Backend`` object
@@ -449,6 +494,62 @@ class _TerminalWidget(QtWidgets.QPlainTextEdit):
449
494
  self.appendHtml(f"<br><h2>{repr(self._cmd)} - Process exited.</h2>")
450
495
  self.setReadOnly(True)
451
496
 
497
+ def send_ctrl_c(self, wait_prompt=True, timeout=None):
498
+ """Send CTRL-C to the process
499
+
500
+ If wait_prompt=True (default), wait for a new prompt after CTRL-C
501
+ If no prompt is displayed after 'timeout' seconds, TimeoutError is raised
502
+ """
503
+ os.kill(self.pid, signal.SIGINT)
504
+ if wait_prompt:
505
+ timeout_error = False
506
+ if timeout:
507
+
508
+ def set_timeout_error():
509
+ nonlocal timeout_error
510
+ timeout_error = True
511
+
512
+ timeout_timer = QTimer()
513
+ timeout_timer.singleShot(timeout * 1000, set_timeout_error)
514
+ while self._prompt_str is None:
515
+ QApplication.instance().process_events()
516
+ if timeout_error:
517
+ raise TimeoutError(
518
+ f"CTRL-C: could not get back to prompt after {timeout} seconds."
519
+ )
520
+
521
+ def _is_running(self):
522
+ if os.waitpid(self.pid, os.WNOHANG) == (0, 0):
523
+ return True
524
+ return False
525
+
526
+ def stop(self, kill=True, timeout=None):
527
+ """Stop the running process
528
+
529
+ SIGTERM is the default signal for terminating processes.
530
+
531
+ If kill=True (default), SIGKILL will be sent if the process does not exit after timeout
532
+ """
533
+ # try to exit gracefully
534
+ os.kill(self.pid, signal.SIGTERM)
535
+
536
+ # wait until process is truly dead
537
+ t0 = time.perf_counter()
538
+ while self._is_running():
539
+ time.sleep(1)
540
+ if timeout is not None and time.perf_counter() - t0 > timeout:
541
+ # still alive after 'timeout' seconds
542
+ if kill:
543
+ # send SIGKILL and make a last check in loop
544
+ os.kill(self.pid, signal.SIGKILL)
545
+ kill = False
546
+ else:
547
+ # still running after timeout...
548
+ raise TimeoutError(
549
+ f"Could not terminate process with pid: {self.pid} within timeout"
550
+ )
551
+ self.process_exited()
552
+
452
553
  def data_ready(self, screen):
453
554
  """Handle new screen: redraw, set scroll bar max and slider, move cursor to its position
454
555
 
@@ -540,11 +641,13 @@ class _TerminalWidget(QtWidgets.QPlainTextEdit):
540
641
  elif code is not None:
541
642
  self.write(code)
542
643
 
543
- def push(self, text):
644
+ def push(self, text, hit_return=False):
544
645
  """
545
646
  Write 'text' to terminal
546
647
  """
547
648
  self.write(text.encode("utf-8"))
649
+ if hit_return:
650
+ self.write(b"\n")
548
651
 
549
652
  def contextMenuEvent(self, event):
550
653
  if self.fd is None:
@@ -650,6 +753,20 @@ class _TerminalWidget(QtWidgets.QPlainTextEdit):
650
753
  self.output[line_no] = line
651
754
  # fill the text area with HTML contents in one go
652
755
  self.appendHtml(f"<pre>{chr(10).join(self.output)}</pre>")
756
+
757
+ if self._prompt_re is not None:
758
+ text_buf = self.toPlainText()
759
+ prompt = self._prompt_re.search(text_buf)
760
+ if prompt is None:
761
+ if self._prompt_str:
762
+ self.prompt.emit(False)
763
+ self._prompt_str = None
764
+ else:
765
+ prompt_str = prompt.string.rstrip()
766
+ if prompt_str != self._prompt_str:
767
+ self._prompt_str = prompt_str
768
+ self.prompt.emit(True)
769
+
653
770
  # did updates, all clean
654
771
  screen.dirty.clear()
655
772
 
@@ -711,7 +828,7 @@ class _TerminalWidget(QtWidgets.QPlainTextEdit):
711
828
  # We are in the parent process.
712
829
  # Set file control
713
830
  fcntl.fcntl(fd, fcntl.F_SETFL, os.O_NONBLOCK)
714
- return fd
831
+ return pid, fd
715
832
 
716
833
 
717
834
  if __name__ == "__main__":
@@ -728,6 +845,24 @@ if __name__ == "__main__":
728
845
 
729
846
  console = BECConsole(mainwin)
730
847
  mainwin.setCentralWidget(console)
848
+
849
+ def check_prompt(at_prompt):
850
+ if at_prompt:
851
+ print("NEW PROMPT")
852
+ else:
853
+ print("EXECUTING SOMETHING...")
854
+
855
+ console.set_prompt_tokens(
856
+ (Token.OutPromptNum, "•"),
857
+ (Token.Prompt, ""), # will match arbitrary string,
858
+ (Token.Prompt, " ["),
859
+ (Token.PromptNum, "3"),
860
+ (Token.Prompt, "/"),
861
+ (Token.PromptNum, "1"),
862
+ (Token.Prompt, "] "),
863
+ (Token.Prompt, "❯❯"),
864
+ )
865
+ console.prompt.connect(check_prompt)
731
866
  console.start()
732
867
 
733
868
  # Show widget and launch Qt's event loop.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 1.6.0
3
+ Version: 1.7.0
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
@@ -2,11 +2,11 @@
2
2
  .gitlab-ci.yml,sha256=bAWGX_NR9rQZmv_bmyLXkEMRreWp0JzVNpsNTxk0NwE,8637
3
3
  .pylintrc,sha256=eeY8YwSI74oFfq6IYIbCqnx3Vk8ZncKaatv96n_Y8Rs,18544
4
4
  .readthedocs.yaml,sha256=aSOc277LqXcsTI6lgvm_JY80lMlr69GbPKgivua2cS0,603
5
- CHANGELOG.md,sha256=rP_mHsOcY94LFhcrRp1KzMa8-oloUwXlsGJvNyoRdOc,7434
5
+ CHANGELOG.md,sha256=-XyIDJ1C204NhjKieHBciyZVtpEQnlqAZgusnhdxU-k,7859
6
6
  LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
7
- PKG-INFO,sha256=2HB-XRVq4chLKrU2LZsMvGQNQCFLyftCLvdNiSpkccM,1308
7
+ PKG-INFO,sha256=0rkaKmhcyUiRQJnmMXE8GgO0BMm8JMEcVGpGzkTwdOc,1308
8
8
  README.md,sha256=Od69x-RS85Hph0-WwWACwal4yUd67XkEn4APEfHhHFw,2649
9
- pyproject.toml,sha256=QcjZWBGoaVccsAkR_wifdqlxLApFyxtKW9cH0B8FAuw,2586
9
+ pyproject.toml,sha256=MH0RsHdGV1exWgR_0BWw67wwFgluGLni_d2Qdn3HlLk,2586
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
@@ -197,7 +197,7 @@ bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_vertical.ui,sha256=LQCQKQMcocd
197
197
  bec_widgets/widgets/dap/lmfit_dialog/register_lm_fit_dialog.py,sha256=7tB1gsvv310_kVuKf2u4EdSR4F1posm7QCrWH5Kih-Q,480
198
198
  bec_widgets/widgets/editors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
199
199
  bec_widgets/widgets/editors/console/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
200
- bec_widgets/widgets/editors/console/console.py,sha256=V_xT5q_yBvstGMBXnocD10MFXmum8l_82HfPD2tj_FE,24581
200
+ bec_widgets/widgets/editors/console/console.py,sha256=RLzN-a2h27NLeQVjJiZRCtngRDPBmsGdouZ22bKbTUE,29327
201
201
  bec_widgets/widgets/editors/console/console.pyproject,sha256=JcoDuZG03g1Bxkd3Aipo7jjLexujfbibIZqXHIgLSWc,26
202
202
  bec_widgets/widgets/editors/console/console_plugin.py,sha256=EvFTruYDVHiS4pHIwZnuEvJhS9eQoktuB_k5mcPuEts,1357
203
203
  bec_widgets/widgets/editors/console/register_console.py,sha256=zoF-i3R9sRGzb85sdoxVunebYOfOD53fkCELTPtrFRc,471
@@ -313,8 +313,8 @@ bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.py,sha256=Z
313
313
  bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.pyproject,sha256=Lbi9zb6HNlIq14k6hlzR-oz6PIFShBuF7QxE6d87d64,34
314
314
  bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button_plugin.py,sha256=CzChz2SSETYsR8-36meqWnsXCT-FIy_J_xeU5coWDY8,1350
315
315
  bec_widgets/widgets/utility/visual/dark_mode_button/register_dark_mode_button.py,sha256=rMpZ1CaoucwobgPj1FuKTnt07W82bV1GaSYdoqcdMb8,521
316
- bec_widgets-1.6.0.dist-info/METADATA,sha256=2HB-XRVq4chLKrU2LZsMvGQNQCFLyftCLvdNiSpkccM,1308
317
- bec_widgets-1.6.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
318
- bec_widgets-1.6.0.dist-info/entry_points.txt,sha256=dItMzmwA1wizJ1Itx15qnfJ0ZzKVYFLVJ1voxT7K7D4,214
319
- bec_widgets-1.6.0.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
320
- bec_widgets-1.6.0.dist-info/RECORD,,
316
+ bec_widgets-1.7.0.dist-info/METADATA,sha256=0rkaKmhcyUiRQJnmMXE8GgO0BMm8JMEcVGpGzkTwdOc,1308
317
+ bec_widgets-1.7.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
318
+ bec_widgets-1.7.0.dist-info/entry_points.txt,sha256=dItMzmwA1wizJ1Itx15qnfJ0ZzKVYFLVJ1voxT7K7D4,214
319
+ bec_widgets-1.7.0.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
320
+ bec_widgets-1.7.0.dist-info/RECORD,,
pyproject.toml CHANGED
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_widgets"
7
- version = "1.6.0"
7
+ version = "1.7.0"
8
8
  description = "BEC Widgets"
9
9
  requires-python = ">=3.10"
10
10
  classifiers = [