diff --git a/.github/workflows/test-python.yml b/.github/workflows/test-python.yml index 9cc6230..6bc5e8e 100644 --- a/.github/workflows/test-python.yml +++ b/.github/workflows/test-python.yml @@ -5,12 +5,14 @@ on: - 'src/**' - 'tests/**' - 'pyproject.toml' + - 'pixi.lock' - '.github/workflows/test-python.yml' pull_request: paths: - 'src/**' - 'tests/**' - 'pyproject.toml' + - 'pixi.lock' - '.github/workflows/test-python.yml' workflow_dispatch: @@ -24,11 +26,14 @@ jobs: uses: prefix-dev/setup-pixi@v0.10.0 with: pixi-version: v0.67.2 - locked: false + locked: true - name: Check formatting with ruff run: pixi run format-check + - name: Lint with ruff + run: pixi run lint + - name: Run tests run: pixi run test diff --git a/PIXI.md b/PIXI.md index 081db78..d4ffb36 100644 --- a/PIXI.md +++ b/PIXI.md @@ -38,8 +38,21 @@ pixi run test ## Split-repo development note -This repo is configured to consume `../earthscope-sfg-tools` as an editable local dependency via Pixi. +`earthscope-sfg-tools` and `pride-ppp` (from the GNSSommelier monorepo) are consumed as +git dependencies pinned to a tag/rev in `pyproject.toml` and resolved through `pixi.lock` +— no sibling checkout is required. When moving a pin, update every declaration and re-run +`pixi lock`: -If you clone this repository without the sibling `earthscope-sfg-tools` directory, update -`[tool.pixi.pypi-dependencies]` in `pyproject.toml` to use a published `earthscope-sfg-tools` -version instead. +- `earthscope-sfg-tools`: `[project.dependencies]` **and** `[tool.pixi.pypi-dependencies]` +- GNSSommelier: `pride-ppp` in `[project.dependencies]`, plus `gpm-specs` and + `gnss-product-management` in `[tool.pixi.pypi-dependencies]` — all three must share one + rev, or `pixi install --locked` (enforced in CI) rejects the lockfile. + +To develop against a local checkout of either dependency, install it into the pixi env +over the locked version: + +```bash +pixi run -- uv pip install --python "$(command -v python)" --no-deps --force-reinstall ../earthscope-sfg-tools +``` + +Restore the locked env afterwards with `rm -rf .pixi/envs && pixi install`. diff --git a/pixi.lock b/pixi.lock index bbeca4c..061bb03 100644 --- a/pixi.lock +++ b/pixi.lock @@ -208,15 +208,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/20/2c/0622f20ff02b2ef32558733443805dc82fd4c275be01b2d19d14676f3a1b/cryptography-49.0.0-cp311-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.0#1d6c1f1e46885d76c4cfcfdf51c7d162c97b241f + - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.1#b010d588e3724e7f71a61642f3faf08334d02223 - pypi: https://files.pythonhosted.org/packages/ca/7d/33ef69e569b47ba96c7d319621674ad36e8920339a90386babc584ad060f/earthscope_cli-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/bf/06e808652b197ce899df44f202791a053561daaef121b77dc8efea522210/earthscope_sdk-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/c7/2342da9830e3e9d4870305ca5d2091d2a83284f2953079b7bdd3b5e029d8/fonttools-4.63.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/41/52/be5c8a17759d78d7cc56b4e60c1763b5fed40368368475a5e4ed491c8bac/gnatss-0.3.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp#dfe8136324526b15154645b57839b0e4d0946fbc + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 - pypi: https://files.pythonhosted.org/packages/37/87/b4d095775a3fb1bcafbb483fc206b27ebb785724c83051447737085dc54e/greenlet-3.5.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5a/de/bbc12563bbf979618d17625a4e753ff7a078523e28d870d3626daa97261a/invoke-3.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl @@ -458,15 +458,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.0#1d6c1f1e46885d76c4cfcfdf51c7d162c97b241f + - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.1#b010d588e3724e7f71a61642f3faf08334d02223 - pypi: https://files.pythonhosted.org/packages/ca/7d/33ef69e569b47ba96c7d319621674ad36e8920339a90386babc584ad060f/earthscope_cli-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/bf/06e808652b197ce899df44f202791a053561daaef121b77dc8efea522210/earthscope_sdk-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/44/a0/c815bea63117fa63e4e1c01f8a1110d2112fa003f838e6467094ec2432ce/fonttools-4.63.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/41/52/be5c8a17759d78d7cc56b4e60c1763b5fed40368368475a5e4ed491c8bac/gnatss-0.3.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp#dfe8136324526b15154645b57839b0e4d0946fbc + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 - pypi: https://files.pythonhosted.org/packages/5d/6e/4c37d51a2b7f82d2ff11bb6b5f7d766d9a011726624af255e843727627a3/greenlet-3.5.3-cp312-cp312-macosx_11_0_universal2.whl - pypi: https://files.pythonhosted.org/packages/5a/de/bbc12563bbf979618d17625a4e753ff7a078523e28d870d3626daa97261a/invoke-3.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl @@ -707,15 +707,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9b/22/adf66990e63584a68dfb50c24f48a125c07b1699899381c8151e63ed458c/cryptography-49.0.0-cp311-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.0#1d6c1f1e46885d76c4cfcfdf51c7d162c97b241f + - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.1#b010d588e3724e7f71a61642f3faf08334d02223 - pypi: https://files.pythonhosted.org/packages/ca/7d/33ef69e569b47ba96c7d319621674ad36e8920339a90386babc584ad060f/earthscope_cli-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/bf/06e808652b197ce899df44f202791a053561daaef121b77dc8efea522210/earthscope_sdk-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/08/ef/b3c6b9b5be2f82416d73fe2ed2e96e2793cd80e7510bd6a17ca79cdd88ec/fonttools-4.63.0-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/41/52/be5c8a17759d78d7cc56b4e60c1763b5fed40368368475a5e4ed491c8bac/gnatss-0.3.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp#dfe8136324526b15154645b57839b0e4d0946fbc + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 - pypi: https://files.pythonhosted.org/packages/5a/de/bbc12563bbf979618d17625a4e753ff7a078523e28d870d3626daa97261a/invoke-3.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl @@ -958,15 +958,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/1f/09/f42b1d190c5ba75f72062a387f8030d1d75f6ab035788f1d9c4b01de6525/cryptography-49.0.0-cp311-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.0#1d6c1f1e46885d76c4cfcfdf51c7d162c97b241f + - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.1#b010d588e3724e7f71a61642f3faf08334d02223 - pypi: https://files.pythonhosted.org/packages/ca/7d/33ef69e569b47ba96c7d319621674ad36e8920339a90386babc584ad060f/earthscope_cli-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/bf/06e808652b197ce899df44f202791a053561daaef121b77dc8efea522210/earthscope_sdk-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/36/cccb9bc2a6ab63d1b2980374f0dca72ce95ae267c9b4cfe77455bb70d0d4/fonttools-4.63.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/41/52/be5c8a17759d78d7cc56b4e60c1763b5fed40368368475a5e4ed491c8bac/gnatss-0.3.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp#dfe8136324526b15154645b57839b0e4d0946fbc + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 - pypi: https://files.pythonhosted.org/packages/14/40/c57489acf8e37d74e2913d4eff63aa0dba17acccc4bdeef874dde2dbbec9/greenlet-3.5.3-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/5a/de/bbc12563bbf979618d17625a4e753ff7a078523e28d870d3626daa97261a/invoke-3.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl @@ -1190,15 +1190,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/20/2c/0622f20ff02b2ef32558733443805dc82fd4c275be01b2d19d14676f3a1b/cryptography-49.0.0-cp311-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.0#1d6c1f1e46885d76c4cfcfdf51c7d162c97b241f + - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.1#b010d588e3724e7f71a61642f3faf08334d02223 - pypi: https://files.pythonhosted.org/packages/ca/7d/33ef69e569b47ba96c7d319621674ad36e8920339a90386babc584ad060f/earthscope_cli-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/bf/06e808652b197ce899df44f202791a053561daaef121b77dc8efea522210/earthscope_sdk-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/c7/2342da9830e3e9d4870305ca5d2091d2a83284f2953079b7bdd3b5e029d8/fonttools-4.63.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/41/52/be5c8a17759d78d7cc56b4e60c1763b5fed40368368475a5e4ed491c8bac/gnatss-0.3.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp#dfe8136324526b15154645b57839b0e4d0946fbc + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 - pypi: https://files.pythonhosted.org/packages/37/87/b4d095775a3fb1bcafbb483fc206b27ebb785724c83051447737085dc54e/greenlet-3.5.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/de/bbc12563bbf979618d17625a4e753ff7a078523e28d870d3626daa97261a/invoke-3.0.3-py3-none-any.whl @@ -1411,15 +1411,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.0#1d6c1f1e46885d76c4cfcfdf51c7d162c97b241f + - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.1#b010d588e3724e7f71a61642f3faf08334d02223 - pypi: https://files.pythonhosted.org/packages/ca/7d/33ef69e569b47ba96c7d319621674ad36e8920339a90386babc584ad060f/earthscope_cli-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/bf/06e808652b197ce899df44f202791a053561daaef121b77dc8efea522210/earthscope_sdk-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/44/a0/c815bea63117fa63e4e1c01f8a1110d2112fa003f838e6467094ec2432ce/fonttools-4.63.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/41/52/be5c8a17759d78d7cc56b4e60c1763b5fed40368368475a5e4ed491c8bac/gnatss-0.3.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp#dfe8136324526b15154645b57839b0e4d0946fbc + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 - pypi: https://files.pythonhosted.org/packages/5d/6e/4c37d51a2b7f82d2ff11bb6b5f7d766d9a011726624af255e843727627a3/greenlet-3.5.3-cp312-cp312-macosx_11_0_universal2.whl - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/de/bbc12563bbf979618d17625a4e753ff7a078523e28d870d3626daa97261a/invoke-3.0.3-py3-none-any.whl @@ -1631,15 +1631,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/9b/22/adf66990e63584a68dfb50c24f48a125c07b1699899381c8151e63ed458c/cryptography-49.0.0-cp311-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.0#1d6c1f1e46885d76c4cfcfdf51c7d162c97b241f + - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.1#b010d588e3724e7f71a61642f3faf08334d02223 - pypi: https://files.pythonhosted.org/packages/ca/7d/33ef69e569b47ba96c7d319621674ad36e8920339a90386babc584ad060f/earthscope_cli-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/bf/06e808652b197ce899df44f202791a053561daaef121b77dc8efea522210/earthscope_sdk-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/08/ef/b3c6b9b5be2f82416d73fe2ed2e96e2793cd80e7510bd6a17ca79cdd88ec/fonttools-4.63.0-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/41/52/be5c8a17759d78d7cc56b4e60c1763b5fed40368368475a5e4ed491c8bac/gnatss-0.3.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp#dfe8136324526b15154645b57839b0e4d0946fbc + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/de/bbc12563bbf979618d17625a4e753ff7a078523e28d870d3626daa97261a/invoke-3.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl @@ -1855,15 +1855,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/1f/09/f42b1d190c5ba75f72062a387f8030d1d75f6ab035788f1d9c4b01de6525/cryptography-49.0.0-cp311-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.0#1d6c1f1e46885d76c4cfcfdf51c7d162c97b241f + - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.1#b010d588e3724e7f71a61642f3faf08334d02223 - pypi: https://files.pythonhosted.org/packages/ca/7d/33ef69e569b47ba96c7d319621674ad36e8920339a90386babc584ad060f/earthscope_cli-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/bf/06e808652b197ce899df44f202791a053561daaef121b77dc8efea522210/earthscope_sdk-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/36/cccb9bc2a6ab63d1b2980374f0dca72ce95ae267c9b4cfe77455bb70d0d4/fonttools-4.63.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/41/52/be5c8a17759d78d7cc56b4e60c1763b5fed40368368475a5e4ed491c8bac/gnatss-0.3.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp#dfe8136324526b15154645b57839b0e4d0946fbc + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 - pypi: https://files.pythonhosted.org/packages/14/40/c57489acf8e37d74e2913d4eff63aa0dba17acccc4bdeef874dde2dbbec9/greenlet-3.5.3-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/de/bbc12563bbf979618d17625a4e753ff7a078523e28d870d3626daa97261a/invoke-3.0.3-py3-none-any.whl @@ -2233,15 +2233,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/20/2c/0622f20ff02b2ef32558733443805dc82fd4c275be01b2d19d14676f3a1b/cryptography-49.0.0-cp311-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.0#1d6c1f1e46885d76c4cfcfdf51c7d162c97b241f + - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.1#b010d588e3724e7f71a61642f3faf08334d02223 - pypi: https://files.pythonhosted.org/packages/ca/7d/33ef69e569b47ba96c7d319621674ad36e8920339a90386babc584ad060f/earthscope_cli-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/bf/06e808652b197ce899df44f202791a053561daaef121b77dc8efea522210/earthscope_sdk-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/c7/2342da9830e3e9d4870305ca5d2091d2a83284f2953079b7bdd3b5e029d8/fonttools-4.63.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/41/52/be5c8a17759d78d7cc56b4e60c1763b5fed40368368475a5e4ed491c8bac/gnatss-0.3.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp#dfe8136324526b15154645b57839b0e4d0946fbc + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 - pypi: https://files.pythonhosted.org/packages/37/87/b4d095775a3fb1bcafbb483fc206b27ebb785724c83051447737085dc54e/greenlet-3.5.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5a/de/bbc12563bbf979618d17625a4e753ff7a078523e28d870d3626daa97261a/invoke-3.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl @@ -2580,15 +2580,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.0#1d6c1f1e46885d76c4cfcfdf51c7d162c97b241f + - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.1#b010d588e3724e7f71a61642f3faf08334d02223 - pypi: https://files.pythonhosted.org/packages/ca/7d/33ef69e569b47ba96c7d319621674ad36e8920339a90386babc584ad060f/earthscope_cli-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/bf/06e808652b197ce899df44f202791a053561daaef121b77dc8efea522210/earthscope_sdk-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/44/a0/c815bea63117fa63e4e1c01f8a1110d2112fa003f838e6467094ec2432ce/fonttools-4.63.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/41/52/be5c8a17759d78d7cc56b4e60c1763b5fed40368368475a5e4ed491c8bac/gnatss-0.3.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp#dfe8136324526b15154645b57839b0e4d0946fbc + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 - pypi: https://files.pythonhosted.org/packages/5d/6e/4c37d51a2b7f82d2ff11bb6b5f7d766d9a011726624af255e843727627a3/greenlet-3.5.3-cp312-cp312-macosx_11_0_universal2.whl - pypi: https://files.pythonhosted.org/packages/5a/de/bbc12563bbf979618d17625a4e753ff7a078523e28d870d3626daa97261a/invoke-3.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl @@ -2926,15 +2926,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9b/22/adf66990e63584a68dfb50c24f48a125c07b1699899381c8151e63ed458c/cryptography-49.0.0-cp311-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.0#1d6c1f1e46885d76c4cfcfdf51c7d162c97b241f + - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.1#b010d588e3724e7f71a61642f3faf08334d02223 - pypi: https://files.pythonhosted.org/packages/ca/7d/33ef69e569b47ba96c7d319621674ad36e8920339a90386babc584ad060f/earthscope_cli-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/bf/06e808652b197ce899df44f202791a053561daaef121b77dc8efea522210/earthscope_sdk-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/08/ef/b3c6b9b5be2f82416d73fe2ed2e96e2793cd80e7510bd6a17ca79cdd88ec/fonttools-4.63.0-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/41/52/be5c8a17759d78d7cc56b4e60c1763b5fed40368368475a5e4ed491c8bac/gnatss-0.3.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp#dfe8136324526b15154645b57839b0e4d0946fbc + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 - pypi: https://files.pythonhosted.org/packages/5a/de/bbc12563bbf979618d17625a4e753ff7a078523e28d870d3626daa97261a/invoke-3.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl @@ -3271,15 +3271,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/1f/09/f42b1d190c5ba75f72062a387f8030d1d75f6ab035788f1d9c4b01de6525/cryptography-49.0.0-cp311-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.0#1d6c1f1e46885d76c4cfcfdf51c7d162c97b241f + - pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.1#b010d588e3724e7f71a61642f3faf08334d02223 - pypi: https://files.pythonhosted.org/packages/ca/7d/33ef69e569b47ba96c7d319621674ad36e8920339a90386babc584ad060f/earthscope_cli-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/bf/06e808652b197ce899df44f202791a053561daaef121b77dc8efea522210/earthscope_sdk-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/36/cccb9bc2a6ab63d1b2980374f0dca72ce95ae267c9b4cfe77455bb70d0d4/fonttools-4.63.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/41/52/be5c8a17759d78d7cc56b4e60c1763b5fed40368368475a5e4ed491c8bac/gnatss-0.3.1-py3-none-any.whl - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs#dfe8136324526b15154645b57839b0e4d0946fbc - - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp#dfe8136324526b15154645b57839b0e4d0946fbc + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 + - pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 - pypi: https://files.pythonhosted.org/packages/14/40/c57489acf8e37d74e2913d4eff63aa0dba17acccc4bdeef874dde2dbbec9/greenlet-3.5.3-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/5a/de/bbc12563bbf979618d17625a4e753ff7a078523e28d870d3626daa97261a/invoke-3.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl @@ -6450,13 +6450,13 @@ packages: - freezegun ; extra == 'dev' - ruff ; extra == 'dev' requires_python: '>=3.10' -- pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.0#1d6c1f1e46885d76c4cfcfdf51c7d162c97b241f +- pypi: git+https://github.com/EarthScope/earthscope-sfg-tools.git?rev=0.2.1#b010d588e3724e7f71a61642f3faf08334d02223 name: earthscope-sfg-tools - version: 0.1.0 + version: 0.2.1 requires_dist: - julian>=0.14 - numpy>=1.26 - - pandas>=2.2 + - pandas>=2.2,<3 - pandera>=0.20 - pydantic>=2.7 - pymap3d>=3.1 @@ -6468,9 +6468,9 @@ packages: - pypi: ./ name: earthscope-sfg-workflows version: 0.1.0 - sha256: 6c9e2090dd0b72b89efa6f0fefcfd985d794d3b5b46143415c9e151f0fdfb5f8 + sha256: b255e526934d222c9e1f3916beb05d5d207cfa6e9b796761c7341a3558429559 requires_dist: - - earthscope-sfg-tools[tiledb] @ git+https://github.com/EarthScope/earthscope-sfg-tools.git@0.2.0 + - earthscope-sfg-tools[tiledb] @ git+https://github.com/EarthScope/earthscope-sfg-tools.git@0.2.1 - boto3>=1.40 - botocore>=1.40 - sqlalchemy>=2.0 @@ -6485,7 +6485,7 @@ packages: - typer>=0.9 - rich>=13.0 - pyyaml>=6.0 - - pride-ppp @ git+https://github.com/EarthScope/GNSSommelier.git#subdirectory=packages/pride-ppp + - pride-ppp @ git+https://github.com/EarthScope/GNSSommelier.git@b8db24e65d3a19577febb006373cf865f5e82bb8#subdirectory=packages/pride-ppp - myst-parser>=5.1.0 ; extra == 'docs' - mystmd ; extra == 'docs' requires_python: '>=3.11' @@ -7084,14 +7084,14 @@ packages: - pytest-mock ; extra == 'test' - pytest-xdist ; extra == 'test' requires_python: '>=3.10' -- pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management#dfe8136324526b15154645b57839b0e4d0946fbc +- pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgnss-product-management&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 name: gnss-product-management - version: 0.1.dev279+gdfe813632 + version: 0.1.dev299+gb8db24e65 requires_dist: - aiohttp>=3.13.3 - cloudpathlib[s3]>=0.18 - fsspec>=2024.0 - - gpm-specs @ git+https://github.com/EarthScope/GNSSommelier.git#subdirectory=packages/gpm-specs + - gpm-specs @ git+https://github.com/EarthScope/GNSSommelier.git@b8db24e65d3a19577febb006373cf865f5e82bb8#subdirectory=packages/gpm-specs - julian>=0.14 - paramiko>=3.5 - pydantic>=2.0 @@ -7218,9 +7218,9 @@ packages: purls: [] size: 21608 timestamp: 1780444095772 -- pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs#dfe8136324526b15154645b57839b0e4d0946fbc +- pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fgpm-specs&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 name: gpm-specs - version: 0.1.dev279+gdfe813632 + version: 0.1.dev299+gb8db24e65 requires_python: '>=3.10,<3.15' - pypi: https://files.pythonhosted.org/packages/14/40/c57489acf8e37d74e2913d4eff63aa0dba17acccc4bdeef874dde2dbbec9/greenlet-3.5.3-cp312-cp312-win_amd64.whl name: greenlet @@ -12964,12 +12964,12 @@ packages: - pkg:pypi/pluggy?source=hash-mapping size: 25877 timestamp: 1764896838868 -- pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp#dfe8136324526b15154645b57839b0e4d0946fbc +- pypi: git+https://github.com/EarthScope/GNSSommelier.git?subdirectory=packages%2Fpride-ppp&rev=b8db24e65d3a19577febb006373cf865f5e82bb8#b8db24e65d3a19577febb006373cf865f5e82bb8 name: pride-ppp - version: 0.1.dev279+gdfe813632 + version: 0.1.dev299+gb8db24e65 requires_dist: - - gnss-product-management @ git+https://github.com/EarthScope/GNSSommelier.git#subdirectory=packages/gnss-product-management - - gpm-specs @ git+https://github.com/EarthScope/GNSSommelier.git#subdirectory=packages/gpm-specs + - gnss-product-management @ git+https://github.com/EarthScope/GNSSommelier.git@b8db24e65d3a19577febb006373cf865f5e82bb8#subdirectory=packages/gnss-product-management + - gpm-specs @ git+https://github.com/EarthScope/GNSSommelier.git@b8db24e65d3a19577febb006373cf865f5e82bb8#subdirectory=packages/gpm-specs - julian>=0.14 - pandas>=2.0 - pydantic>=2.0 diff --git a/pyproject.toml b/pyproject.toml index 45b521a..9a380dc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ authors = [ { name = "Rachel Akie", email = "rachel.akie@earthscope.org" } ] dependencies = [ - "earthscope-sfg-tools[tiledb] @ git+https://github.com/EarthScope/earthscope-sfg-tools.git@0.2.0", + "earthscope-sfg-tools[tiledb] @ git+https://github.com/EarthScope/earthscope-sfg-tools.git@0.2.1", "boto3>=1.40", "botocore>=1.40", "sqlalchemy>=2.0", @@ -25,7 +25,7 @@ dependencies = [ "typer>=0.9", "rich>=13.0", "pyyaml>=6.0", - "pride-ppp @ git+https://github.com/EarthScope/GNSSommelier.git#subdirectory=packages/pride-ppp" + "pride-ppp @ git+https://github.com/EarthScope/GNSSommelier.git@b8db24e65d3a19577febb006373cf865f5e82bb8#subdirectory=packages/pride-ppp" ] [project.optional-dependencies] @@ -72,7 +72,13 @@ nodejs = ">=20" [tool.pixi.pypi-dependencies] earthscope_sfg_workflows = { path = ".", editable = true } -earthscope_sfg_tools = { git = "https://github.com/EarthScope/earthscope-sfg-tools.git", rev = "0.2.0", extras = ["tiledb"] } +earthscope_sfg_tools = { git = "https://github.com/EarthScope/earthscope-sfg-tools.git", rev = "0.2.1", extras = ["tiledb"] } +# gpm-specs and gnss-product-management are transitive deps of pride-ppp, but +# pride-ppp's own metadata requests them unpinned (default-branch HEAD), which +# fails `pixi install --locked` validation in CI. Pin them to the same +# GNSSommelier rev as pride-ppp; keep all three in sync when re-locking. +gpm-specs = { git = "https://github.com/EarthScope/GNSSommelier.git", subdirectory = "packages/gpm-specs", rev = "b8db24e65d3a19577febb006373cf865f5e82bb8" } +gnss-product-management = { git = "https://github.com/EarthScope/GNSSommelier.git", subdirectory = "packages/gnss-product-management", rev = "b8db24e65d3a19577febb006373cf865f5e82bb8" } [tool.pixi.feature.tiledb.dependencies] tiledb = ">=2.27" diff --git a/src/earthscope_sfg_workflows/data_mgmt/adapters/memory.py b/src/earthscope_sfg_workflows/data_mgmt/adapters/memory.py index 2445fb1..3358c7f 100644 --- a/src/earthscope_sfg_workflows/data_mgmt/adapters/memory.py +++ b/src/earthscope_sfg_workflows/data_mgmt/adapters/memory.py @@ -12,6 +12,7 @@ from dataclasses import replace from itertools import count from pathlib import Path + from upath import UPath from ..model import ArchiveFile, AssetEntry, AssetKind, SFGScope, FileInfo diff --git a/src/earthscope_sfg_workflows/pipelines/qc_pipeline.py b/src/earthscope_sfg_workflows/pipelines/qc_pipeline.py index 2d0331d..1353986 100644 --- a/src/earthscope_sfg_workflows/pipelines/qc_pipeline.py +++ b/src/earthscope_sfg_workflows/pipelines/qc_pipeline.py @@ -562,6 +562,7 @@ def process_rinex(self) -> None: processor = PrideProcessor( pride_dir=pride_dir, output_dir=intermediate_dir, + cli_config=pride_cfg.cli, mode=ProcessingMode.DEFAULT, ) rinex_path_map = {e.local_path: e for e in rinex_entries} diff --git a/src/earthscope_sfg_workflows/pipelines/sv3_pipeline.py b/src/earthscope_sfg_workflows/pipelines/sv3_pipeline.py index 97d5939..6e57f7f 100644 --- a/src/earthscope_sfg_workflows/pipelines/sv3_pipeline.py +++ b/src/earthscope_sfg_workflows/pipelines/sv3_pipeline.py @@ -12,8 +12,7 @@ from pathlib import Path from typing import Callable -# third-party — monkey-patch targets must be imported before the patches below -import tiledb as _tiledb +# third-party from earthscope_sfg_tools import tiledb_integration as novb_ops from earthscope_sfg_tools.novatel_tools.utils import get_metadata, get_metadatav2 from earthscope_sfg_tools.seafloor_site_tools.soundspeed_operations import ( @@ -29,7 +28,6 @@ rinex_qc, tdb2rnx, ) -from earthscope_sfg_tools.tiledb_integration.arrays import TBDArray as _TBDArray from earthscope_sfg_workflows.data_mgmt.ports import AssetCatalogPort from earthscope_sfg_workflows.logging import ProcessLogger from pride_ppp import ( @@ -38,8 +36,6 @@ kin_to_kin_position_df, rinex_get_time_range, ) -from pride_ppp.factories.processor import PrideProcessor as _PrideProcessorCls -from pride_ppp.specifications.config import PRIDEPPPFileConfig as _PRIDEPPPFileConfig from rich.progress import track # local @@ -64,59 +60,6 @@ ) from .shotdata_gnss_refinement import merge_shotdata_kinposition -# pride_ppp <= current version omits `ISB model` from generated config_files; -# pdp3 >= 3.2.7 requires it. Patch write_config_file to inject the line. -_pride_write_config_orig = _PRIDEPPPFileConfig.write_config_file - - -def _pride_write_config_patched(self, filepath): - _pride_write_config_orig(self, filepath) - p = Path(filepath) - text = p.read_text() - if "ISB model" not in text: - patched = [] - for line in text.splitlines(): - patched.append(line) - if line.startswith("RCK model"): - patched.append( - "ISB model = Default" - " ! GNSS receiver inter-system biases to be processed" - ) - p.write_text("\n".join(patched) + "\n") - - -_PRIDEPPPFileConfig.write_config_file = _pride_write_config_patched - - -# pride_ppp _validate_kinfile uses `if kin_df` on a DataFrame — raises ValueError. -# Patch to use `is not None` check instead. -def _pride_validate_kinfile_patched(_self, kin_path, override=False): - if not override: - if not kin_path.exists(): - return False - kin_df = kin_to_kin_position_df(kin_path) - if kin_df is not None and not kin_df.empty: - return True - return False - - -_PrideProcessorCls._validate_kinfile = _pride_validate_kinfile_patched - - -# TBDArray.write_df passes the DataFrame directly to tiledb.from_pandas, but -# tiledb requires the sparse dimension ('time') to be the pandas index, not a -# plain column. The DataFrame returned by kin_to_kin_position_df has time as -# a plain column. Patch write_df to set it as the index after validation. -def _tbd_write_df_patched(self, df, validate: bool = True): - if validate: - df = self.dataframe_schema.validate(df, lazy=True) - if "time" in df.columns: - df = df.set_index("time") - _tiledb.from_pandas(str(self.uri), df, mode="append") - - -_TBDArray.write_df = _tbd_write_df_patched - def _pipeline_method(fn): """Wrap a pipeline method so only one runs at a time per instance.""" @@ -327,12 +270,17 @@ def pre_process_novatel(self) -> None: **merge_signature ): try: - novb_ops.novatel_770_2tile( + result = novb_ops.novatel_770_2tile( files=[x.local_path for x in novatel_770_entries], gnss_obs_tdb=self.gnssObsTDBURI, n_procs=self.config.novatel_config.n_processes, logger=ProcessLogger.logger, ) + if result.returncode != 0: + raise RuntimeError( + f"novatel_770_2tile exited with code {result.returncode}: " + f"{result.stderr}" + ) self.catalog.add_merge_job(**merge_signature) response = f"Added merge job for {len(novatel_770_entries)} Novatel 770 Entries to the catalog" @@ -369,13 +317,17 @@ def pre_process_novatel(self) -> None: **merge_signature ): try: - novb_ops.nov0002tile( + result = novb_ops.nov0002tile( files=[x.local_path for x in novatel_000_entries], gnss_obs_tdb=self.gnssObsTDB_secondaryURI, position_tdb=self.imuPositionTDB.uri, n_procs=self.config.novatel_config.n_processes, logger=ProcessLogger.logger, ) + if result.returncode != 0: + raise RuntimeError( + f"nov0002tile exited with code {result.returncode}: {result.stderr}" + ) self.catalog.add_merge_job(**merge_signature) ProcessLogger.info( @@ -830,6 +782,7 @@ def process_rinex(self) -> None: processor = PrideProcessor( pride_dir=pride_dir, output_dir=intermediate_dir, + cli_config=pride_cfg.cli, mode=ProcessingMode.DEFAULT, ) rinex_path_map = {e.local_path: e for e in rinex_entries} diff --git a/tests/test_sv3_pipeline_integration.py b/tests/test_sv3_pipeline_integration.py index 05b7630..42e478e 100644 --- a/tests/test_sv3_pipeline_integration.py +++ b/tests/test_sv3_pipeline_integration.py @@ -506,6 +506,17 @@ def test_shotdata_pre_round_trip(self, tmp_path): _NOV770_MOCK = "earthscope_sfg_workflows.pipelines.sv3_pipeline.novb_ops.novatel_770_2tile" _TDB2RNX_MOCK = "earthscope_sfg_workflows.pipelines.sv3_pipeline.tdb2rnx" + +def _successful_completed_process(): + """A zero-returncode ``CompletedProcess``, matching the Go-binary wrapper's + real return type — callers check ``.returncode`` before recording merge + jobs, so mocks must return this rather than a bare ``MagicMock``. + """ + import subprocess + + return subprocess.CompletedProcess(args=[], returncode=0, stdout="", stderr="") + + _T0 = datetime.datetime(2025, 9, 8, 0, 0, 0, tzinfo=datetime.timezone.utc) _T1 = datetime.datetime(2025, 9, 9, 0, 0, 0, tzinfo=datetime.timezone.utc) @@ -586,7 +597,7 @@ def test_records_merge_job_after_processing(self, tmp_path, catalog): pipeline = _make_pipeline(tmp_path, catalog) - with patch(_NOV770_MOCK) as mock_tile: + with patch(_NOV770_MOCK, return_value=_successful_completed_process()) as mock_tile: pipeline.pre_process_novatel() mock_tile.assert_called_once() @@ -611,7 +622,7 @@ def test_idempotent_skips_when_merge_job_exists(self, tmp_path, catalog): pipeline = _make_pipeline(tmp_path, catalog) - with patch(_NOV770_MOCK) as mock_tile: + with patch(_NOV770_MOCK, return_value=_successful_completed_process()) as mock_tile: pipeline.pre_process_novatel() pipeline.pre_process_novatel() @@ -633,7 +644,7 @@ def test_override_reruns_despite_merge_job(self, tmp_path, catalog): config.novatel_config.override = True pipeline = _make_pipeline(tmp_path, catalog, config=config) - with patch(_NOV770_MOCK) as mock_tile: + with patch(_NOV770_MOCK, return_value=_successful_completed_process()) as mock_tile: pipeline.pre_process_novatel() pipeline.pre_process_novatel() @@ -672,6 +683,39 @@ def test_processing_error_is_handled_gracefully(self, tmp_path, catalog): parent_ids=[entry.id], ), "Merge job must not be recorded when novatel_770_2tile fails" + def test_nonzero_returncode_does_not_record_merge_job(self, tmp_path, catalog): + """``novatel_770_2tile`` exits nonzero without raising → no merge job recorded. + + The Go-binary wrapper runs ``subprocess.run(..., check=False)``, so a + failed conversion returns a nonzero-returncode ``CompletedProcess`` + instead of raising. The pipeline must check ``.returncode`` itself — + otherwise a failed TileDB write gets recorded as a successful merge + and is skipped on every subsequent run. + """ + import subprocess + from unittest.mock import patch + + from earthscope_sfg_workflows.data_mgmt.model import AssetKind + + fake_nov = tmp_path / "NOV770_bad.raw" + fake_nov.touch() + entry = _add_novatel770_entry(catalog, fake_nov) + + pipeline = _make_pipeline(tmp_path, catalog) + + failed_result = subprocess.CompletedProcess( + args=[], returncode=1, stdout="", stderr="tdb write failed" + ) + with patch(_NOV770_MOCK, return_value=failed_result): + # Should NOT raise out of pre_process_novatel — the pipeline catches and logs. + pipeline.pre_process_novatel() + + assert not catalog.is_merge_complete( + parent_type=AssetKind.NOVATEL770.value, + child_type=AssetKind.GNSSOBSTDB.value, + parent_ids=[entry.id], + ), "Merge job must not be recorded when novatel_770_2tile exits nonzero" + # --------------------------------------------------------------------------- # TestGetRinexFiles @@ -802,6 +846,59 @@ def test_raises_no_rinex_built_when_no_files_produced(self, tmp_path, catalog): pipeline.get_rinex_files() +# --------------------------------------------------------------------------- +# TestProcessRinex +# --------------------------------------------------------------------------- + + +def _add_rinex4_entry(catalog, rinex_file: Path): + """Catalog a RINEX4 asset entry for the NCC1 scope.""" + from earthscope_sfg_workflows.data_mgmt.model import AssetEntry, AssetKind + from upath import UPath + + scope = _make_scope() + entry = AssetEntry( + kind=AssetKind.RINEX4, + scope=scope, + local_path=UPath(rinex_file), + timestamp_created=datetime.datetime.now(tz=datetime.timezone.utc), + ) + return catalog.add(entry) + + +class TestProcessRinex: + """Tests for ``SV3Pipeline.process_rinex`` (RINEX → PRIDE-PPP → KIN).""" + + def test_passes_configured_cli_config_to_pride_processor(self, tmp_path, catalog): + """``PrideProcessor`` must be constructed with the user's configured + ``PrideCLIConfig`` (``pride_config.cli``), not the class default — + otherwise every user-set CLI flag is silently ignored. + """ + from unittest.mock import MagicMock, patch + + from earthscope_sfg_workflows.pipelines.config import SV3PipelineConfig + + fake_rinex = tmp_path / "NCC1_2025_251_R_20252510000_01D_01S_MO.rnx" + fake_rinex.touch() + _add_rinex4_entry(catalog, fake_rinex) + + config = SV3PipelineConfig() + config.pride_config.cli.sample_frequency = 5 + pipeline = _make_pipeline(tmp_path, catalog, config=config) + + mock_processor = MagicMock() + mock_processor.process_batch.return_value = [] + + with patch( + "earthscope_sfg_workflows.pipelines.sv3_pipeline.PrideProcessor", + return_value=mock_processor, + ) as mock_cls: + pipeline.process_rinex() + + assert mock_cls.call_args.kwargs["cli_config"] is config.pride_config.cli + assert mock_cls.call_args.kwargs["cli_config"].sample_frequency == 5 + + # --------------------------------------------------------------------------- # TestRinexFixture — validates the RINEX text fixture used by the above tests # --------------------------------------------------------------------------- @@ -895,7 +992,7 @@ def test_full_flow_novatel_to_rinex(self, tmp_path, catalog): rinex_dest.mkdir(parents=True, exist_ok=True) with ( - patch(_NOV770_MOCK), + patch(_NOV770_MOCK, return_value=_successful_completed_process()), patch(_TDB2RNX_MOCK, side_effect=_make_fake_tdb2rnx(rinex_dest)), ): pipeline.pre_process_novatel() @@ -928,7 +1025,7 @@ def test_full_flow_is_idempotent(self, tmp_path, catalog): rinex_dest.mkdir(parents=True, exist_ok=True) with ( - patch(_NOV770_MOCK) as mock_nov, + patch(_NOV770_MOCK, return_value=_successful_completed_process()) as mock_nov, patch(_TDB2RNX_MOCK, side_effect=_make_fake_tdb2rnx(rinex_dest)) as mock_tdb, ): pipeline.pre_process_novatel()