diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 07e6c76..aa1f12f 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 gui/slitmaskgui/requirements.txt ]; then pip install -r 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 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: | 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..c29dd1a 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 +- `gui/` – Graphical interfaces (`slitmaskgui`, `demo`) +- `scripts/` – AIT and utility scripts +- `src/driver/` – Hardware driver submodules +- `tests/` – Unit tests + +## 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/gui/slitmaskgui/tests/__init__.py b/gui/slitmaskgui/__init__.py similarity index 100% rename from gui/slitmaskgui/tests/__init__.py rename to gui/slitmaskgui/__init__.py diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..c9dd99e --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,29 @@ +[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"] + +[tool.pytest.ini_options] +testpaths = ["tests"] +pythonpath = ["gui"] 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/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