From f55fe078c9549eb6ea3324f24d42db659ea712c1 Mon Sep 17 00:00:00 2001 From: Michael Langmayr Date: Tue, 10 Mar 2026 17:09:36 -0700 Subject: [PATCH 1/2] restructure repo, mv src/lris2/util to src/driver, mv gui to src/gui, mv tests to /tests, add pyproject.toml, update README and workflows --- .github/workflows/integration.yml | 11 ++- .gitmodules | 16 ++-- README.md | 74 ++++++++++++++++++- pyproject.toml | 28 +++++++ src/__init__.py | 1 + src/driver/__init__.py | 1 + .../util/coo-ethercat => driver/coo_ethercat} | 0 .../util/lris2-csu => driver/lris2_csu} | 0 src/{lris2/util => driver}/sunpower | 0 src/gui/__init__.py | 1 + {gui => src/gui}/demo/maskgui/bar.py | 0 {gui => src/gui}/demo/maskgui/csu_worker.py | 0 {gui => src/gui}/demo/maskgui/main.py | 0 {gui => src/gui}/demo/maskgui/styles.qss | 0 {gui => src/gui}/slitmaskgui/app.py | 0 .../gui}/slitmaskgui/backend/__init__.py | 0 .../gui}/slitmaskgui/backend/input_targets.py | 0 .../gui}/slitmaskgui/backend/mask_gen.py | 0 .../gui}/slitmaskgui/backend/sample.py | 0 .../gui}/slitmaskgui/backend/star_list.py | 0 .../configure_mode/csu_display_widget.py | 0 .../slitmaskgui/configure_mode/csu_worker.py | 0 .../configure_mode/mask_controller.py | 0 .../configure_mode/mode_toggle_button.py | 0 {gui => src/gui}/slitmaskgui/dark_mode.qss | 0 {gui => src/gui}/slitmaskgui/delete.py | 0 {gui => src/gui}/slitmaskgui/light_mode.qss | 0 .../gui}/slitmaskgui/mask_configurations.py | 0 .../gui}/slitmaskgui/mask_gen_widget.py | 0 .../slitmaskgui/mask_widgets/mask_objects.py | 0 .../mask_widgets/mask_view_tab_bar.py | 0 .../slitmaskgui/mask_widgets/sky_viewer.py | 0 .../slitmaskgui/mask_widgets/slitmask_view.py | 0 .../slitmaskgui/mask_widgets/waveband_view.py | 0 {gui => src/gui}/slitmaskgui/menu_bar.py | 0 {gui => src/gui}/slitmaskgui/offline_mode.py | 0 {gui => src/gui}/slitmaskgui/requirements.txt | 0 {gui => src/gui}/slitmaskgui/sky_viewer.py | 0 .../gui}/slitmaskgui/slit_position_table.py | 0 .../gui}/slitmaskgui/target_list_widget.py | 0 .../gui/slitmaskgui}/__init__.py | 0 .../gui/slitmaskgui}/test_input_targets.py | 0 .../slitmaskgui}/test_mask_configurations.py | 0 .../gui/slitmaskgui}/test_offline_mode.py | 0 .../slitmaskgui}/test_slit_position_table.py | 0 .../gui/slitmaskgui}/test_star_list.py | 0 .../testfiles/gaia_mask_config.json | 0 .../slitmaskgui}/testfiles/gaia_starlist.txt | 0 .../testfiles/gaia_target_list.json | 0 .../slitmaskgui}/testfiles/make_much_stars.py | 0 50 files changed, 117 insertions(+), 15 deletions(-) create mode 100644 pyproject.toml create mode 100644 src/__init__.py create mode 100644 src/driver/__init__.py rename src/{lris2/util/coo-ethercat => driver/coo_ethercat} (100%) rename src/{lris2/util/lris2-csu => driver/lris2_csu} (100%) rename src/{lris2/util => driver}/sunpower (100%) create mode 100644 src/gui/__init__.py rename {gui => src/gui}/demo/maskgui/bar.py (100%) rename {gui => src/gui}/demo/maskgui/csu_worker.py (100%) rename {gui => src/gui}/demo/maskgui/main.py (100%) rename {gui => src/gui}/demo/maskgui/styles.qss (100%) rename {gui => src/gui}/slitmaskgui/app.py (100%) rename {gui => src/gui}/slitmaskgui/backend/__init__.py (100%) rename {gui => src/gui}/slitmaskgui/backend/input_targets.py (100%) rename {gui => src/gui}/slitmaskgui/backend/mask_gen.py (100%) rename {gui => src/gui}/slitmaskgui/backend/sample.py (100%) rename {gui => src/gui}/slitmaskgui/backend/star_list.py (100%) rename {gui => src/gui}/slitmaskgui/configure_mode/csu_display_widget.py (100%) rename {gui => src/gui}/slitmaskgui/configure_mode/csu_worker.py (100%) rename {gui => src/gui}/slitmaskgui/configure_mode/mask_controller.py (100%) rename {gui => src/gui}/slitmaskgui/configure_mode/mode_toggle_button.py (100%) rename {gui => src/gui}/slitmaskgui/dark_mode.qss (100%) rename {gui => src/gui}/slitmaskgui/delete.py (100%) rename {gui => src/gui}/slitmaskgui/light_mode.qss (100%) rename {gui => src/gui}/slitmaskgui/mask_configurations.py (100%) rename {gui => src/gui}/slitmaskgui/mask_gen_widget.py (100%) rename {gui => src/gui}/slitmaskgui/mask_widgets/mask_objects.py (100%) rename {gui => src/gui}/slitmaskgui/mask_widgets/mask_view_tab_bar.py (100%) rename {gui => src/gui}/slitmaskgui/mask_widgets/sky_viewer.py (100%) rename {gui => src/gui}/slitmaskgui/mask_widgets/slitmask_view.py (100%) rename {gui => src/gui}/slitmaskgui/mask_widgets/waveband_view.py (100%) rename {gui => src/gui}/slitmaskgui/menu_bar.py (100%) rename {gui => src/gui}/slitmaskgui/offline_mode.py (100%) rename {gui => src/gui}/slitmaskgui/requirements.txt (100%) rename {gui => src/gui}/slitmaskgui/sky_viewer.py (100%) rename {gui => src/gui}/slitmaskgui/slit_position_table.py (100%) rename {gui => src/gui}/slitmaskgui/target_list_widget.py (100%) rename {gui/slitmaskgui/tests => tests/gui/slitmaskgui}/__init__.py (100%) rename {gui/slitmaskgui/tests => tests/gui/slitmaskgui}/test_input_targets.py (100%) rename {gui/slitmaskgui/tests => tests/gui/slitmaskgui}/test_mask_configurations.py (100%) rename {gui/slitmaskgui/tests => tests/gui/slitmaskgui}/test_offline_mode.py (100%) rename {gui/slitmaskgui/tests => tests/gui/slitmaskgui}/test_slit_position_table.py (100%) rename {gui/slitmaskgui/tests => tests/gui/slitmaskgui}/test_star_list.py (100%) rename {gui/slitmaskgui/tests => tests/gui/slitmaskgui}/testfiles/gaia_mask_config.json (100%) rename {gui/slitmaskgui/tests => tests/gui/slitmaskgui}/testfiles/gaia_starlist.txt (100%) rename {gui/slitmaskgui/tests => tests/gui/slitmaskgui}/testfiles/gaia_target_list.json (100%) rename {gui/slitmaskgui/tests => tests/gui/slitmaskgui}/testfiles/make_much_stars.py (100%) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 07e6c76..8df8b59 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -32,17 +32,16 @@ jobs: pip install flake8 pytest Pyqt6 pytest-qt sudo apt-get update sudo apt-get install -y libegl1 xvfb - if [ -f slitmaskgui/requirements.txt ]; then pip install -r slitmaskgui/requirements.txt; fi + if [ -f src/gui/slitmaskgui/requirements.txt ]; then pip install -r src/gui/slitmaskgui/requirements.txt; fi - name: Lint with flake8 run: | source .venv/bin/activate - flake8 slitmaskgui/ --count --select=E9,F63,F7,F82 --show-source --statistics --exclude=.venv - flake8 slitmaskgui/ --count --exit-zero --max-complexity=10 --statistics #--max-line-length=120 --exclude=.venv - + flake8 src/gui/slitmaskgui/ --count --select=E9,F63,F7,F82 --show-source --statistics --exclude=.venv + flake8 src/gui/slitmaskgui/ --count --exit-zero --max-complexity=10 --statistics + - name: Test run: | source .venv/bin/activate export QT_QPA_PLATFORM=offscreen - xvfb-run -a python3 -m pytest slitmaskgui/tests/ - #test: + xvfb-run -a python3 -m pytest tests/ diff --git a/.gitmodules b/.gitmodules index 98b658d..7b4cb61 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,9 @@ -[submodule "src/lris2/util/lris2-csu"] - path = src/lris2/util/lris2-csu - url = git@github.com:CaltechOpticalObservatories/lris2-csu.git -[submodule "src/lris2/util/coo-ethercat"] - path = src/lris2/util/coo-ethercat - url = git@github.com:CaltechOpticalObservatories/coo-ethercat.git -[submodule "src/lris2/util/sunpower"] - path = src/lris2/util/sunpower +[submodule "src/driver/sunpower"] + path = src/driver/sunpower url = git@github.com:COO-Utilities/sunpower.git +[submodule "src/driver/coo_ethercat"] + path = src/driver/coo_ethercat + url = git@github.com:CaltechOpticalObservatories/coo-ethercat.git +[submodule "src/driver/lris2_csu"] + path = src/driver/lris2_csu + url = git@github.com:CaltechOpticalObservatories/lris2-csu.git diff --git a/README.md b/README.md index b1198e7..65b6c92 100644 --- a/README.md +++ b/README.md @@ -1 +1,73 @@ -# lris2 \ No newline at end of file +# lris2 + +LRIS2 Instrument Control Software + +## Structure + +- `daemons/` – mKTL service daemons +- `scripts/` – AIT and utility scripts +- `src/driver/` – Hardware driver submodules +- `src/gui/` – Graphical interfaces (`slitmaskgui`, `demo`) +- `tests/` – Unit tests (mirrors `src/` structure) + +## Quick start + +```bash +# 1) Clone +git clone +cd lris2 + +# 2) Make sure submodule URLs are in sync +git submodule sync --recursive +git submodule update --init --recursive + +# 3) Install the package for development +pip install -U pip +pip install -e ".[dev]" +``` + +## Submodules + +This repo uses submodules under `src/driver/`: + +| Submodule | Path | Import | +|-----------|------|--------| +| coo-ethercat | `src/driver/coo_ethercat` | `lris2.driver.coo_ethercat` | +| lris2-csu | `src/driver/lris2_csu` | `lris2.driver.lris2_csu` | +| sunpower | `src/driver/sunpower` | `lris2.driver.sunpower` | + +### Pull the submodules + +```bash +git submodule sync --recursive +git submodule update --init --recursive +``` + +### Update to the latest on a tracked branch (e.g., main) + +> Only do this if you intend to move submodule pointers and commit them. + +```bash +# One-off refresh to submodules' tracked branches +git submodule update --remote --merge --recursive + +# Record updated pointers in parent repo +git add .gitmodules . +git commit -m "Update submodules to latest on main" +``` + +## Testing + +Tests mirror the `src/` layout under `tests/`. + +To run tests from the project root: + +```bash +pytest +``` + +## Contributing + +1. Create a feature branch. +2. Include tests for new behavior. +3. Run `pytest` before opening a PR. \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..2cb4b65 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,28 @@ +[build-system] +requires = ["setuptools>=42"] +build-backend = "setuptools.build_meta" + +[project] +name = "lris2" +version = "0.1.0" +description = "LRIS2 Instrument Control Software" +requires-python = ">=3.12" +authors = [ + {name = "Michael Langmayr", email = "langmayr@caltech.edu"} +] +license = {text = "MIT"} +readme = "README.md" + +[project.optional-dependencies] +dev = [ + "pytest", +] + +[tool.setuptools.package-dir] +lris2 = "src" + +[tool.setuptools] +packages = ["lris2", "lris2.driver", "lris2.gui"] + +[tool.pytest.ini_options] +testpaths = ["tests"] diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..76fa704 --- /dev/null +++ b/src/__init__.py @@ -0,0 +1 @@ +"""LRIS2 Instrument Control Software.""" diff --git a/src/driver/__init__.py b/src/driver/__init__.py new file mode 100644 index 0000000..3feaf16 --- /dev/null +++ b/src/driver/__init__.py @@ -0,0 +1 @@ +"""LRIS2 hardware driver submodules.""" diff --git a/src/lris2/util/coo-ethercat b/src/driver/coo_ethercat similarity index 100% rename from src/lris2/util/coo-ethercat rename to src/driver/coo_ethercat diff --git a/src/lris2/util/lris2-csu b/src/driver/lris2_csu similarity index 100% rename from src/lris2/util/lris2-csu rename to src/driver/lris2_csu diff --git a/src/lris2/util/sunpower b/src/driver/sunpower similarity index 100% rename from src/lris2/util/sunpower rename to src/driver/sunpower diff --git a/src/gui/__init__.py b/src/gui/__init__.py new file mode 100644 index 0000000..971f589 --- /dev/null +++ b/src/gui/__init__.py @@ -0,0 +1 @@ +"""LRIS2 graphical interfaces.""" diff --git a/gui/demo/maskgui/bar.py b/src/gui/demo/maskgui/bar.py similarity index 100% rename from gui/demo/maskgui/bar.py rename to src/gui/demo/maskgui/bar.py diff --git a/gui/demo/maskgui/csu_worker.py b/src/gui/demo/maskgui/csu_worker.py similarity index 100% rename from gui/demo/maskgui/csu_worker.py rename to src/gui/demo/maskgui/csu_worker.py diff --git a/gui/demo/maskgui/main.py b/src/gui/demo/maskgui/main.py similarity index 100% rename from gui/demo/maskgui/main.py rename to src/gui/demo/maskgui/main.py diff --git a/gui/demo/maskgui/styles.qss b/src/gui/demo/maskgui/styles.qss similarity index 100% rename from gui/demo/maskgui/styles.qss rename to src/gui/demo/maskgui/styles.qss diff --git a/gui/slitmaskgui/app.py b/src/gui/slitmaskgui/app.py similarity index 100% rename from gui/slitmaskgui/app.py rename to src/gui/slitmaskgui/app.py diff --git a/gui/slitmaskgui/backend/__init__.py b/src/gui/slitmaskgui/backend/__init__.py similarity index 100% rename from gui/slitmaskgui/backend/__init__.py rename to src/gui/slitmaskgui/backend/__init__.py diff --git a/gui/slitmaskgui/backend/input_targets.py b/src/gui/slitmaskgui/backend/input_targets.py similarity index 100% rename from gui/slitmaskgui/backend/input_targets.py rename to src/gui/slitmaskgui/backend/input_targets.py diff --git a/gui/slitmaskgui/backend/mask_gen.py b/src/gui/slitmaskgui/backend/mask_gen.py similarity index 100% rename from gui/slitmaskgui/backend/mask_gen.py rename to src/gui/slitmaskgui/backend/mask_gen.py diff --git a/gui/slitmaskgui/backend/sample.py b/src/gui/slitmaskgui/backend/sample.py similarity index 100% rename from gui/slitmaskgui/backend/sample.py rename to src/gui/slitmaskgui/backend/sample.py diff --git a/gui/slitmaskgui/backend/star_list.py b/src/gui/slitmaskgui/backend/star_list.py similarity index 100% rename from gui/slitmaskgui/backend/star_list.py rename to src/gui/slitmaskgui/backend/star_list.py diff --git a/gui/slitmaskgui/configure_mode/csu_display_widget.py b/src/gui/slitmaskgui/configure_mode/csu_display_widget.py similarity index 100% rename from gui/slitmaskgui/configure_mode/csu_display_widget.py rename to src/gui/slitmaskgui/configure_mode/csu_display_widget.py diff --git a/gui/slitmaskgui/configure_mode/csu_worker.py b/src/gui/slitmaskgui/configure_mode/csu_worker.py similarity index 100% rename from gui/slitmaskgui/configure_mode/csu_worker.py rename to src/gui/slitmaskgui/configure_mode/csu_worker.py diff --git a/gui/slitmaskgui/configure_mode/mask_controller.py b/src/gui/slitmaskgui/configure_mode/mask_controller.py similarity index 100% rename from gui/slitmaskgui/configure_mode/mask_controller.py rename to src/gui/slitmaskgui/configure_mode/mask_controller.py diff --git a/gui/slitmaskgui/configure_mode/mode_toggle_button.py b/src/gui/slitmaskgui/configure_mode/mode_toggle_button.py similarity index 100% rename from gui/slitmaskgui/configure_mode/mode_toggle_button.py rename to src/gui/slitmaskgui/configure_mode/mode_toggle_button.py diff --git a/gui/slitmaskgui/dark_mode.qss b/src/gui/slitmaskgui/dark_mode.qss similarity index 100% rename from gui/slitmaskgui/dark_mode.qss rename to src/gui/slitmaskgui/dark_mode.qss diff --git a/gui/slitmaskgui/delete.py b/src/gui/slitmaskgui/delete.py similarity index 100% rename from gui/slitmaskgui/delete.py rename to src/gui/slitmaskgui/delete.py diff --git a/gui/slitmaskgui/light_mode.qss b/src/gui/slitmaskgui/light_mode.qss similarity index 100% rename from gui/slitmaskgui/light_mode.qss rename to src/gui/slitmaskgui/light_mode.qss diff --git a/gui/slitmaskgui/mask_configurations.py b/src/gui/slitmaskgui/mask_configurations.py similarity index 100% rename from gui/slitmaskgui/mask_configurations.py rename to src/gui/slitmaskgui/mask_configurations.py diff --git a/gui/slitmaskgui/mask_gen_widget.py b/src/gui/slitmaskgui/mask_gen_widget.py similarity index 100% rename from gui/slitmaskgui/mask_gen_widget.py rename to src/gui/slitmaskgui/mask_gen_widget.py diff --git a/gui/slitmaskgui/mask_widgets/mask_objects.py b/src/gui/slitmaskgui/mask_widgets/mask_objects.py similarity index 100% rename from gui/slitmaskgui/mask_widgets/mask_objects.py rename to src/gui/slitmaskgui/mask_widgets/mask_objects.py diff --git a/gui/slitmaskgui/mask_widgets/mask_view_tab_bar.py b/src/gui/slitmaskgui/mask_widgets/mask_view_tab_bar.py similarity index 100% rename from gui/slitmaskgui/mask_widgets/mask_view_tab_bar.py rename to src/gui/slitmaskgui/mask_widgets/mask_view_tab_bar.py diff --git a/gui/slitmaskgui/mask_widgets/sky_viewer.py b/src/gui/slitmaskgui/mask_widgets/sky_viewer.py similarity index 100% rename from gui/slitmaskgui/mask_widgets/sky_viewer.py rename to src/gui/slitmaskgui/mask_widgets/sky_viewer.py diff --git a/gui/slitmaskgui/mask_widgets/slitmask_view.py b/src/gui/slitmaskgui/mask_widgets/slitmask_view.py similarity index 100% rename from gui/slitmaskgui/mask_widgets/slitmask_view.py rename to src/gui/slitmaskgui/mask_widgets/slitmask_view.py diff --git a/gui/slitmaskgui/mask_widgets/waveband_view.py b/src/gui/slitmaskgui/mask_widgets/waveband_view.py similarity index 100% rename from gui/slitmaskgui/mask_widgets/waveband_view.py rename to src/gui/slitmaskgui/mask_widgets/waveband_view.py diff --git a/gui/slitmaskgui/menu_bar.py b/src/gui/slitmaskgui/menu_bar.py similarity index 100% rename from gui/slitmaskgui/menu_bar.py rename to src/gui/slitmaskgui/menu_bar.py diff --git a/gui/slitmaskgui/offline_mode.py b/src/gui/slitmaskgui/offline_mode.py similarity index 100% rename from gui/slitmaskgui/offline_mode.py rename to src/gui/slitmaskgui/offline_mode.py diff --git a/gui/slitmaskgui/requirements.txt b/src/gui/slitmaskgui/requirements.txt similarity index 100% rename from gui/slitmaskgui/requirements.txt rename to src/gui/slitmaskgui/requirements.txt diff --git a/gui/slitmaskgui/sky_viewer.py b/src/gui/slitmaskgui/sky_viewer.py similarity index 100% rename from gui/slitmaskgui/sky_viewer.py rename to src/gui/slitmaskgui/sky_viewer.py diff --git a/gui/slitmaskgui/slit_position_table.py b/src/gui/slitmaskgui/slit_position_table.py similarity index 100% rename from gui/slitmaskgui/slit_position_table.py rename to src/gui/slitmaskgui/slit_position_table.py diff --git a/gui/slitmaskgui/target_list_widget.py b/src/gui/slitmaskgui/target_list_widget.py similarity index 100% rename from gui/slitmaskgui/target_list_widget.py rename to src/gui/slitmaskgui/target_list_widget.py diff --git a/gui/slitmaskgui/tests/__init__.py b/tests/gui/slitmaskgui/__init__.py similarity index 100% rename from gui/slitmaskgui/tests/__init__.py rename to tests/gui/slitmaskgui/__init__.py diff --git a/gui/slitmaskgui/tests/test_input_targets.py b/tests/gui/slitmaskgui/test_input_targets.py similarity index 100% rename from gui/slitmaskgui/tests/test_input_targets.py rename to tests/gui/slitmaskgui/test_input_targets.py diff --git a/gui/slitmaskgui/tests/test_mask_configurations.py b/tests/gui/slitmaskgui/test_mask_configurations.py similarity index 100% rename from gui/slitmaskgui/tests/test_mask_configurations.py rename to tests/gui/slitmaskgui/test_mask_configurations.py diff --git a/gui/slitmaskgui/tests/test_offline_mode.py b/tests/gui/slitmaskgui/test_offline_mode.py similarity index 100% rename from gui/slitmaskgui/tests/test_offline_mode.py rename to tests/gui/slitmaskgui/test_offline_mode.py diff --git a/gui/slitmaskgui/tests/test_slit_position_table.py b/tests/gui/slitmaskgui/test_slit_position_table.py similarity index 100% rename from gui/slitmaskgui/tests/test_slit_position_table.py rename to tests/gui/slitmaskgui/test_slit_position_table.py diff --git a/gui/slitmaskgui/tests/test_star_list.py b/tests/gui/slitmaskgui/test_star_list.py similarity index 100% rename from gui/slitmaskgui/tests/test_star_list.py rename to tests/gui/slitmaskgui/test_star_list.py diff --git a/gui/slitmaskgui/tests/testfiles/gaia_mask_config.json b/tests/gui/slitmaskgui/testfiles/gaia_mask_config.json similarity index 100% rename from gui/slitmaskgui/tests/testfiles/gaia_mask_config.json rename to tests/gui/slitmaskgui/testfiles/gaia_mask_config.json diff --git a/gui/slitmaskgui/tests/testfiles/gaia_starlist.txt b/tests/gui/slitmaskgui/testfiles/gaia_starlist.txt similarity index 100% rename from gui/slitmaskgui/tests/testfiles/gaia_starlist.txt rename to tests/gui/slitmaskgui/testfiles/gaia_starlist.txt diff --git a/gui/slitmaskgui/tests/testfiles/gaia_target_list.json b/tests/gui/slitmaskgui/testfiles/gaia_target_list.json similarity index 100% rename from gui/slitmaskgui/tests/testfiles/gaia_target_list.json rename to tests/gui/slitmaskgui/testfiles/gaia_target_list.json diff --git a/gui/slitmaskgui/tests/testfiles/make_much_stars.py b/tests/gui/slitmaskgui/testfiles/make_much_stars.py similarity index 100% rename from gui/slitmaskgui/tests/testfiles/make_much_stars.py rename to tests/gui/slitmaskgui/testfiles/make_much_stars.py From a4ea3a62976585bc95dfbc531ecdb050b8dca591 Mon Sep 17 00:00:00 2001 From: Michael Langmayr Date: Tue, 10 Mar 2026 17:31:20 -0700 Subject: [PATCH 2/2] move gui out of src folder, add gui to python path so tests can access gui --- .github/workflows/integration.yml | 6 +++--- README.md | 4 ++-- {src/gui => gui}/demo/maskgui/bar.py | 0 {src/gui => gui}/demo/maskgui/csu_worker.py | 0 {src/gui => gui}/demo/maskgui/main.py | 0 {src/gui => gui}/demo/maskgui/styles.qss | 0 .../gui/slitmaskgui/backend => gui/slitmaskgui}/__init__.py | 0 {src/gui => gui}/slitmaskgui/app.py | 0 .../gui/slitmaskgui => gui/slitmaskgui/backend}/__init__.py | 0 {src/gui => gui}/slitmaskgui/backend/input_targets.py | 0 {src/gui => gui}/slitmaskgui/backend/mask_gen.py | 0 {src/gui => gui}/slitmaskgui/backend/sample.py | 0 {src/gui => gui}/slitmaskgui/backend/star_list.py | 0 .../slitmaskgui/configure_mode/csu_display_widget.py | 0 {src/gui => gui}/slitmaskgui/configure_mode/csu_worker.py | 0 .../slitmaskgui/configure_mode/mask_controller.py | 0 .../slitmaskgui/configure_mode/mode_toggle_button.py | 0 {src/gui => gui}/slitmaskgui/dark_mode.qss | 0 {src/gui => gui}/slitmaskgui/delete.py | 0 {src/gui => gui}/slitmaskgui/light_mode.qss | 0 {src/gui => gui}/slitmaskgui/mask_configurations.py | 0 {src/gui => gui}/slitmaskgui/mask_gen_widget.py | 0 {src/gui => gui}/slitmaskgui/mask_widgets/mask_objects.py | 0 .../slitmaskgui/mask_widgets/mask_view_tab_bar.py | 0 {src/gui => gui}/slitmaskgui/mask_widgets/sky_viewer.py | 0 {src/gui => gui}/slitmaskgui/mask_widgets/slitmask_view.py | 0 {src/gui => gui}/slitmaskgui/mask_widgets/waveband_view.py | 0 {src/gui => gui}/slitmaskgui/menu_bar.py | 0 {src/gui => gui}/slitmaskgui/offline_mode.py | 0 {src/gui => gui}/slitmaskgui/requirements.txt | 0 {src/gui => gui}/slitmaskgui/sky_viewer.py | 0 {src/gui => gui}/slitmaskgui/slit_position_table.py | 0 {src/gui => gui}/slitmaskgui/target_list_widget.py | 0 pyproject.toml | 3 ++- src/gui/__init__.py | 1 - 35 files changed, 7 insertions(+), 7 deletions(-) rename {src/gui => gui}/demo/maskgui/bar.py (100%) rename {src/gui => gui}/demo/maskgui/csu_worker.py (100%) rename {src/gui => gui}/demo/maskgui/main.py (100%) rename {src/gui => gui}/demo/maskgui/styles.qss (100%) rename {src/gui/slitmaskgui/backend => gui/slitmaskgui}/__init__.py (100%) rename {src/gui => gui}/slitmaskgui/app.py (100%) rename {tests/gui/slitmaskgui => gui/slitmaskgui/backend}/__init__.py (100%) rename {src/gui => gui}/slitmaskgui/backend/input_targets.py (100%) rename {src/gui => gui}/slitmaskgui/backend/mask_gen.py (100%) rename {src/gui => gui}/slitmaskgui/backend/sample.py (100%) rename {src/gui => gui}/slitmaskgui/backend/star_list.py (100%) rename {src/gui => gui}/slitmaskgui/configure_mode/csu_display_widget.py (100%) rename {src/gui => gui}/slitmaskgui/configure_mode/csu_worker.py (100%) rename {src/gui => gui}/slitmaskgui/configure_mode/mask_controller.py (100%) rename {src/gui => gui}/slitmaskgui/configure_mode/mode_toggle_button.py (100%) rename {src/gui => gui}/slitmaskgui/dark_mode.qss (100%) rename {src/gui => gui}/slitmaskgui/delete.py (100%) rename {src/gui => gui}/slitmaskgui/light_mode.qss (100%) rename {src/gui => gui}/slitmaskgui/mask_configurations.py (100%) rename {src/gui => gui}/slitmaskgui/mask_gen_widget.py (100%) rename {src/gui => gui}/slitmaskgui/mask_widgets/mask_objects.py (100%) rename {src/gui => gui}/slitmaskgui/mask_widgets/mask_view_tab_bar.py (100%) rename {src/gui => gui}/slitmaskgui/mask_widgets/sky_viewer.py (100%) rename {src/gui => gui}/slitmaskgui/mask_widgets/slitmask_view.py (100%) rename {src/gui => gui}/slitmaskgui/mask_widgets/waveband_view.py (100%) rename {src/gui => gui}/slitmaskgui/menu_bar.py (100%) rename {src/gui => gui}/slitmaskgui/offline_mode.py (100%) rename {src/gui => gui}/slitmaskgui/requirements.txt (100%) rename {src/gui => gui}/slitmaskgui/sky_viewer.py (100%) rename {src/gui => gui}/slitmaskgui/slit_position_table.py (100%) rename {src/gui => gui}/slitmaskgui/target_list_widget.py (100%) delete mode 100644 src/gui/__init__.py diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 8df8b59..aa1f12f 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -32,13 +32,13 @@ jobs: pip install flake8 pytest Pyqt6 pytest-qt sudo apt-get update sudo apt-get install -y libegl1 xvfb - if [ -f src/gui/slitmaskgui/requirements.txt ]; then pip install -r src/gui/slitmaskgui/requirements.txt; fi + if [ -f gui/slitmaskgui/requirements.txt ]; then pip install -r gui/slitmaskgui/requirements.txt; fi - name: Lint with flake8 run: | source .venv/bin/activate - flake8 src/gui/slitmaskgui/ --count --select=E9,F63,F7,F82 --show-source --statistics --exclude=.venv - flake8 src/gui/slitmaskgui/ --count --exit-zero --max-complexity=10 --statistics + flake8 gui/slitmaskgui/ --count --select=E9,F63,F7,F82 --show-source --statistics --exclude=.venv + flake8 gui/slitmaskgui/ --count --exit-zero --max-complexity=10 --statistics - name: Test run: | diff --git a/README.md b/README.md index 65b6c92..c29dd1a 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,10 @@ LRIS2 Instrument Control Software ## Structure - `daemons/` – mKTL service daemons +- `gui/` – Graphical interfaces (`slitmaskgui`, `demo`) - `scripts/` – AIT and utility scripts - `src/driver/` – Hardware driver submodules -- `src/gui/` – Graphical interfaces (`slitmaskgui`, `demo`) -- `tests/` – Unit tests (mirrors `src/` structure) +- `tests/` – Unit tests ## Quick start diff --git a/src/gui/demo/maskgui/bar.py b/gui/demo/maskgui/bar.py similarity index 100% rename from src/gui/demo/maskgui/bar.py rename to gui/demo/maskgui/bar.py diff --git a/src/gui/demo/maskgui/csu_worker.py b/gui/demo/maskgui/csu_worker.py similarity index 100% rename from src/gui/demo/maskgui/csu_worker.py rename to gui/demo/maskgui/csu_worker.py diff --git a/src/gui/demo/maskgui/main.py b/gui/demo/maskgui/main.py similarity index 100% rename from src/gui/demo/maskgui/main.py rename to gui/demo/maskgui/main.py diff --git a/src/gui/demo/maskgui/styles.qss b/gui/demo/maskgui/styles.qss similarity index 100% rename from src/gui/demo/maskgui/styles.qss rename to gui/demo/maskgui/styles.qss diff --git a/src/gui/slitmaskgui/backend/__init__.py b/gui/slitmaskgui/__init__.py similarity index 100% rename from src/gui/slitmaskgui/backend/__init__.py rename to gui/slitmaskgui/__init__.py diff --git a/src/gui/slitmaskgui/app.py b/gui/slitmaskgui/app.py similarity index 100% rename from src/gui/slitmaskgui/app.py rename to gui/slitmaskgui/app.py diff --git a/tests/gui/slitmaskgui/__init__.py b/gui/slitmaskgui/backend/__init__.py similarity index 100% rename from tests/gui/slitmaskgui/__init__.py rename to gui/slitmaskgui/backend/__init__.py diff --git a/src/gui/slitmaskgui/backend/input_targets.py b/gui/slitmaskgui/backend/input_targets.py similarity index 100% rename from src/gui/slitmaskgui/backend/input_targets.py rename to gui/slitmaskgui/backend/input_targets.py diff --git a/src/gui/slitmaskgui/backend/mask_gen.py b/gui/slitmaskgui/backend/mask_gen.py similarity index 100% rename from src/gui/slitmaskgui/backend/mask_gen.py rename to gui/slitmaskgui/backend/mask_gen.py diff --git a/src/gui/slitmaskgui/backend/sample.py b/gui/slitmaskgui/backend/sample.py similarity index 100% rename from src/gui/slitmaskgui/backend/sample.py rename to gui/slitmaskgui/backend/sample.py diff --git a/src/gui/slitmaskgui/backend/star_list.py b/gui/slitmaskgui/backend/star_list.py similarity index 100% rename from src/gui/slitmaskgui/backend/star_list.py rename to gui/slitmaskgui/backend/star_list.py diff --git a/src/gui/slitmaskgui/configure_mode/csu_display_widget.py b/gui/slitmaskgui/configure_mode/csu_display_widget.py similarity index 100% rename from src/gui/slitmaskgui/configure_mode/csu_display_widget.py rename to gui/slitmaskgui/configure_mode/csu_display_widget.py diff --git a/src/gui/slitmaskgui/configure_mode/csu_worker.py b/gui/slitmaskgui/configure_mode/csu_worker.py similarity index 100% rename from src/gui/slitmaskgui/configure_mode/csu_worker.py rename to gui/slitmaskgui/configure_mode/csu_worker.py diff --git a/src/gui/slitmaskgui/configure_mode/mask_controller.py b/gui/slitmaskgui/configure_mode/mask_controller.py similarity index 100% rename from src/gui/slitmaskgui/configure_mode/mask_controller.py rename to gui/slitmaskgui/configure_mode/mask_controller.py diff --git a/src/gui/slitmaskgui/configure_mode/mode_toggle_button.py b/gui/slitmaskgui/configure_mode/mode_toggle_button.py similarity index 100% rename from src/gui/slitmaskgui/configure_mode/mode_toggle_button.py rename to gui/slitmaskgui/configure_mode/mode_toggle_button.py diff --git a/src/gui/slitmaskgui/dark_mode.qss b/gui/slitmaskgui/dark_mode.qss similarity index 100% rename from src/gui/slitmaskgui/dark_mode.qss rename to gui/slitmaskgui/dark_mode.qss diff --git a/src/gui/slitmaskgui/delete.py b/gui/slitmaskgui/delete.py similarity index 100% rename from src/gui/slitmaskgui/delete.py rename to gui/slitmaskgui/delete.py diff --git a/src/gui/slitmaskgui/light_mode.qss b/gui/slitmaskgui/light_mode.qss similarity index 100% rename from src/gui/slitmaskgui/light_mode.qss rename to gui/slitmaskgui/light_mode.qss diff --git a/src/gui/slitmaskgui/mask_configurations.py b/gui/slitmaskgui/mask_configurations.py similarity index 100% rename from src/gui/slitmaskgui/mask_configurations.py rename to gui/slitmaskgui/mask_configurations.py diff --git a/src/gui/slitmaskgui/mask_gen_widget.py b/gui/slitmaskgui/mask_gen_widget.py similarity index 100% rename from src/gui/slitmaskgui/mask_gen_widget.py rename to gui/slitmaskgui/mask_gen_widget.py diff --git a/src/gui/slitmaskgui/mask_widgets/mask_objects.py b/gui/slitmaskgui/mask_widgets/mask_objects.py similarity index 100% rename from src/gui/slitmaskgui/mask_widgets/mask_objects.py rename to gui/slitmaskgui/mask_widgets/mask_objects.py diff --git a/src/gui/slitmaskgui/mask_widgets/mask_view_tab_bar.py b/gui/slitmaskgui/mask_widgets/mask_view_tab_bar.py similarity index 100% rename from src/gui/slitmaskgui/mask_widgets/mask_view_tab_bar.py rename to gui/slitmaskgui/mask_widgets/mask_view_tab_bar.py diff --git a/src/gui/slitmaskgui/mask_widgets/sky_viewer.py b/gui/slitmaskgui/mask_widgets/sky_viewer.py similarity index 100% rename from src/gui/slitmaskgui/mask_widgets/sky_viewer.py rename to gui/slitmaskgui/mask_widgets/sky_viewer.py diff --git a/src/gui/slitmaskgui/mask_widgets/slitmask_view.py b/gui/slitmaskgui/mask_widgets/slitmask_view.py similarity index 100% rename from src/gui/slitmaskgui/mask_widgets/slitmask_view.py rename to gui/slitmaskgui/mask_widgets/slitmask_view.py diff --git a/src/gui/slitmaskgui/mask_widgets/waveband_view.py b/gui/slitmaskgui/mask_widgets/waveband_view.py similarity index 100% rename from src/gui/slitmaskgui/mask_widgets/waveband_view.py rename to gui/slitmaskgui/mask_widgets/waveband_view.py diff --git a/src/gui/slitmaskgui/menu_bar.py b/gui/slitmaskgui/menu_bar.py similarity index 100% rename from src/gui/slitmaskgui/menu_bar.py rename to gui/slitmaskgui/menu_bar.py diff --git a/src/gui/slitmaskgui/offline_mode.py b/gui/slitmaskgui/offline_mode.py similarity index 100% rename from src/gui/slitmaskgui/offline_mode.py rename to gui/slitmaskgui/offline_mode.py diff --git a/src/gui/slitmaskgui/requirements.txt b/gui/slitmaskgui/requirements.txt similarity index 100% rename from src/gui/slitmaskgui/requirements.txt rename to gui/slitmaskgui/requirements.txt diff --git a/src/gui/slitmaskgui/sky_viewer.py b/gui/slitmaskgui/sky_viewer.py similarity index 100% rename from src/gui/slitmaskgui/sky_viewer.py rename to gui/slitmaskgui/sky_viewer.py diff --git a/src/gui/slitmaskgui/slit_position_table.py b/gui/slitmaskgui/slit_position_table.py similarity index 100% rename from src/gui/slitmaskgui/slit_position_table.py rename to gui/slitmaskgui/slit_position_table.py diff --git a/src/gui/slitmaskgui/target_list_widget.py b/gui/slitmaskgui/target_list_widget.py similarity index 100% rename from src/gui/slitmaskgui/target_list_widget.py rename to gui/slitmaskgui/target_list_widget.py diff --git a/pyproject.toml b/pyproject.toml index 2cb4b65..c9dd99e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,8 @@ dev = [ lris2 = "src" [tool.setuptools] -packages = ["lris2", "lris2.driver", "lris2.gui"] +packages = ["lris2", "lris2.driver"] [tool.pytest.ini_options] testpaths = ["tests"] +pythonpath = ["gui"] diff --git a/src/gui/__init__.py b/src/gui/__init__.py deleted file mode 100644 index 971f589..0000000 --- a/src/gui/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""LRIS2 graphical interfaces."""