pycontrol-gui 3.0.0b2__tar.gz → 3.0.0b3__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.
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/PKG-INFO +2 -2
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/pyproject.toml +2 -2
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/session_controller.py +13 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_session_controller.py +10 -4
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/uv.lock +1 -1
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/.gitignore +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/.python-version +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/CONTRIBUTING.md +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/LICENSE.txt +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/README.md +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/docs/addons.md +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/docs/architecture.md +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/docs/changelog.md +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/docs/maintainability.md +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/docs/plot-addons.md +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/docs/task-controls.md +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/docs/task-sharing.md +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/__init__.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/__main__.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/app.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/app_settings.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/bus_adapter.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/error_logging.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/experiment_handlers.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/gui_gc.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/main_window.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/persistent_variables.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/plotting/__init__.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/plotting/base.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/plotting/default_plotter.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/plotting/host.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/plotting/loader.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/plotting/profiling.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/plotting/widgets/__init__.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/plotting/widgets/analog_plot.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/plotting/widgets/events_plot.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/plotting/widgets/states_plot.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/__init__.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/add.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/bar-graph.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/book.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/circle-arrow-up_white.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/close.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/close_white.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/collapse.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/connect.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/delete.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/detach.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/disconnect.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/down.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/edit.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/enable.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/expand.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/filter.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/folder.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/funnel.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/github.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/help.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/info.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/keyboard.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/left.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/logo.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/mount.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/pause.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/play.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/play_white.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/record_white.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/refresh.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/remove.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/right.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/run_white.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/save.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/save_as.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/settings.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/share.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/stop_white.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/trash.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/up.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/warning.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/wrench.svg +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/sandbox_session.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/session_helpers.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/session_runtime.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/setup_maintenance.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/task_variables.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/update_check.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/__init__.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/about_dialog.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/controls_dialog.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/controls_dialog_editor.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/controls_host.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/controls_mount_controller.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/controls_spec.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/error_log_dialog.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_editor_rows.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_editor_state.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_editor_table.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_run_actions.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_run_models.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_run_outcomes.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_run_plots.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_run_preflight.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_run_summary.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_run_view.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_subject_table.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_variable_values.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_variables_table.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiments_tab.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/file_tree.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/hwdef_selector.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/keyboard_shortcuts_dialog.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/log_filter_controller.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/log_view.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/run_task_tab.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/sandbox_dialog.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/session_controls_shell.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/session_event_ui.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/session_panel.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/session_shutdown_ui.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/session_task_binding.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/settings_dialog.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/setup_variables_dialog.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/setups_tab.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/setups_table.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/share_dialog.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/style.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/subject_run_panel.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/task_selector_widgets.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/task_status.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/welcome_dialog.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/workspace_model.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/workspace_snapshot.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/CLASSIFICATION.md +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/__init__.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/conftest.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/fixtures/controls/LED_controls.json +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/fixtures/controls/LED_controlz.json +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/fixtures/controls/blinker_gui.json +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/fixtures/controls/wheel_controls.json +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/support/__init__.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/support/core_events.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_app.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_bus_adapter.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_controls_dialog.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_controls_editor_round_trip.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_core_import_surface.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_error_log_dialog.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_error_logging.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_experiment_editor_state.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_experiment_run_actions.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_experiment_run_end_to_end.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_experiment_run_plots.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_experiment_run_preflight.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_experiment_run_view.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_experiment_subject_hwdef.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_experiment_variable_values.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_experiments_tab.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_gui_gc.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_log_view.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_main_window_shortcuts.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_model_view_widgets.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_persistent_variables.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_plotting_loader.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_plotting_widgets.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_run_task_tab.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_session_event_ui.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_session_helpers.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_session_runtime.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_settings_dialog.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_setup_maintenance.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_setups_tab.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_share_dialog.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_smoke.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_task_status_widget.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_task_variables.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_update_check.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_welcome_dialog.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_workspace_model.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tests/test_workspace_snapshot.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tools/check_wheels.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tools/run_tests.py +0 -0
- {pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/tools/smoke_installed.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: pycontrol-gui
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.0b3
|
|
4
4
|
Summary: Qt desktop frontend for pycontrol-core.
|
|
5
5
|
Author: Karpova Lab contributors
|
|
6
6
|
License: GPL-3.0-or-later
|
|
@@ -13,7 +13,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
13
13
|
Classifier: Topic :: Scientific/Engineering
|
|
14
14
|
Requires-Python: >=3.12
|
|
15
15
|
Requires-Dist: packaging>=24
|
|
16
|
-
Requires-Dist: pycontrol-core<3.1,>=3.0.
|
|
16
|
+
Requires-Dist: pycontrol-core<3.1,>=3.0.0b2
|
|
17
17
|
Requires-Dist: pyqtgraph>=0.13.7
|
|
18
18
|
Requires-Dist: pyside6>=6.8
|
|
19
19
|
Provides-Extra: test
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pycontrol-gui"
|
|
7
|
-
version = "3.0.
|
|
7
|
+
version = "3.0.0b3"
|
|
8
8
|
description = "Qt desktop frontend for pycontrol-core."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -20,7 +20,7 @@ classifiers = [
|
|
|
20
20
|
]
|
|
21
21
|
dependencies = [
|
|
22
22
|
"packaging>=24",
|
|
23
|
-
"pycontrol-core>=3.0.
|
|
23
|
+
"pycontrol-core>=3.0.0b2,<3.1",
|
|
24
24
|
"PySide6>=6.8",
|
|
25
25
|
"pyqtgraph>=0.13.7",
|
|
26
26
|
]
|
|
@@ -520,6 +520,7 @@ class SessionController(QObject):
|
|
|
520
520
|
self._pending_end = None
|
|
521
521
|
self._end_poll.stop()
|
|
522
522
|
self._handled_session_end_signature = signature
|
|
523
|
+
self._log_run_error(ended)
|
|
523
524
|
self._finish_active_run(ended)
|
|
524
525
|
self.state_changed.emit(session.state)
|
|
525
526
|
self.run_stopped.emit(ended)
|
|
@@ -641,6 +642,18 @@ class SessionController(QObject):
|
|
|
641
642
|
if session.state in (SessionState.CONNECTED, SessionState.READY):
|
|
642
643
|
self._pending_notes.append((note, 0))
|
|
643
644
|
|
|
645
|
+
def _log_run_error(self, ended: SessionEnded) -> None:
|
|
646
|
+
"""Persist a board traceback or lost connection to the error log, not just the run's log view."""
|
|
647
|
+
if not ended.error_message:
|
|
648
|
+
return
|
|
649
|
+
run = self._active_run
|
|
650
|
+
if run is not None:
|
|
651
|
+
where = f"setup {run.plan.setup_name}, subject {run.plan.subject_id}, port {run.plan.port}"
|
|
652
|
+
else:
|
|
653
|
+
where = f"port {self._connected_port}"
|
|
654
|
+
message = ended.error_message.replace("\r\n", "\n").strip()
|
|
655
|
+
logger.error("Run on %s (task %s) ended with an error:\n%s", where, self._last_task_name, message)
|
|
656
|
+
|
|
644
657
|
def _finish_active_run(self, ended: SessionEnded | None = None) -> None:
|
|
645
658
|
"""Close and package the run in flight, if any.
|
|
646
659
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
|
+
import logging
|
|
4
5
|
import types
|
|
5
6
|
import zipfile
|
|
6
7
|
from dataclasses import replace
|
|
@@ -403,7 +404,7 @@ def test_session_controller_hardware_test_does_not_save_data(qtbot, tmp_path: Pa
|
|
|
403
404
|
assert len(bundles) == 1
|
|
404
405
|
|
|
405
406
|
|
|
406
|
-
def test_session_controller_finalizes_run_when_board_reports_error(qtbot, tmp_path: Path) -> None:
|
|
407
|
+
def test_session_controller_finalizes_run_when_board_reports_error(qtbot, tmp_path: Path, caplog) -> None:
|
|
407
408
|
task_path = tmp_path / "task_error.py"
|
|
408
409
|
task_path.write_text("# task fixture\n", encoding="utf-8")
|
|
409
410
|
|
|
@@ -425,13 +426,18 @@ def test_session_controller_finalizes_run_when_board_reports_error(qtbot, tmp_pa
|
|
|
425
426
|
|
|
426
427
|
controller.connect_to("BoxA", "/dev/mock0", None)
|
|
427
428
|
controller.upload_task(str(task_path), "task_error")
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
429
|
+
with caplog.at_level(logging.ERROR, logger="pycontrol_gui.session_controller"):
|
|
430
|
+
controller.start_run("mouse42", "BoxA", "run_task", "")
|
|
431
|
+
_assert_state_seen(qtbot, seen_states, SessionState.STOPPED)
|
|
431
432
|
|
|
432
433
|
assert errors == []
|
|
433
434
|
assert len(run_stopped) == 1
|
|
434
435
|
assert run_stopped[0].error_message == "Traceback: boom"
|
|
436
|
+
# The board traceback also reaches the error log, once, with where it happened.
|
|
437
|
+
[record] = [r for r in caplog.records if "ended with an error" in r.getMessage()]
|
|
438
|
+
assert record.levelno == logging.ERROR
|
|
439
|
+
assert "setup BoxA, subject mouse42" in record.getMessage()
|
|
440
|
+
assert record.getMessage().endswith("Traceback: boom")
|
|
435
441
|
assert "Run stopped" in infos
|
|
436
442
|
# A task error ends the run; the serial link is fine, so the board stays connected.
|
|
437
443
|
assert controller.session is not None
|
|
@@ -141,7 +141,7 @@ provides-extras = ["analysis", "integrations", "lint", "notion", "s3", "slack",
|
|
|
141
141
|
|
|
142
142
|
[[package]]
|
|
143
143
|
name = "pycontrol-gui"
|
|
144
|
-
version = "3.0.
|
|
144
|
+
version = "3.0.0b2"
|
|
145
145
|
source = { editable = "." }
|
|
146
146
|
dependencies = [
|
|
147
147
|
{ name = "packaging" },
|
|
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
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/plotting/default_plotter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/plotting/widgets/__init__.py
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/plotting/widgets/analog_plot.py
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/plotting/widgets/events_plot.py
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/plotting/widgets/states_plot.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/bar-graph.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/close_white.svg
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/collapse.svg
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/connect.svg
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/delete.svg
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/detach.svg
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/disconnect.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/enable.svg
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/expand.svg
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/filter.svg
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/folder.svg
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/funnel.svg
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/github.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/keyboard.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/play_white.svg
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/record_white.svg
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/refresh.svg
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/remove.svg
RENAMED
|
File without changes
|
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/run_white.svg
RENAMED
|
File without changes
|
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/save_as.svg
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/settings.svg
RENAMED
|
File without changes
|
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/stop_white.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/warning.svg
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/resources/icons/wrench.svg
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
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/controls_dialog.py
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/controls_dialog_editor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/error_log_dialog.py
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_editor_rows.py
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_editor_state.py
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_editor_table.py
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_run_actions.py
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_run_models.py
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_run_outcomes.py
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_run_plots.py
RENAMED
|
File without changes
|
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_run_summary.py
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiment_run_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/experiments_tab.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/log_filter_controller.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/session_controls_shell.py
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/session_event_ui.py
RENAMED
|
File without changes
|
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/session_shutdown_ui.py
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/session_task_binding.py
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/settings_dialog.py
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/setup_variables_dialog.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/subject_run_panel.py
RENAMED
|
File without changes
|
{pycontrol_gui-3.0.0b2 → pycontrol_gui-3.0.0b3}/src/pycontrol_gui/widgets/task_selector_widgets.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
|
|
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
|