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 +42 -38
- PKG-INFO +1 -1
- bec_widgets/widgets/editors/console/console.py +140 -5
- {bec_widgets-1.6.0.dist-info → bec_widgets-1.7.0.dist-info}/METADATA +1 -1
- {bec_widgets-1.6.0.dist-info → bec_widgets-1.7.0.dist-info}/RECORD +9 -9
- pyproject.toml +1 -1
- {bec_widgets-1.6.0.dist-info → bec_widgets-1.7.0.dist-info}/WHEEL +0 -0
- {bec_widgets-1.6.0.dist-info → bec_widgets-1.7.0.dist-info}/entry_points.txt +0 -0
- {bec_widgets-1.6.0.dist-info → bec_widgets-1.7.0.dist-info}/licenses/LICENSE +0 -0
CHANGELOG.md
CHANGED
@@ -1,14 +1,32 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
3
|
|
4
|
-
## v1.
|
4
|
+
## v1.7.0 (2024-12-02)
|
5
5
|
|
6
6
|
### Bug Fixes
|
7
7
|
|
8
|
-
- **tests**:
|
9
|
-
([`
|
8
|
+
- **tests**: Add test for Console widget
|
9
|
+
([`da579b6`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/da579b6d213bcdf28c40c1a9e4e2535fdde824fb))
|
10
10
|
|
11
|
-
|
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
|
-
-
|
35
|
-
([`
|
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
|
44
|
-
([`
|
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
|
62
|
-
([`
|
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
@@ -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.
|
@@ -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
|
5
|
+
CHANGELOG.md,sha256=-XyIDJ1C204NhjKieHBciyZVtpEQnlqAZgusnhdxU-k,7859
|
6
6
|
LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
|
7
|
-
PKG-INFO,sha256=
|
7
|
+
PKG-INFO,sha256=0rkaKmhcyUiRQJnmMXE8GgO0BMm8JMEcVGpGzkTwdOc,1308
|
8
8
|
README.md,sha256=Od69x-RS85Hph0-WwWACwal4yUd67XkEn4APEfHhHFw,2649
|
9
|
-
pyproject.toml,sha256=
|
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=
|
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.
|
317
|
-
bec_widgets-1.
|
318
|
-
bec_widgets-1.
|
319
|
-
bec_widgets-1.
|
320
|
-
bec_widgets-1.
|
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
File without changes
|
File without changes
|
File without changes
|