From affd37e11244b0f1277bae1a2b80a1ba18911017 Mon Sep 17 00:00:00 2001 From: Tom Close Date: Fri, 3 Nov 2023 11:04:20 +1100 Subject: [PATCH 01/18] changed a few things to hopefully get the auto package to import --- .github/workflows/pythonpackage.yaml | 2 +- nipype-auto-conv/generate | 8 +++++--- pydra/tasks/freesurfer/__init__.py | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pythonpackage.yaml b/.github/workflows/pythonpackage.yaml index 33c5b35..2b17a7a 100644 --- a/.github/workflows/pythonpackage.yaml +++ b/.github/workflows/pythonpackage.yaml @@ -106,7 +106,7 @@ jobs: python -m pip install --upgrade pip - name: Install task package run: | - pip install ".[test]" + pip install -e ".[test]" python -c "import pydra.tasks.freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" python -c "import pydra as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" - name: Test with pytest diff --git a/nipype-auto-conv/generate b/nipype-auto-conv/generate index 2e27fd1..dca1fb9 100755 --- a/nipype-auto-conv/generate +++ b/nipype-auto-conv/generate @@ -7,7 +7,7 @@ import shutil from importlib import import_module import yaml import nipype -import nipype2pydra +import nipype2pydra.utils from nipype2pydra.task import TaskConverter @@ -47,13 +47,15 @@ for fspath in sorted(SPECS_DIR.glob("**/*.yaml")): callables = import_module(rel_pkg_path + "_callables") + module_name = nipype2pydra.utils.to_snake_case(spec["task_name"]) + converter = TaskConverter( - output_module=f"pydra.tasks.{PKG_NAME}.auto.{spec['task_name']}", + output_module=f"pydra.tasks.{PKG_NAME}.auto.{module_name}", callables_module=callables, # type: ignore **spec, ) converter.generate(PKG_ROOT) - auto_init += f"from .{spec['task_name']} import {converter.task_name}\n" + auto_init += f"from .{module_name} import {converter.task_name}\n" with open(PKG_ROOT / "pydra" / "tasks" / PKG_NAME / "auto" / "_version.py", "w") as f: diff --git a/pydra/tasks/freesurfer/__init__.py b/pydra/tasks/freesurfer/__init__.py index 0185301..179c1f8 100644 --- a/pydra/tasks/freesurfer/__init__.py +++ b/pydra/tasks/freesurfer/__init__.py @@ -20,8 +20,8 @@ if "nipype" not in __version__: try: from .auto._version import nipype_version, nipype2pydra_version - except ImportError: - if "No module named pydra.tasks.freesurfer.auto._version": + except ModuleNotFoundError as e: + if "No module named 'pydra.tasks.freesurfer.auto._version'" in str(e): warn( "Nipype interfaces haven't been automatically converted from their specs in " f"`nipype-auto-conv`. Please run `{str(pkg_path / 'nipype-auto-conv' / 'generate')}` " From 3934416a4b99f016a56bf4b8fbf36e1d649cc628 Mon Sep 17 00:00:00 2001 From: Tom Close Date: Fri, 3 Nov 2023 11:09:59 +1100 Subject: [PATCH 02/18] explicitly add `auto` package to pyproject.toml so it isn't excluded --- .github/workflows/pythonpackage.yaml | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pythonpackage.yaml b/.github/workflows/pythonpackage.yaml index 2b17a7a..33c5b35 100644 --- a/.github/workflows/pythonpackage.yaml +++ b/.github/workflows/pythonpackage.yaml @@ -106,7 +106,7 @@ jobs: python -m pip install --upgrade pip - name: Install task package run: | - pip install -e ".[test]" + pip install ".[test]" python -c "import pydra.tasks.freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" python -c "import pydra as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" - name: Test with pytest diff --git a/pyproject.toml b/pyproject.toml index 1a2bdf7..c4f330a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -60,7 +60,7 @@ source = "vcs" version-file = "pydra/tasks/freesurfer/_version.py" [tool.hatch.build.targets.wheel] -packages = ["pydra"] +packages = ["pydra", "pydra.tasks.freesurfer.auto"] include-only = ["pydra/tasks/freesurfer"] [tool.black] From 93fae081f1f15bbbaba623bb8de9b1573753325d Mon Sep 17 00:00:00 2001 From: Tom Close Date: Fri, 3 Nov 2023 11:45:17 +1100 Subject: [PATCH 03/18] strip auto package from gitignore when building package on github --- .github/workflows/pythonpackage.yaml | 11 ++++++++--- .gitignore | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pythonpackage.yaml b/.github/workflows/pythonpackage.yaml index 33c5b35..725bad6 100644 --- a/.github/workflows/pythonpackage.yaml +++ b/.github/workflows/pythonpackage.yaml @@ -59,6 +59,9 @@ jobs: with: name: converted-nipype path: pydra/tasks/freesurfer/auto + - name: Strip auto package from gitignore so it is included in package + run: | + sed -i '/\/pydra\/tasks\/freesurfer\/auto/d' .gitignore - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: @@ -93,10 +96,9 @@ jobs: with: name: converted-nipype path: pydra/tasks/freesurfer/auto - - name: Check directory structure + - name: Strip auto package from gitignore so it is included in package run: | - sudo apt install tree - tree . + sed -i '/\/pydra\/tasks\/freesurfer\/auto/d' .gitignore - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: @@ -147,6 +149,9 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install build tools run: python -m pip install build twine + - name: Strip auto package from gitignore so it is included in package + run: | + sed -i '/\/pydra\/tasks\/freesurfer\/auto/d' .gitignore - name: Build source and wheel distributions run: python -m build - name: Check distributions diff --git a/.gitignore b/.gitignore index b160ce2..dc819e3 100644 --- a/.gitignore +++ b/.gitignore @@ -137,5 +137,5 @@ dmypy.json # Mac garbarge .DS_store -/pydra/tasks/freesurfer/auto /pydra/tasks/freesurfer/_version.py +/pydra/tasks/freesurfer/auto From c81816a062b5cf86a988089f454939641f669d86 Mon Sep 17 00:00:00 2001 From: Tom Close Date: Fri, 3 Nov 2023 12:47:50 +1100 Subject: [PATCH 04/18] add freesurfer installation to test jobs --- .github/workflows/pythonpackage.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yaml b/.github/workflows/pythonpackage.yaml index 725bad6..654cabe 100644 --- a/.github/workflows/pythonpackage.yaml +++ b/.github/workflows/pythonpackage.yaml @@ -81,12 +81,16 @@ jobs: test: needs: [nipype-conv] - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 strategy: matrix: python-version: ['3.8', '3.11'] steps: + - name: Install Freesurfer + run: | + wget https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/7.4.0/freesurfer_ubuntu22-7.4.0_amd64.deb ~/freesurfer-install.deb + sudo apt install ~/freesurfer-install.deb - uses: actions/checkout@v3 - name: Revert version to most recent tag on upstream update if: github.event_name == 'repository_dispatch' From 82975e2616128013f8bf4ba78de62cdbd309f24a Mon Sep 17 00:00:00 2001 From: Tom Close Date: Fri, 3 Nov 2023 14:09:43 +1100 Subject: [PATCH 05/18] added fileformats packages into repository --- .github/workflows/pythonpackage.yaml | 83 +++++++++++++++--- .gitignore | 6 +- docs/index.rst | 2 +- .../conftest.py | 37 ++++++++ .../extras/medimage_freesurfer/__init__.py | 1 + .../extras/medimage_freesurfer/_version.py | 16 ++++ .../pyproject.toml | 87 +++++++++++++++++++ fileformats-medimage-freesurfer/conftest.py | 37 ++++++++ .../medimage_freesurfer/__init__.py | 1 + .../medimage_freesurfer/_version.py | 16 ++++ .../pyproject.toml | 82 +++++++++++++++++ src/conftest.py | 27 ++++++ .../pydra}/tasks/freesurfer/__init__.py | 0 .../pydra}/tasks/freesurfer/latest.py | 0 .../pydra}/tasks/freesurfer/v1/__init__.py | 0 pyproject.toml => src/pyproject.toml | 8 +- 16 files changed, 385 insertions(+), 18 deletions(-) create mode 100644 fileformats-medimage-freesurfer-extras/conftest.py create mode 100644 fileformats-medimage-freesurfer-extras/fileformats/extras/medimage_freesurfer/__init__.py create mode 100644 fileformats-medimage-freesurfer-extras/fileformats/extras/medimage_freesurfer/_version.py create mode 100644 fileformats-medimage-freesurfer-extras/pyproject.toml create mode 100644 fileformats-medimage-freesurfer/conftest.py create mode 100644 fileformats-medimage-freesurfer/fileformats/medimage_freesurfer/__init__.py create mode 100644 fileformats-medimage-freesurfer/fileformats/medimage_freesurfer/_version.py create mode 100644 fileformats-medimage-freesurfer/pyproject.toml create mode 100644 src/conftest.py rename {pydra => src/pydra}/tasks/freesurfer/__init__.py (100%) rename {pydra => src/pydra}/tasks/freesurfer/latest.py (100%) rename {pydra => src/pydra}/tasks/freesurfer/v1/__init__.py (100%) rename pyproject.toml => src/pyproject.toml (92%) diff --git a/.github/workflows/pythonpackage.yaml b/.github/workflows/pythonpackage.yaml index 654cabe..f18fad5 100644 --- a/.github/workflows/pythonpackage.yaml +++ b/.github/workflows/pythonpackage.yaml @@ -61,7 +61,7 @@ jobs: path: pydra/tasks/freesurfer/auto - name: Strip auto package from gitignore so it is included in package run: | - sed -i '/\/pydra\/tasks\/freesurfer\/auto/d' .gitignore + sed -i '/\/src\/pydra\/tasks\/freesurfer\/auto/d' .gitignore - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: @@ -75,22 +75,74 @@ jobs: python -c "import pydra as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" - name: Install task package run: | - pip install ${{ matrix.pip-flags }} ".[dev]" + pip install ${{ matrix.pip-flags }} "./src[dev]" python -c "import pydra.tasks.freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" python -c "import pydra as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" + fileformats-test: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['3.8', '3.11'] + steps: + - uses: actions/checkout@v3 + - name: Revert version to most recent tag on upstream update + if: github.event_name == 'repository_dispatch' + run: git checkout $(git tag -l | tail -n 1 | awk -F post '{print $1}') + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: Install build dependencies + run: | + python -m pip install --upgrade pip + - name: Install task package + run: | + pip install "./fileformats-medimage-freesurfer[test]" + python -c "import fileformats.medimage_freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" + - name: Test fileformats with pytest + run: | + pytest -sv --doctest-modules ./fileformats-medimage-freesurfer/fileformats/medimage_freesurfer \ + --cov fileformats/medimage_freesurfer --cov-report xml + + fileformats-extras-test: + needs: ["fileformats-test"] + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['3.8', '3.11'] + steps: + - uses: actions/checkout@v3 + - name: Revert version to most recent tag on upstream update + if: github.event_name == 'repository_dispatch' + run: git checkout $(git tag -l | tail -n 1 | awk -F post '{print $1}') + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: Install build dependencies + run: | + python -m pip install --upgrade pip + - name: Install task package + run: | + pip install "./fileformats-medimage-freesurfer-extras[test]" + python -c "import fileformats.extras.medimage_freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" + - name: Test fileformats extras with pytest + run: | + pytest -sv --doctest-modules ./fileformats-medimage-freesurfer-extras/fileformats/medimage_freesurfer \ + --cov fileformats/medimage_freesurfer --cov-report xml + test: - needs: [nipype-conv] + needs: [nipype-conv, fileformats-test, fileformats-extras-test] runs-on: ubuntu-22.04 strategy: matrix: python-version: ['3.8', '3.11'] - steps: - name: Install Freesurfer run: | - wget https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/7.4.0/freesurfer_ubuntu22-7.4.0_amd64.deb ~/freesurfer-install.deb - sudo apt install ~/freesurfer-install.deb + wget -q https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/7.4.0/freesurfer_ubuntu22-7.4.0_amd64.deb ~/freesurfer-install.deb + sudo apt install -y ~/freesurfer-install.deb - uses: actions/checkout@v3 - name: Revert version to most recent tag on upstream update if: github.event_name == 'repository_dispatch' @@ -102,7 +154,7 @@ jobs: path: pydra/tasks/freesurfer/auto - name: Strip auto package from gitignore so it is included in package run: | - sed -i '/\/pydra\/tasks\/freesurfer\/auto/d' .gitignore + sed -i '/\/src\/pydra\/tasks\/freesurfer\/auto/d' .gitignore - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: @@ -112,15 +164,18 @@ jobs: python -m pip install --upgrade pip - name: Install task package run: | - pip install ".[test]" + pip install "./src[test]" python -c "import pydra.tasks.freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" python -c "import pydra as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" - name: Test with pytest run: | - pytest -sv --doctest-modules pydra/tasks/freesurfer \ + pytest -sv --doctest-modules ./src/pydra/tasks/freesurfer \ --cov pydra.tasks.freesurfer --cov-report xml - uses: codecov/codecov-action@v3 if: ${{ always() }} + with: + files: .src/coverage.xml,./fileformats-medimage-freesurfer/coverage.xml,./fileformats-medimage-freesurfer-extras/coverage.xml + name: pydra-freesurfer deploy: needs: [devcheck, test] @@ -155,9 +210,13 @@ jobs: run: python -m pip install build twine - name: Strip auto package from gitignore so it is included in package run: | - sed -i '/\/pydra\/tasks\/freesurfer\/auto/d' .gitignore - - name: Build source and wheel distributions - run: python -m build + sed -i '/\/src\/pydra\/tasks\/freesurfer\/auto/d' .gitignore + - name: Build Pydra tasks source and wheel distributions + run: python -m build ./src + - name: Build fileformats source and wheel distributions + run: python -m build ./fileformats-medimage-freesurfer + - name: Build fileformats extras source and wheel distributions + run: python -m build ./fileformats-medimage-freesurfer-extras - name: Check distributions run: twine check dist/* - uses: actions/upload-artifact@v3 diff --git a/.gitignore b/.gitignore index dc819e3..74c6a7e 100644 --- a/.gitignore +++ b/.gitignore @@ -137,5 +137,7 @@ dmypy.json # Mac garbarge .DS_store -/pydra/tasks/freesurfer/_version.py -/pydra/tasks/freesurfer/auto +/src/pydra/tasks/freesurfer/_version.py +/fileformts-medimage-freesurfer/fileformats/medimage_freesurfer/_version.py +/fileformts-medimage-freesurfer-extras/fileformats/extras/medimage_freesurfer/_version.py +/src/pydra/tasks/freesurfer/auto diff --git a/docs/index.rst b/docs/index.rst index bc1ee5e..2f809eb 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,5 +1,5 @@ Welcome to pydra-freesurfer's documentation! -========================================= +============================================ .. toctree:: :maxdepth: 2 diff --git a/fileformats-medimage-freesurfer-extras/conftest.py b/fileformats-medimage-freesurfer-extras/conftest.py new file mode 100644 index 0000000..2a703c0 --- /dev/null +++ b/fileformats-medimage-freesurfer-extras/conftest.py @@ -0,0 +1,37 @@ +import os +import logging +from pathlib import Path +import tempfile +import pytest + +# Set DEBUG logging for unittests + +log_level = logging.WARNING + +logger = logging.getLogger("fileformats") +logger.setLevel(log_level) + +sch = logging.StreamHandler() +sch.setLevel(log_level) +formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") +sch.setFormatter(formatter) +logger.addHandler(sch) + + +# For debugging in IDE's don't catch raised exceptions and let the IDE +# break at it +if os.getenv("_PYTEST_RAISE", "0") != "0": + + @pytest.hookimpl(tryfirst=True) + def pytest_exception_interact(call): + raise call.excinfo.value + + @pytest.hookimpl(tryfirst=True) + def pytest_internalerror(excinfo): + raise excinfo.value + + +@pytest.fixture +def work_dir(): + work_dir = tempfile.mkdtemp() + return Path(work_dir) diff --git a/fileformats-medimage-freesurfer-extras/fileformats/extras/medimage_freesurfer/__init__.py b/fileformats-medimage-freesurfer-extras/fileformats/extras/medimage_freesurfer/__init__.py new file mode 100644 index 0000000..8dee4bf --- /dev/null +++ b/fileformats-medimage-freesurfer-extras/fileformats/extras/medimage_freesurfer/__init__.py @@ -0,0 +1 @@ +from ._version import __version__ diff --git a/fileformats-medimage-freesurfer-extras/fileformats/extras/medimage_freesurfer/_version.py b/fileformats-medimage-freesurfer-extras/fileformats/extras/medimage_freesurfer/_version.py new file mode 100644 index 0000000..4b004e0 --- /dev/null +++ b/fileformats-medimage-freesurfer-extras/fileformats/extras/medimage_freesurfer/_version.py @@ -0,0 +1,16 @@ +# file generated by setuptools_scm +# don't change, don't track in version control +TYPE_CHECKING = False +if TYPE_CHECKING: + from typing import Tuple, Union + VERSION_TUPLE = Tuple[Union[int, str], ...] +else: + VERSION_TUPLE = object + +version: str +__version__: str +__version_tuple__: VERSION_TUPLE +version_tuple: VERSION_TUPLE + +__version__ = version = '0.1.dev19+g7f136b2.d20231103' +__version_tuple__ = version_tuple = (0, 1, 'dev19', 'g7f136b2.d20231103') diff --git a/fileformats-medimage-freesurfer-extras/pyproject.toml b/fileformats-medimage-freesurfer-extras/pyproject.toml new file mode 100644 index 0000000..1c28130 --- /dev/null +++ b/fileformats-medimage-freesurfer-extras/pyproject.toml @@ -0,0 +1,87 @@ +[build-system] +requires = ["hatchling", "hatch-vcs"] +build-backend = "hatchling.build" + +[project] +name = "fileformats-medimage-freesurfer-extras" +description = "Classes for representing file formats used exclusively by the Freesurfer tool in Python classes for use in type hinting in data workflows" +readme = "../README.rst" +requires-python = ">=3.8" +dependencies = [ + "fileformats >= 0.7", + "fileformats-medimage-freesurfer", + "pydra >= 0.22.0" +] +license = {file = "../LICENSE"} +authors = [ + {name = "Thomas G. Close", email = "tom.g.close@gmail.com"}, +] +maintainers = [ + {name = "Thomas G. Close", email = "tom.g.close@gmail.com"}, +] +keywords = [ + "file formats", + "data", +] +classifiers = [ + "Development Status :: 3 - Alpha", + "Environment :: Console", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: Apache Software License", + "Operating System :: MacOS :: MacOS X", + "Operating System :: Microsoft :: Windows", + "Operating System :: POSIX :: Linux", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Topic :: Scientific/Engineering", +] +dynamic = ["version"] + +[project.optional-dependencies] +dev = [ + "black", + "pre-commit", + "codespell", + "flake8", + "flake8-pyproject", +] +test = [ + "pytest >=6.2.5", + "pytest-env>=0.6.2", + "pytest-cov>=2.12.1", + "codecov", +] + +converters = [ +] + +[project.urls] +repository = "https://github.com/nipype/pydra-freesurfer" + +[tool.hatch.version] +source = "vcs" +raw-options = { root = ".." } + +[tool.hatch.build.hooks.vcs] +version-file = "fileformats/extras/medimage_freesurfer/_version.py" + +[tool.hatch.build.targets.wheel] +packages = ["fileformats"] + +[tool.black] +target-version = ['py38'] +exclude = "fileformats/extras/medimage_freesurfer/_version.py" + +[tool.codespell] +ignore-words = ".codespell-ignorewords" + +[tool.flake8] +doctests = true +per-file-ignores = [ + "__init__.py:F401" +] +max-line-length = 88 +select = "C,E,F,W,B,B950" +extend-ignore = ['E203', 'E501', 'E129'] diff --git a/fileformats-medimage-freesurfer/conftest.py b/fileformats-medimage-freesurfer/conftest.py new file mode 100644 index 0000000..2a703c0 --- /dev/null +++ b/fileformats-medimage-freesurfer/conftest.py @@ -0,0 +1,37 @@ +import os +import logging +from pathlib import Path +import tempfile +import pytest + +# Set DEBUG logging for unittests + +log_level = logging.WARNING + +logger = logging.getLogger("fileformats") +logger.setLevel(log_level) + +sch = logging.StreamHandler() +sch.setLevel(log_level) +formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") +sch.setFormatter(formatter) +logger.addHandler(sch) + + +# For debugging in IDE's don't catch raised exceptions and let the IDE +# break at it +if os.getenv("_PYTEST_RAISE", "0") != "0": + + @pytest.hookimpl(tryfirst=True) + def pytest_exception_interact(call): + raise call.excinfo.value + + @pytest.hookimpl(tryfirst=True) + def pytest_internalerror(excinfo): + raise excinfo.value + + +@pytest.fixture +def work_dir(): + work_dir = tempfile.mkdtemp() + return Path(work_dir) diff --git a/fileformats-medimage-freesurfer/fileformats/medimage_freesurfer/__init__.py b/fileformats-medimage-freesurfer/fileformats/medimage_freesurfer/__init__.py new file mode 100644 index 0000000..8dee4bf --- /dev/null +++ b/fileformats-medimage-freesurfer/fileformats/medimage_freesurfer/__init__.py @@ -0,0 +1 @@ +from ._version import __version__ diff --git a/fileformats-medimage-freesurfer/fileformats/medimage_freesurfer/_version.py b/fileformats-medimage-freesurfer/fileformats/medimage_freesurfer/_version.py new file mode 100644 index 0000000..4b004e0 --- /dev/null +++ b/fileformats-medimage-freesurfer/fileformats/medimage_freesurfer/_version.py @@ -0,0 +1,16 @@ +# file generated by setuptools_scm +# don't change, don't track in version control +TYPE_CHECKING = False +if TYPE_CHECKING: + from typing import Tuple, Union + VERSION_TUPLE = Tuple[Union[int, str], ...] +else: + VERSION_TUPLE = object + +version: str +__version__: str +__version_tuple__: VERSION_TUPLE +version_tuple: VERSION_TUPLE + +__version__ = version = '0.1.dev19+g7f136b2.d20231103' +__version_tuple__ = version_tuple = (0, 1, 'dev19', 'g7f136b2.d20231103') diff --git a/fileformats-medimage-freesurfer/pyproject.toml b/fileformats-medimage-freesurfer/pyproject.toml new file mode 100644 index 0000000..2cd17d0 --- /dev/null +++ b/fileformats-medimage-freesurfer/pyproject.toml @@ -0,0 +1,82 @@ +[build-system] +requires = ["hatchling", "hatch-vcs"] +build-backend = "hatchling.build" + +[project] +name = "fileformats-medimage-freesurfer" +description = "Classes for representing different file formats in Python classes for use in type hinting in data workflows" +readme = "../README.rst" +requires-python = ">=3.8" +dependencies = [ + "fileformats >= 0.4" +] +license = {file = "../LICENSE"} +authors = [ + {name = "Thomas G. Close", email = "tom.g.close@gmail.com"}, +] +maintainers = [ + {name = "Thomas G. Close", email = "tom.g.close@gmail.com"}, +] +keywords = [ + "file formats", + "data", +] +classifiers = [ + "Development Status :: 3 - Alpha", + "Environment :: Console", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: Apache Software License", + "Operating System :: MacOS :: MacOS X", + "Operating System :: Microsoft :: Windows", + "Operating System :: POSIX :: Linux", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Topic :: Scientific/Engineering", +] +dynamic = ["version"] + +[project.optional-dependencies] +dev = [ + "black", + "pre-commit", + "codespell", + "flake8", + "flake8-pyproject", +] +test = [ + "pytest >=6.2.5", + "pytest-env>=0.6.2", + "pytest-cov>=2.12.1", + "codecov", +] + +[project.urls] +repository = "https://github.com/nipype/pydra-freesurfer" + +[tool.hatch.version] +source = "vcs" +raw-options = { root = ".." } + +[tool.hatch.build.hooks.vcs] +version-file = "fileformats/medimage_freesurfer/_version.py" + +[tool.hatch.build.targets.wheel] +packages = ["fileformats"] + +[tool.black] +target-version = ['py38'] +exclude = "fileformats/medimage_freesurfer/_version.py" + +[tool.codespell] +ignore-words = ".codespell-ignorewords" + +[tool.flake8] +doctests = true +per-file-ignores = [ + "__init__.py:F401" +] +max-line-length = 88 +select = "C,E,F,W,B,B950" +extend-ignore = ['E203', 'E501', 'E129'] diff --git a/src/conftest.py b/src/conftest.py new file mode 100644 index 0000000..97cd9d0 --- /dev/null +++ b/src/conftest.py @@ -0,0 +1,27 @@ +import os +import pytest +import logging + +log_level = logging.WARNING + +logger = logging.getLogger("fileformats") +logger.setLevel(log_level) + +sch = logging.StreamHandler() +sch.setLevel(log_level) +formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") +sch.setFormatter(formatter) +logger.addHandler(sch) + + +# For debugging in IDE's don't catch raised exceptions and let the IDE +# break at it +if os.getenv("_PYTEST_RAISE", "0") != "0": + + @pytest.hookimpl(tryfirst=True) + def pytest_exception_interact(call): + raise call.excinfo.value + + @pytest.hookimpl(tryfirst=True) + def pytest_internalerror(excinfo): + raise excinfo.value diff --git a/pydra/tasks/freesurfer/__init__.py b/src/pydra/tasks/freesurfer/__init__.py similarity index 100% rename from pydra/tasks/freesurfer/__init__.py rename to src/pydra/tasks/freesurfer/__init__.py diff --git a/pydra/tasks/freesurfer/latest.py b/src/pydra/tasks/freesurfer/latest.py similarity index 100% rename from pydra/tasks/freesurfer/latest.py rename to src/pydra/tasks/freesurfer/latest.py diff --git a/pydra/tasks/freesurfer/v1/__init__.py b/src/pydra/tasks/freesurfer/v1/__init__.py similarity index 100% rename from pydra/tasks/freesurfer/v1/__init__.py rename to src/pydra/tasks/freesurfer/v1/__init__.py diff --git a/pyproject.toml b/src/pyproject.toml similarity index 92% rename from pyproject.toml rename to src/pyproject.toml index c4f330a..090208e 100644 --- a/pyproject.toml +++ b/src/pyproject.toml @@ -5,14 +5,15 @@ build-backend = "hatchling.build" [project] name = "pydra-tasks-freesurfer" description = "Pydra tasks package for freesurfer" -readme = "README.rst" +readme = "../README.rst" requires-python = ">=3.8" dependencies = [ "pydra >=0.22", "fileformats >=0.8.3", "fileformats-datascience >=0.1", - "fileformats-medimage >=0.4.1"] -license = {file = "LICENSE"} + "fileformats-medimage >=0.4.1", + "fileformats-medimage-freesurfer"] +license = {file = "../LICENSE"} authors = [{name = "Nipype developers", email = "neuroimaging@python.org"}] maintainers = [{name = "Nipype developers", email = "neuroimaging@python.org"}] keywords = ["pydra"] @@ -55,6 +56,7 @@ test = [ [tool.hatch.version] source = "vcs" +raw-options = { root = ".." } [tool.hatch.build.hooks.vcs] version-file = "pydra/tasks/freesurfer/_version.py" From 7f2bfbb45501ae087bc06d59948698c8c6071cbf Mon Sep 17 00:00:00 2001 From: Tom Close Date: Fri, 3 Nov 2023 14:47:01 +1100 Subject: [PATCH 06/18] commented out fileformats tests as they are currently empty --- .github/workflows/pythonpackage.yaml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/.github/workflows/pythonpackage.yaml b/.github/workflows/pythonpackage.yaml index f18fad5..3fea0b2 100644 --- a/.github/workflows/pythonpackage.yaml +++ b/.github/workflows/pythonpackage.yaml @@ -100,10 +100,10 @@ jobs: run: | pip install "./fileformats-medimage-freesurfer[test]" python -c "import fileformats.medimage_freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" - - name: Test fileformats with pytest - run: | - pytest -sv --doctest-modules ./fileformats-medimage-freesurfer/fileformats/medimage_freesurfer \ - --cov fileformats/medimage_freesurfer --cov-report xml + # - name: Test fileformats with pytest + # run: | + # pytest -sv --doctest-modules ./fileformats-medimage-freesurfer/fileformats/medimage_freesurfer \ + # --cov fileformats/medimage_freesurfer --cov-report xml fileformats-extras-test: needs: ["fileformats-test"] @@ -127,10 +127,10 @@ jobs: run: | pip install "./fileformats-medimage-freesurfer-extras[test]" python -c "import fileformats.extras.medimage_freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" - - name: Test fileformats extras with pytest - run: | - pytest -sv --doctest-modules ./fileformats-medimage-freesurfer-extras/fileformats/medimage_freesurfer \ - --cov fileformats/medimage_freesurfer --cov-report xml + # - name: Test fileformats extras with pytest + # run: | + # pytest -sv --doctest-modules ./fileformats-medimage-freesurfer-extras/fileformats/medimage_freesurfer \ + # --cov fileformats/medimage_freesurfer --cov-report xml test: needs: [nipype-conv, fileformats-test, fileformats-extras-test] @@ -174,7 +174,8 @@ jobs: - uses: codecov/codecov-action@v3 if: ${{ always() }} with: - files: .src/coverage.xml,./fileformats-medimage-freesurfer/coverage.xml,./fileformats-medimage-freesurfer-extras/coverage.xml + files: .src/coverage.xml + # ,./fileformats-medimage-freesurfer/coverage.xml,./fileformats-medimage-freesurfer-extras/coverage.xml name: pydra-freesurfer deploy: From d225f06075ffe4cbae5710606c5a0c7a63326b3b Mon Sep 17 00:00:00 2001 From: Tom Close Date: Fri, 3 Nov 2023 14:50:58 +1100 Subject: [PATCH 07/18] added fileformats-medimage-freesurfer to extras test --- .github/workflows/pythonpackage.yaml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pythonpackage.yaml b/.github/workflows/pythonpackage.yaml index 3fea0b2..2600f1d 100644 --- a/.github/workflows/pythonpackage.yaml +++ b/.github/workflows/pythonpackage.yaml @@ -71,7 +71,9 @@ jobs: python -m pip install --upgrade pip - name: Install Pydra run: | + pushd $HOME pip install ${{ matrix.pydra }} + popd python -c "import pydra as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" - name: Install task package run: | @@ -125,7 +127,7 @@ jobs: python -m pip install --upgrade pip - name: Install task package run: | - pip install "./fileformats-medimage-freesurfer-extras[test]" + pip install "./fileformats-medimage-freesurfer" "./fileformats-medimage-freesurfer-extras[test]" python -c "import fileformats.extras.medimage_freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" # - name: Test fileformats extras with pytest # run: | @@ -141,8 +143,13 @@ jobs: steps: - name: Install Freesurfer run: | - wget -q https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/7.4.0/freesurfer_ubuntu22-7.4.0_amd64.deb ~/freesurfer-install.deb - sudo apt install -y ~/freesurfer-install.deb + curl -s -o $HOME/freesurfer.tar.gz https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/7.4.1/freesurfer-linux-ubuntu22_amd64-7.4.1.tar.gz + df -h + pushd $HOME + tar -zxpf freesurfer.tar.gz + popd + export FREESURFER_HOME=$HOME/freesurfer + source $FREESURFER_HOME/SetUpFreeSurfer.sh - uses: actions/checkout@v3 - name: Revert version to most recent tag on upstream update if: github.event_name == 'repository_dispatch' From f39531c231fa9c0724ffabb523eb53c6c75f52df Mon Sep 17 00:00:00 2001 From: Tom Close Date: Fri, 3 Nov 2023 18:13:08 +1100 Subject: [PATCH 08/18] added fileformats-medimage-freesurfer to dev check install --- .github/workflows/pythonpackage.yaml | 4 ++-- src/pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pythonpackage.yaml b/.github/workflows/pythonpackage.yaml index 2600f1d..fe62537 100644 --- a/.github/workflows/pythonpackage.yaml +++ b/.github/workflows/pythonpackage.yaml @@ -77,7 +77,7 @@ jobs: python -c "import pydra as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" - name: Install task package run: | - pip install ${{ matrix.pip-flags }} "./src[dev]" + pip install ${{ matrix.pip-flags }} "./fileformats-medimage-freesurfer" "./src[dev]" python -c "import pydra.tasks.freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" python -c "import pydra as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" @@ -171,7 +171,7 @@ jobs: python -m pip install --upgrade pip - name: Install task package run: | - pip install "./src[test]" + pip install "./fileformats-medimage-freesurfer" "./src[test]" python -c "import pydra.tasks.freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" python -c "import pydra as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" - name: Test with pytest diff --git a/src/pyproject.toml b/src/pyproject.toml index 090208e..21fd253 100644 --- a/src/pyproject.toml +++ b/src/pyproject.toml @@ -3,7 +3,7 @@ requires = ["hatchling", "hatch-vcs"] build-backend = "hatchling.build" [project] -name = "pydra-tasks-freesurfer" +name = "pydra-freesurfer" description = "Pydra tasks package for freesurfer" readme = "../README.rst" requires-python = ">=3.8" From fc31fdd660779a1235d048f1df414ac6932a84a7 Mon Sep 17 00:00:00 2001 From: Tom Close Date: Fri, 3 Nov 2023 18:20:43 +1100 Subject: [PATCH 09/18] changed message to check for when seeing if auto packages have been generated --- src/pydra/tasks/freesurfer/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pydra/tasks/freesurfer/__init__.py b/src/pydra/tasks/freesurfer/__init__.py index 179c1f8..a61327e 100644 --- a/src/pydra/tasks/freesurfer/__init__.py +++ b/src/pydra/tasks/freesurfer/__init__.py @@ -21,7 +21,7 @@ try: from .auto._version import nipype_version, nipype2pydra_version except ModuleNotFoundError as e: - if "No module named 'pydra.tasks.freesurfer.auto._version'" in str(e): + if "No module named 'pydra.tasks.freesurfer.auto'" in str(e): warn( "Nipype interfaces haven't been automatically converted from their specs in " f"`nipype-auto-conv`. Please run `{str(pkg_path / 'nipype-auto-conv' / 'generate')}` " From 0acff99bcbf8bff85a774560f09bcc3c142c045b Mon Sep 17 00:00:00 2001 From: Tom Close Date: Fri, 3 Nov 2023 18:27:27 +1100 Subject: [PATCH 10/18] add freesurfer license key to test gha job --- .github/workflows/pythonpackage.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/pythonpackage.yaml b/.github/workflows/pythonpackage.yaml index fe62537..0fe3386 100644 --- a/.github/workflows/pythonpackage.yaml +++ b/.github/workflows/pythonpackage.yaml @@ -142,6 +142,8 @@ jobs: python-version: ['3.8', '3.11'] steps: - name: Install Freesurfer + env: + FREESURFER_LICENCE: ${{ secrets.FREESURFER_LICENCE }} run: | curl -s -o $HOME/freesurfer.tar.gz https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/7.4.1/freesurfer-linux-ubuntu22_amd64-7.4.1.tar.gz df -h @@ -150,6 +152,7 @@ jobs: popd export FREESURFER_HOME=$HOME/freesurfer source $FREESURFER_HOME/SetUpFreeSurfer.sh + echo $FREESURFER_LICENCE > $FREESURFER_HOME/license.txt - uses: actions/checkout@v3 - name: Revert version to most recent tag on upstream update if: github.event_name == 'repository_dispatch' From 27d326a43339e424c55597879973353086cc6b1f Mon Sep 17 00:00:00 2001 From: Tom Close Date: Fri, 3 Nov 2023 18:30:10 +1100 Subject: [PATCH 11/18] removed matrix from deploy node --- .github/workflows/pythonpackage.yaml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pythonpackage.yaml b/.github/workflows/pythonpackage.yaml index 0fe3386..a2ab450 100644 --- a/.github/workflows/pythonpackage.yaml +++ b/.github/workflows/pythonpackage.yaml @@ -191,9 +191,6 @@ jobs: deploy: needs: [devcheck, test] runs-on: ubuntu-latest - strategy: - matrix: - python-version: ['3.11'] steps: - uses: actions/checkout@v3 with: @@ -213,10 +210,10 @@ jobs: git add -f pydra/tasks/freesurfer/auto/_version.py git commit -am"added auto-generated version to make new tag for package version" git tag ${TAG}post${POST} - - name: Set up Python ${{ matrix.python-version }} + - name: Set up Python uses: actions/setup-python@v4 with: - python-version: ${{ matrix.python-version }} + python-version: '3.11' - name: Install build tools run: python -m pip install build twine - name: Strip auto package from gitignore so it is included in package From 41044f9b38e1b589b246953d94f8f5f2a6cf1ec1 Mon Sep 17 00:00:00 2001 From: Tom Close Date: Fri, 3 Nov 2023 18:38:17 +1100 Subject: [PATCH 12/18] dropped 3.11 from test matrix --- .github/workflows/pythonpackage.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yaml b/.github/workflows/pythonpackage.yaml index a2ab450..994e1f5 100644 --- a/.github/workflows/pythonpackage.yaml +++ b/.github/workflows/pythonpackage.yaml @@ -139,7 +139,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - python-version: ['3.8', '3.11'] + python-version: ['3.8'] # '3.11' steps: - name: Install Freesurfer env: From 9f6653c7b5371baec61c566aa75321c78d37fe6f Mon Sep 17 00:00:00 2001 From: Tom Close Date: Mon, 6 Nov 2023 11:09:12 +1100 Subject: [PATCH 13/18] trying to get freesurfer gha install to work --- .github/workflows/pythonpackage.yaml | 24 +++++++++++++++++++----- src/pyproject.toml | 1 + 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pythonpackage.yaml b/.github/workflows/pythonpackage.yaml index 994e1f5..2735128 100644 --- a/.github/workflows/pythonpackage.yaml +++ b/.github/workflows/pythonpackage.yaml @@ -141,14 +141,28 @@ jobs: matrix: python-version: ['3.8'] # '3.11' steps: + - name: Get Download cache Key + id: cache-key + run: echo "::set-output name=key::freesurfer-linux-ubuntu22_amd64-7.4.1" + - name: Cache FreeSurfer + uses: actions/cache@v2 + with: + path: $HOME/downloads/freesurfer + key: ${{ steps.cache-key.outputs.key }} + restore-keys: | + freesurfer-linux-ubuntu22_amd64-7.4.1 + - name: Download FreeSurfer + if: steps.cache-key.outputs.key != steps.cache-hit.outputs.key + run: | + mkdir -p $HOME/downloads/freesurfer + curl -s -o $HOME/downloads/freesurfer/freesurfer-linux-ubuntu22_amd64-7.4.1.tar.gz https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/7.4.1/freesurfer-linux-ubuntu22_amd64-7.4.1.tar.gz + shell: bash - name: Install Freesurfer env: FREESURFER_LICENCE: ${{ secrets.FREESURFER_LICENCE }} run: | - curl -s -o $HOME/freesurfer.tar.gz https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/7.4.1/freesurfer-linux-ubuntu22_amd64-7.4.1.tar.gz - df -h - pushd $HOME - tar -zxpf freesurfer.tar.gz + pushd $HOME/downloads/freesurfer + tar -zxpf freesurfer-linux-ubuntu22_amd64-7.4.1.tar.gz popd export FREESURFER_HOME=$HOME/freesurfer source $FREESURFER_HOME/SetUpFreeSurfer.sh @@ -174,7 +188,7 @@ jobs: python -m pip install --upgrade pip - name: Install task package run: | - pip install "./fileformats-medimage-freesurfer" "./src[test]" + pip install "./fileformats-medimage-freesurfer" "./fileformats-medimage-freesurfer-extras" "./src[test]" python -c "import pydra.tasks.freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" python -c "import pydra as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" - name: Test with pytest diff --git a/src/pyproject.toml b/src/pyproject.toml index 21fd253..4224d18 100644 --- a/src/pyproject.toml +++ b/src/pyproject.toml @@ -52,6 +52,7 @@ test = [ "fileformats-extras", "fileformats-datascience-extras", "fileformats-medimage-extras", + "fileformats-medimage-freesurfer-extras", ] [tool.hatch.version] From 594cd0a040494bc818e96cbb4f6d4db3817805bd Mon Sep 17 00:00:00 2001 From: Tom Close Date: Mon, 6 Nov 2023 11:27:26 +1100 Subject: [PATCH 14/18] remove unneccessary tools to free space in image --- .github/workflows/pythonpackage.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/pythonpackage.yaml b/.github/workflows/pythonpackage.yaml index 2735128..8319038 100644 --- a/.github/workflows/pythonpackage.yaml +++ b/.github/workflows/pythonpackage.yaml @@ -141,6 +141,10 @@ jobs: matrix: python-version: ['3.8'] # '3.11' steps: + - name: Removed unnecessary tools to free space + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf "$AGENT_TOOLSDIRECTORY" - name: Get Download cache Key id: cache-key run: echo "::set-output name=key::freesurfer-linux-ubuntu22_amd64-7.4.1" From df363d5cb2ad3e739f8cfb92b33f66d6b3d5a8bd Mon Sep 17 00:00:00 2001 From: Tom Close Date: Mon, 6 Nov 2023 11:30:02 +1100 Subject: [PATCH 15/18] add freesurfer bin to path --- .github/workflows/pythonpackage.yaml | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/.github/workflows/pythonpackage.yaml b/.github/workflows/pythonpackage.yaml index 8319038..c7c95ad 100644 --- a/.github/workflows/pythonpackage.yaml +++ b/.github/workflows/pythonpackage.yaml @@ -36,7 +36,7 @@ jobs: - uses: actions/upload-artifact@v3 with: name: converted-nipype - path: pydra/tasks/freesurfer/auto + path: src/pydra/tasks/freesurfer/auto devcheck: needs: [nipype-conv] @@ -58,7 +58,7 @@ jobs: uses: actions/download-artifact@v3 with: name: converted-nipype - path: pydra/tasks/freesurfer/auto + path: src/pydra/tasks/freesurfer/auto - name: Strip auto package from gitignore so it is included in package run: | sed -i '/\/src\/pydra\/tasks\/freesurfer\/auto/d' .gitignore @@ -100,7 +100,7 @@ jobs: python -m pip install --upgrade pip - name: Install task package run: | - pip install "./fileformats-medimage-freesurfer[test]" + pip install "./fileformats/medimage-freesurfer[test]" python -c "import fileformats.medimage_freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" # - name: Test fileformats with pytest # run: | @@ -127,7 +127,7 @@ jobs: python -m pip install --upgrade pip - name: Install task package run: | - pip install "./fileformats-medimage-freesurfer" "./fileformats-medimage-freesurfer-extras[test]" + pip install "./fileformats/medimage-freesurfer" "./fileformats/medimage-freesurfer-extras[test]" python -c "import fileformats.extras.medimage_freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" # - name: Test fileformats extras with pytest # run: | @@ -167,10 +167,12 @@ jobs: run: | pushd $HOME/downloads/freesurfer tar -zxpf freesurfer-linux-ubuntu22_amd64-7.4.1.tar.gz + mv freesurfer-linux-ubuntu22_amd64-7.4.1 $HOME/freesurfer popd export FREESURFER_HOME=$HOME/freesurfer source $FREESURFER_HOME/SetUpFreeSurfer.sh echo $FREESURFER_LICENCE > $FREESURFER_HOME/license.txt + export PATH=$FREESURFER_HOME/bin:$PATH - uses: actions/checkout@v3 - name: Revert version to most recent tag on upstream update if: github.event_name == 'repository_dispatch' @@ -179,7 +181,7 @@ jobs: uses: actions/download-artifact@v3 with: name: converted-nipype - path: pydra/tasks/freesurfer/auto + path: src/pydra/tasks/freesurfer/auto - name: Strip auto package from gitignore so it is included in package run: | sed -i '/\/src\/pydra\/tasks\/freesurfer\/auto/d' .gitignore @@ -209,6 +211,9 @@ jobs: deploy: needs: [devcheck, test] runs-on: ubuntu-latest + strategy: + matrix: + pkg-dir: [".", "./fileformats/medimage-freesurfer", "./fileformats/medimage-freesurfer-extras"] steps: - uses: actions/checkout@v3 with: @@ -218,14 +223,14 @@ jobs: uses: actions/download-artifact@v3 with: name: converted-nipype - path: pydra/tasks/freesurfer/auto + path: src/pydra/tasks/freesurfer/auto - name: Tag release with a post-release based on Nipype and Nipype2Pydra versions if: github.event_name == 'repository_dispatch' run: | TAG=$(git tag -l | tail -n 1 | awk -F post '{print $1}') POST=$(python -c "from pydra.tasks.freesurfer.auto._version import *; print(post_release)") git checkout $TAG - git add -f pydra/tasks/freesurfer/auto/_version.py + git add -f src/pydra/tasks/freesurfer/auto/_version.py git commit -am"added auto-generated version to make new tag for package version" git tag ${TAG}post${POST} - name: Set up Python @@ -237,12 +242,8 @@ jobs: - name: Strip auto package from gitignore so it is included in package run: | sed -i '/\/src\/pydra\/tasks\/freesurfer\/auto/d' .gitignore - - name: Build Pydra tasks source and wheel distributions - run: python -m build ./src - - name: Build fileformats source and wheel distributions - run: python -m build ./fileformats-medimage-freesurfer - - name: Build fileformats extras source and wheel distributions - run: python -m build ./fileformats-medimage-freesurfer-extras + - name: Build source and wheel distributions + run: python -m build ${{ matrix.pkg-dir }} - name: Check distributions run: twine check dist/* - uses: actions/upload-artifact@v3 From 3cbcdefd4eeae60ff7d8ec76ea848442b8db8005 Mon Sep 17 00:00:00 2001 From: Tom Close Date: Mon, 6 Nov 2023 14:36:30 +1100 Subject: [PATCH 16/18] moved fileformats inside `fileformats` directory --- .github/workflows/pythonpackage.yaml | 25 +++++++++++-------- .gitignore | 7 ++++-- .../extras/medimage_freesurfer/_version.py | 16 ------------ .../medimage_freesurfer/_version.py | 16 ------------ nipype-auto-conv/generate | 8 +++--- .../conftest.py | 0 .../extras/medimage_freesurfer/__init__.py | 0 .../pyproject.toml | 0 .../conftest.py | 0 .../medimage_freesurfer/__init__.py | 0 .../pyproject.toml | 0 11 files changed, 23 insertions(+), 49 deletions(-) delete mode 100644 fileformats-medimage-freesurfer-extras/fileformats/extras/medimage_freesurfer/_version.py delete mode 100644 fileformats-medimage-freesurfer/fileformats/medimage_freesurfer/_version.py rename {fileformats-medimage-freesurfer-extras => src-fileformats-extras}/conftest.py (100%) rename {fileformats-medimage-freesurfer-extras => src-fileformats-extras}/fileformats/extras/medimage_freesurfer/__init__.py (100%) rename {fileformats-medimage-freesurfer-extras => src-fileformats-extras}/pyproject.toml (100%) rename {fileformats-medimage-freesurfer => src-fileformats}/conftest.py (100%) rename {fileformats-medimage-freesurfer => src-fileformats}/fileformats/medimage_freesurfer/__init__.py (100%) rename {fileformats-medimage-freesurfer => src-fileformats}/pyproject.toml (100%) diff --git a/.github/workflows/pythonpackage.yaml b/.github/workflows/pythonpackage.yaml index c7c95ad..faf4e17 100644 --- a/.github/workflows/pythonpackage.yaml +++ b/.github/workflows/pythonpackage.yaml @@ -77,9 +77,12 @@ jobs: python -c "import pydra as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" - name: Install task package run: | - pip install ${{ matrix.pip-flags }} "./fileformats-medimage-freesurfer" "./src[dev]" + pip install ${{ matrix.pip-flags }} "./src-fileformats[dev]" "./src-fileformats-extras[dev]" "./src[dev]" python -c "import pydra.tasks.freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" python -c "import pydra as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" + python -c "import fileformats.freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" + python -c "import fileformats.extras.freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" + fileformats-test: runs-on: ubuntu-latest @@ -100,12 +103,12 @@ jobs: python -m pip install --upgrade pip - name: Install task package run: | - pip install "./fileformats/medimage-freesurfer[test]" + pip install "./src-fileformats[test]" python -c "import fileformats.medimage_freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" # - name: Test fileformats with pytest # run: | - # pytest -sv --doctest-modules ./fileformats-medimage-freesurfer/fileformats/medimage_freesurfer \ - # --cov fileformats/medimage_freesurfer --cov-report xml + # pytest -sv --doctest-modules ./src-fileformats/fileformats/medimage_freesurfer \ + # --cov fileformats.medimage_freesurfer --cov-report xml fileformats-extras-test: needs: ["fileformats-test"] @@ -127,12 +130,12 @@ jobs: python -m pip install --upgrade pip - name: Install task package run: | - pip install "./fileformats/medimage-freesurfer" "./fileformats/medimage-freesurfer-extras[test]" + pip install "./src-fileformats" "./src-fileformats-extras[test]" python -c "import fileformats.extras.medimage_freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" # - name: Test fileformats extras with pytest # run: | - # pytest -sv --doctest-modules ./fileformats-medimage-freesurfer-extras/fileformats/medimage_freesurfer \ - # --cov fileformats/medimage_freesurfer --cov-report xml + # pytest -sv --doctest-modules ./src-fileformats-extras/fileformats/medimage_freesurfer \ + # --cov fileformats.extras.medimage_freesurfer --cov-report xml test: needs: [nipype-conv, fileformats-test, fileformats-extras-test] @@ -167,7 +170,7 @@ jobs: run: | pushd $HOME/downloads/freesurfer tar -zxpf freesurfer-linux-ubuntu22_amd64-7.4.1.tar.gz - mv freesurfer-linux-ubuntu22_amd64-7.4.1 $HOME/freesurfer + mv freesurfer $HOME/ popd export FREESURFER_HOME=$HOME/freesurfer source $FREESURFER_HOME/SetUpFreeSurfer.sh @@ -194,7 +197,7 @@ jobs: python -m pip install --upgrade pip - name: Install task package run: | - pip install "./fileformats-medimage-freesurfer" "./fileformats-medimage-freesurfer-extras" "./src[test]" + pip install "./src-fileformats" "./src-fileformats-extras" "./src[test]" python -c "import pydra.tasks.freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" python -c "import pydra as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" - name: Test with pytest @@ -205,7 +208,7 @@ jobs: if: ${{ always() }} with: files: .src/coverage.xml - # ,./fileformats-medimage-freesurfer/coverage.xml,./fileformats-medimage-freesurfer-extras/coverage.xml + # ,./src-fileformats/coverage.xml,./src-fileformats-extras/coverage.xml name: pydra-freesurfer deploy: @@ -213,7 +216,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - pkg-dir: [".", "./fileformats/medimage-freesurfer", "./fileformats/medimage-freesurfer-extras"] + pkg-dir: [".", "./src-fileformats", "./src-fileformats-extras"] steps: - uses: actions/checkout@v3 with: diff --git a/.gitignore b/.gitignore index 74c6a7e..2d8ee4f 100644 --- a/.gitignore +++ b/.gitignore @@ -137,7 +137,10 @@ dmypy.json # Mac garbarge .DS_store +# Auto-generated version files /src/pydra/tasks/freesurfer/_version.py -/fileformts-medimage-freesurfer/fileformats/medimage_freesurfer/_version.py -/fileformts-medimage-freesurfer-extras/fileformats/extras/medimage_freesurfer/_version.py +/src-fileformats/fileformats/medimage_freesurfer/_version.py +/src-fileformts-extras/fileformats/extras/medimage_freesurfer/_version.py + +# Auto-converted (from Nipype) interfaces directory (needs to be stripped before packaging) /src/pydra/tasks/freesurfer/auto diff --git a/fileformats-medimage-freesurfer-extras/fileformats/extras/medimage_freesurfer/_version.py b/fileformats-medimage-freesurfer-extras/fileformats/extras/medimage_freesurfer/_version.py deleted file mode 100644 index 4b004e0..0000000 --- a/fileformats-medimage-freesurfer-extras/fileformats/extras/medimage_freesurfer/_version.py +++ /dev/null @@ -1,16 +0,0 @@ -# file generated by setuptools_scm -# don't change, don't track in version control -TYPE_CHECKING = False -if TYPE_CHECKING: - from typing import Tuple, Union - VERSION_TUPLE = Tuple[Union[int, str], ...] -else: - VERSION_TUPLE = object - -version: str -__version__: str -__version_tuple__: VERSION_TUPLE -version_tuple: VERSION_TUPLE - -__version__ = version = '0.1.dev19+g7f136b2.d20231103' -__version_tuple__ = version_tuple = (0, 1, 'dev19', 'g7f136b2.d20231103') diff --git a/fileformats-medimage-freesurfer/fileformats/medimage_freesurfer/_version.py b/fileformats-medimage-freesurfer/fileformats/medimage_freesurfer/_version.py deleted file mode 100644 index 4b004e0..0000000 --- a/fileformats-medimage-freesurfer/fileformats/medimage_freesurfer/_version.py +++ /dev/null @@ -1,16 +0,0 @@ -# file generated by setuptools_scm -# don't change, don't track in version control -TYPE_CHECKING = False -if TYPE_CHECKING: - from typing import Tuple, Union - VERSION_TUPLE = Tuple[Union[int, str], ...] -else: - VERSION_TUPLE = object - -version: str -__version__: str -__version_tuple__: VERSION_TUPLE -version_tuple: VERSION_TUPLE - -__version__ = version = '0.1.dev19+g7f136b2.d20231103' -__version_tuple__ = version_tuple = (0, 1, 'dev19', 'g7f136b2.d20231103') diff --git a/nipype-auto-conv/generate b/nipype-auto-conv/generate index dca1fb9..eadeaf1 100755 --- a/nipype-auto-conv/generate +++ b/nipype-auto-conv/generate @@ -31,7 +31,7 @@ sys.path.insert(0, str(SPECS_DIR)) auto_init = f"# Auto-generated by {__file__}, do not edit as it will be overwritten\n\n" -auto_dir = PKG_ROOT / "pydra" / "tasks" / PKG_NAME / "auto" +auto_dir = PKG_ROOT / "src" / "pydra" / "tasks" / PKG_NAME / "auto" if auto_dir.exists(): shutil.rmtree(auto_dir) @@ -54,11 +54,11 @@ for fspath in sorted(SPECS_DIR.glob("**/*.yaml")): callables_module=callables, # type: ignore **spec, ) - converter.generate(PKG_ROOT) + converter.generate(PKG_ROOT / "src") auto_init += f"from .{module_name} import {converter.task_name}\n" -with open(PKG_ROOT / "pydra" / "tasks" / PKG_NAME / "auto" / "_version.py", "w") as f: +with open(auto_dir / "_version.py", "w") as f: f.write( f"""# Auto-generated by {__file__}, do not edit as it will be overwritten @@ -68,5 +68,5 @@ post_release = (nipype_version + nipype2pydra_version).replace(".", "") """ ) -with open(PKG_ROOT / "pydra" / "tasks" / PKG_NAME / "auto" / "__init__.py", "w") as f: +with open(auto_dir / "__init__.py", "w") as f: f.write(auto_init) diff --git a/fileformats-medimage-freesurfer-extras/conftest.py b/src-fileformats-extras/conftest.py similarity index 100% rename from fileformats-medimage-freesurfer-extras/conftest.py rename to src-fileformats-extras/conftest.py diff --git a/fileformats-medimage-freesurfer-extras/fileformats/extras/medimage_freesurfer/__init__.py b/src-fileformats-extras/fileformats/extras/medimage_freesurfer/__init__.py similarity index 100% rename from fileformats-medimage-freesurfer-extras/fileformats/extras/medimage_freesurfer/__init__.py rename to src-fileformats-extras/fileformats/extras/medimage_freesurfer/__init__.py diff --git a/fileformats-medimage-freesurfer-extras/pyproject.toml b/src-fileformats-extras/pyproject.toml similarity index 100% rename from fileformats-medimage-freesurfer-extras/pyproject.toml rename to src-fileformats-extras/pyproject.toml diff --git a/fileformats-medimage-freesurfer/conftest.py b/src-fileformats/conftest.py similarity index 100% rename from fileformats-medimage-freesurfer/conftest.py rename to src-fileformats/conftest.py diff --git a/fileformats-medimage-freesurfer/fileformats/medimage_freesurfer/__init__.py b/src-fileformats/fileformats/medimage_freesurfer/__init__.py similarity index 100% rename from fileformats-medimage-freesurfer/fileformats/medimage_freesurfer/__init__.py rename to src-fileformats/fileformats/medimage_freesurfer/__init__.py diff --git a/fileformats-medimage-freesurfer/pyproject.toml b/src-fileformats/pyproject.toml similarity index 100% rename from fileformats-medimage-freesurfer/pyproject.toml rename to src-fileformats/pyproject.toml From 608d949b959d24c5d79873c198eabed462e64a55 Mon Sep 17 00:00:00 2001 From: Tom Close Date: Tue, 7 Nov 2023 08:58:01 +1100 Subject: [PATCH 17/18] changed order of installation in devcheck --- .github/workflows/pythonpackage.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yaml b/.github/workflows/pythonpackage.yaml index faf4e17..c62e226 100644 --- a/.github/workflows/pythonpackage.yaml +++ b/.github/workflows/pythonpackage.yaml @@ -77,7 +77,7 @@ jobs: python -c "import pydra as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" - name: Install task package run: | - pip install ${{ matrix.pip-flags }} "./src-fileformats[dev]" "./src-fileformats-extras[dev]" "./src[dev]" + pip install ${{ matrix.pip-flags }} "./src[dev]" "./src-fileformats[dev]" "./src-fileformats-extras[dev]" python -c "import pydra.tasks.freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" python -c "import pydra as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" python -c "import fileformats.freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" From 6617008b89578dd1a9cffeccfb24858bdd2da701 Mon Sep 17 00:00:00 2001 From: Tom Close Date: Tue, 7 Nov 2023 09:02:47 +1100 Subject: [PATCH 18/18] moved install of fileformats into separate step --- .github/workflows/pythonpackage.yaml | 7 ++++--- src-fileformats/pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pythonpackage.yaml b/.github/workflows/pythonpackage.yaml index c62e226..c0e8d94 100644 --- a/.github/workflows/pythonpackage.yaml +++ b/.github/workflows/pythonpackage.yaml @@ -77,11 +77,12 @@ jobs: python -c "import pydra as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" - name: Install task package run: | - pip install ${{ matrix.pip-flags }} "./src[dev]" "./src-fileformats[dev]" "./src-fileformats-extras[dev]" + pip install "./src-fileformats[dev]" "./src-fileformats-extras[dev]" + pip install ${{ matrix.pip-flags }} "./src[dev]" python -c "import pydra.tasks.freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" python -c "import pydra as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" - python -c "import fileformats.freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" - python -c "import fileformats.extras.freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" + python -c "import fileformats.medimage_freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" + python -c "import fileformats.extras.medimage_freesurfer as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" fileformats-test: diff --git a/src-fileformats/pyproject.toml b/src-fileformats/pyproject.toml index 2cd17d0..167e292 100644 --- a/src-fileformats/pyproject.toml +++ b/src-fileformats/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "fileformats-medimage-freesurfer" -description = "Classes for representing different file formats in Python classes for use in type hinting in data workflows" +description = "Classes for representing different file formats solely used by the 'freesurfer' tool in Python classes for use in type hinting in data workflows" readme = "../README.rst" requires-python = ">=3.8" dependencies = [