leaf-framework 0.9.6__tar.gz → 0.9.7__tar.gz
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.
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/PKG-INFO +1 -1
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/desktop_launcher.py +12 -28
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/pyproject.toml +1 -1
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/LICENSE +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/README.md +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/__init__.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/adapters/__init__.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/adapters/core_adapters/__init__.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/adapters/core_adapters/continuous_experiment_adapter.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/adapters/core_adapters/discrete_experiment_adapter.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/adapters/core_adapters/upload_adapter.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/adapters/equipment_adapter.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/config/configuration.yaml +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/data/marketplace.yaml +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/error_handler/__init__.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/error_handler/error_holder.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/error_handler/exceptions.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/measurement_handler/__init__.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/measurement_handler/handler.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/measurement_handler/measurements.yaml +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/measurement_handler/terms.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/.gitkeep +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/__init__.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/input_modules/__init__.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/input_modules/ble_watcher.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/input_modules/db_watcher.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/input_modules/event_watcher.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/input_modules/external_api_watcher.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/input_modules/external_event_watcher.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/input_modules/file_watcher.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/input_modules/http_watcher.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/input_modules/modbus_watcher.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/input_modules/mqtt_external_event_watcher.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/input_modules/mqtt_watcher.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/input_modules/opc_watcher.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/input_modules/polling_watcher.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/input_modules/simple_watcher.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/measurement_modules/__init__.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/measurement_modules/carbon_dioxide.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/measurement_modules/dissolved_oxygen.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/measurement_modules/fluorescence.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/measurement_modules/measurement_module.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/measurement_modules/optical_density.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/measurement_modules/ph.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/measurement_modules/temperature.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/output_modules/__init__.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/output_modules/file.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/output_modules/keydb.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/output_modules/mqtt.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/output_modules/output_module.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/output_modules/sql.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/output_modules/topic_store.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/phase_modules/__init__.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/phase_modules/control.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/phase_modules/error.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/phase_modules/external_event_phase.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/phase_modules/initialisation.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/phase_modules/measure.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/phase_modules/phase.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/phase_modules/start.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/phase_modules/stop.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/process_modules/__init__.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/process_modules/continous_module.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/process_modules/discrete_module.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/process_modules/external_event_process.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/process_modules/process_module.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/process_modules/upload_module.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/register/__init__.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/register/abstract_leaf.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/register/equipment_actions.yaml +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/register/equipment_data.yaml +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/register/metadata.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/register/py.typed +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/register/topic_utilities.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/registry/discovery.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/registry/loader.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/registry/registry.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/registry/utils.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/start.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/__init__.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/adapter_ui_extension.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/components/__init__.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/components/header.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/constants.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/images/icon.icns +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/images/icon.ico +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/images/icon.svg +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/interface.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/markdown/configuration_help.md +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/markdown/documentation_main.md +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/markdown/documentation_protips.md +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/scripts.js +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/styles.css +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/tabs/__init__.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/tabs/adapters.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/tabs/configuration.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/tabs/documentation.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/tabs/logs.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/tabs/monitoring.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/ui/utils.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/utility/config_utils.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/utility/logger/__init__.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/utility/logger/logger_utils.py +0 -0
- {leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/utility/running_utilities.py +0 -0
|
@@ -12,28 +12,6 @@ from leaf.utility.logger.logger_utils import get_logger
|
|
|
12
12
|
|
|
13
13
|
logger = get_logger(__name__, log_file="desktop_launcher.log")
|
|
14
14
|
|
|
15
|
-
# Works around a libXcursor/Xlib bug that aborts the whole process on Linux,
|
|
16
|
-
# the first time a tk.Button is created: ButtonCreate -> TkButtonWorldChanged
|
|
17
|
-
# -> Tk_GetBitmap -> ... -> libXcursor's XcursorSupportsARGB ->
|
|
18
|
-
# XRenderQueryExtension -> XQueryExtension -> Xlib's _XSend, which hits
|
|
19
|
-
# `assert(!xcb_xlib_unknown_seq_number)` and aborts. Root-caused via a core
|
|
20
|
-
# dump (gdb, `thread apply all bt`) on a genuine Debian/Xorg reproduction --
|
|
21
|
-
# NOT a threading race (every other thread was idle, blocked on condition
|
|
22
|
-
# variables); the single main thread aborts inside libXcursor's lazy
|
|
23
|
-
# ARGB-cursor/display-info detection, which corrupts Xlib's XCB
|
|
24
|
-
# sequence-number tracking. XLIB_SKIP_ARGB_VISUALS=1 is libXcursor's own
|
|
25
|
-
# documented escape hatch for exactly this, and was confirmed to fix it:
|
|
26
|
-
# without it, LEAF aborted within ~1s of "Starting desktop control panel..."
|
|
27
|
-
# on every run; with it, the full GUI lifecycle (button creation, 40s+
|
|
28
|
-
# runtime, clean shutdown) ran with no crash, in the same environment.
|
|
29
|
-
#
|
|
30
|
-
# Must be set here, before tkinter is ever imported below -- libXcursor
|
|
31
|
-
# reads this once via a load-time constructor and caches it, so setting it
|
|
32
|
-
# via os.environ any later (even right before the first tk.Tk()) is too
|
|
33
|
-
# late and has no effect. Confirmed by direct reproduction.
|
|
34
|
-
if sys.platform.startswith("linux"):
|
|
35
|
-
os.environ.setdefault("XLIB_SKIP_ARGB_VISUALS", "1")
|
|
36
|
-
|
|
37
15
|
# Check if tkinter is available
|
|
38
16
|
try:
|
|
39
17
|
import tkinter as tk
|
|
@@ -50,12 +28,18 @@ def _init_x11_threads() -> None:
|
|
|
50
28
|
|
|
51
29
|
LEAF runs several other threads by the time this GUI starts (the
|
|
52
30
|
NiceGUI web server thread, adapter/simulation threads -- see start.py).
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
31
|
+
Xlib documents XInitThreads() as required before its first use in any
|
|
32
|
+
multi-threaded process regardless of which thread issues X calls, so
|
|
33
|
+
there's no reason to skip it. No equivalent exists on macOS (Cocoa) or
|
|
34
|
+
Windows.
|
|
35
|
+
|
|
36
|
+
Note: a real, 100%-reproducible Linux crash right around here (aborting
|
|
37
|
+
the first time a tk.Button was created, deep inside libX11/libXcursor)
|
|
38
|
+
turned out to be unrelated to threading -- it was a bug in the bundled
|
|
39
|
+
portable Python's statically-linked Tcl/Tk 8.6.12 build, fixed by
|
|
40
|
+
bumping the pinned python-build-standalone release in
|
|
41
|
+
packaging/runtime/fetch_python.py (now bundles Tk 9.0.3). See that
|
|
42
|
+
file's comment for the full root-cause writeup.
|
|
59
43
|
"""
|
|
60
44
|
if not sys.platform.startswith("linux"):
|
|
61
45
|
return
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/input_modules/external_api_watcher.py
RENAMED
|
File without changes
|
{leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/input_modules/external_event_watcher.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/measurement_modules/carbon_dioxide.py
RENAMED
|
File without changes
|
{leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/measurement_modules/dissolved_oxygen.py
RENAMED
|
File without changes
|
{leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/measurement_modules/fluorescence.py
RENAMED
|
File without changes
|
{leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/measurement_modules/measurement_module.py
RENAMED
|
File without changes
|
{leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/measurement_modules/optical_density.py
RENAMED
|
File without changes
|
|
File without changes
|
{leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/measurement_modules/temperature.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/phase_modules/external_event_phase.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/process_modules/continous_module.py
RENAMED
|
File without changes
|
{leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/process_modules/discrete_module.py
RENAMED
|
File without changes
|
{leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/process_modules/external_event_process.py
RENAMED
|
File without changes
|
{leaf_framework-0.9.6 → leaf_framework-0.9.7}/leaf/modules/process_modules/process_module.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|