Skip to content

Release Notes

3.0.1 [2026-01-20]

Fixes:

  • Fixed handle_extra_packages to parse curator scripts using AST instead of importing, preventing ModuleNotFoundError before installing extra packages
  • Fixed Dockerfile permissions for /venv directory for compatibility with AWS
  • Fixed variable naming in test suite curator scripts (file renamed to file_)

3.0.0 [2026-01-16]

Enhancements:

  • Migrated from flywheel-gear-toolkit to fw-gear and fw-curation libraries
  • Added requirements input for installing additional Python packages at runtime
  • Added install-latest-flywheel-sdk configuration option to update Flywheel SDK and related packages to latest versions
  • Added script validation to check for V2 compatibility issues and provide migration guidance
  • Added support for EXTRA_PACKAGES list in curator scripts for dependency installation

Fixes:

  • Updated thread-safe file access method from self.open_input() to self.open()

Maintenance:

  • Updated python from 3.11 to 3.12
  • Removed deprecated curator module in favor of fw-curation
  • Removed docs/multiprocessing.md and docs/tutorial_convert_from_legacy.md documentation files
  • Moved V2 example scripts to examples/v2_scripts/ directory
  • Added V3 example scripts to examples/v3_scripts/ directory
  • Replaced flywheel/python-gdcm:sse base image with flywheel/python:3.12-wolfi-build
  • Updated Dockerfile to use multi-stage builds with build, dev, and prod stages

Documentation:

  • Added CONTRIBUTING.md with development setup and contribution guidelines
  • Added docs/migration_guide_v3.md for transitioning from V2 to V3
  • Updated README with fw-curation and fw-gear migration instructions
  • Updated documentation links to reference fw-curation library documentation
  • Reorganized example scripts with compatibility notes for V2 scripts

Breaking Changes:

  • Curator scripts must be updated to use fw-curation.curator.HierarchyCurator instead of flywheel_gear_toolkit.utils.curator.HierarchyCurator
  • Configuration moved from self.config in __init__() to CurationConfig returned by set_config() function
  • Custom log formats must subclass pydantic.BaseModel instead of BaseLogRecord
  • Gear context updated to fw_gear.GearContext from flywheel_gear_toolkit.GearToolkitContext
  • Container objects in callbacks may be AttrDict instead of flywheel.ContainerType; use fw_curation.utils.get_container_type()

2.2.3 [2025-07-15]

Maintenance:

  • Updated jq to 1.8.0-r0 and git to 2.50.1-r0 to address image vulnerabilities
  • Migrated from poetry to uv for dependency management

2.2.2 [2025-06-12]

Maintenance:

  • Added eolfix hook to .pre-commit-config.yaml to ensure consistent line endings
  • Fixed missing newline at end of Dockerfile
  • Removed trailing whitespace from documentation files

2.2.1 [2025-06-05]

Fixes:

  • Fixed incorrect *kwargs usage in example curator initialization

Maintenance:

  • Updated fw-client from ^0.8.6 to ^2.1.1
  • Updated pytest from ^7.4 to ^8.4
  • Updated pytest-cov from ^4.1 to ^6.1
  • Updated ipython from ^8.16.1 to ^9
  • Upgraded setuptools to >=78.1.1
  • Added non-root user configuration (USER flywheel) to Dockerfile
  • Added show-job, uid, and gid fields to manifest configuration
  • Removed commented-out code from Dockerfile

2.2.0 [2025-05-09]

Enhancements:

  • Add support for finalize HierarchyCurator method
  • Add ability to pass curation exit code to finalize
  • Add a utils function to initialize a Flywheel client
  • Add a config option to install latest Flywheel SDK at runtime
  • Multiple new examples added, existing examples improved

Fixes:

  • Fix bug in SDK not reloading _parent attribute parent property on files

Maintenance:

  • Updated python from 3.9 to 3.11
  • Added GDCM support for pixel data handling
  • Updated fw-file from 2.3.0 to 4.1.1
  • Updated pydicom from 2.1.1 to 3.0.1
  • Updated numpy from 1.25.1 to 2.2.5
  • Updated pandas from 1.1.4 to 2.2.3
  • Updated flywheel-gear-toolkit from 0.6.11 to 0.6.18
  • Updated flywheel-sdk from 17.1.1 to 19.1.0
  • Added fw-client 0.8.6
  • Updated lxml from 4.6.1 to 5.3
  • Updated Pillow from 9 to 11.1.0
  • Updated backoff from 1.11.1 to 2.2
  • Updated nibabel from 5.1.0 to 5.3.2
  • Updated pytest from 6.1.2 to 7.4
  • Updated pytest-cov from 2.10.1 to 4.1
  • Migrated CI configuration to use flywheel-io/tools/etc/qa-ci
  • Updated pre-commit hooks to use ruff_format and ruff instead of black and isort
  • Updated Dockerfile to use multi-stage build with uv for dependency management
  • Added analysis container label to include curator filename

Documentation:

  • Updated README with expanded usage instructions, workflow diagram, and improved documentation of HierarchyCurator methods
  • Added documentation for finalize method and input file handling
  • Improved examples with type hints, docstrings, and better error handling

2.1.6 [2023-08-04]

Maintenance:

  • Version bump with no functional changes

2.1.5 [2023-07-18]

Enhancements:

  • Added .dockerignore file to optimize Docker build context and reduce image size
  • Added .markdownlint.yaml configuration file with 88-character line length limit
  • Added example script form-response-exporter.py for exporting form responses to CSV
  • Added example script smart_copy_multi_projects.py for aggregating smart copies of multiple projects into a single destination project

Maintenance:

  • Upgraded python from 3.8 to 3.9 in Dockerfile and pyproject.toml
  • Updated flywheel-sdk from ^15.8.0 to ^17.1.1
  • Updated flywheel-gear-toolkit from ^0.6.1 to ^0.6.11
  • Updated fw-file from ^1 to ^2.3.0
  • Updated nibabel from ^3.2.0 to ^5.1.0
  • Updated numpy to ^1.25.1
  • Added nipype ^1.8.6 dependency
  • Migrated from poetry to pip for dependency management in Dockerfile
  • Updated .gitlab-ci.yml to reference sse-qa-ci project instead of qa-ci
  • Updated .pre-commit-config.yaml hooks configuration
  • Removed .env file
  • Reorganized manifest.json field order and updated gear image version

Documentation:

  • Fixed broken internal link in README.md from #validate to #validate-methods
  • Fixed incorrect reference to container.type in README.md example (changed to container.container_type)
  • Improved line wrapping in README.md section "Walker callback"
  • Fixed broken internal links in docs/multiprocessing.md (capitalization)
  • Added shell syntax highlighting to code block in docs/CONTRIBUTING.md
  • Removed trailing blank line from docs/release_notes.md

2.1.4 [2022-04-18]

Fixes:

  • Fixed bug in SDK not reloading _parent attribute parent property on files
  • Reverted fix for using parent_ref as that was treating a symptom rather than the root cause

2.1.3 [2022-04-14]

Fixes:

  • Fixed file parent reference handling to use parent_ref dictionary instead of deprecated parent object property

Maintenance:

  • Updated Pillow from ^8.2.0 to ^9
  • Added system package dependencies: gfortran, libopenblas-dev, liblapack-dev
  • Updated poetry install process in Dockerfile to use --no-root flag initially

Documentation:

  • Updated callback function example in README to show proper to_queue() implementation pattern
  • Fixed broken documentation links in tutorial to use correct relative paths
  • Improved multiprocessing debugging guide formatting and command examples
  • Changed emphasis formatting from __text__ to **text** for consistency

2.1.2 [2022-03-29]

Fixes:

  • Enforced default reload() behavior for legacy curator scripts to ensure fresh container state
  • Applied reload() to files in addition to containers by default during hierarchy traversal
  • Corrected documentation typo: changed input_file_two to additional_input_two
  • Corrected migration instructions: changed direction from input_file_<num> to additional_input_<num> (previously reversed)

Maintenance:

  • Updated flywheel-gear-toolkit from ^0.5 to ^0.6.1
  • Updated black from ^20.8b1 to ^22
  • Added return code propagation from curator execution to support proper exit status reporting
  • Added type hints for return values in main curator functions

2.1.1 [2021-12-22]

Fixes:

  • Restored default curator behavior to perform reload() on each container

Maintenance:

  • Updated fw-file from ^0.7 to ^1
  • Updated flywheel-gear-toolkit to ^0.5 with all extras

Documentation:

  • Fixed code examples to use self.config.depth_first instead of self.depth_first

2.1.0 [2021-10-01]

Enhancements:

  • Added support for legacy curator scripts via import curator with single-threaded execution mode
  • Added backoff package as a dependency for retry functionality
  • Added example CSV file demonstrating curator input format

Fixes:

  • Fixed broken markdown link in README from [Input Files) to [Input Files]

Documentation:

  • Added comprehensive tutorial for converting legacy (1.0) scripts to 2.0 format in docs/tutorial_convert_from_legacy.md
  • Added example legacy curator script demonstrating migration patterns in examples/legacy-script.py
  • Added example translated curator script showing new format in examples/legacy-translated.py
  • Reorganized README table of contents structure
  • Updated README section headers from "Required"/"Optional" to "Required Inputs"/"Optional Inputs"
  • Added note about extra packages requiring function-level imports, not top-level imports
  • Added section explaining conversion process from legacy to new format
  • Improved documentation formatting with better spacing and structure
  • Removed trailing whitespace throughout README

2.0.0 [2021-09-10]

Enhancements:

  • Added multiprocessing support for parallel curation with configurable worker count
  • Added CuratorConfig class with centralized configuration via self.config attribute
  • Added walker callback mechanism to dynamically control hierarchy traversal
  • Added stop_level configuration option to halt walking at specified container level
  • Added self.data attribute for storing and accessing data across hierarchy levels
  • Added self.open_input() context manager for thread-safe input file access
  • Added multiple new example curator scripts (file_deleter.py, print_container_path.py, retrigger_gear_rules.py)
  • Improved validate_<container> methods documentation and usage patterns
  • Enhanced reporter functionality with multiprocessing Queue support
  • Added backoff/retry logic for robust file uploads in examples

Fixes:

  • Fixed input file handling to use proper context manager for concurrent access
  • Fixed curator instantiation to properly handle SDK client across processes
  • Fixed traversal order guarantees for depth-first and breadth-first walking
  • Fixed example scripts to use proper temporary directories and cleanup

Maintenance:

  • Migrated from flywheel-gear-toolkit 0.2 to 0.4.0
  • Updated fw-file from 0.5 to 0.7
  • Updated flywheel-sdk to ^15.8.0
  • Added test dependencies: rpdb, remote-pdb, dill, jupyter-client, jupyter, docker
  • Refactored curate.py to use multiprocessing with Process, Manager, Lock, and Queue
  • Added curator/__init__.py module with deprecation warning for old import path
  • Added fw_gear_hierarchy_curator/utils.py with pickling utilities for multiprocessing
  • Renamed test file from test_integration.py to test_end_to_end.py
  • Removed __del__() call in exception cleanup
  • Updated .gitignore to include .coverage.*, junit.xml, and coverage.xml
  • Added CONTRIBUTING.md and multiprocessing.md documentation
  • Expanded README with configuration options, callback usage, input file access, and breadth-first vs depth-first examples

Documentation:

  • Added table of contents to README
  • Added detailed configuration section documenting CuratorConfig options
  • Added walker callback usage examples and patterns
  • Added comprehensive input file usage documentation
  • Added multiprocessing implementation details in docs/multiprocessing.md
  • Added debugging guide in docs/CONTRIBUTING.md
  • Improved example scripts with better documentation and error handling

Breaking Changes:

  • Changed configuration from direct attributes to self.config object (e.g., self.depth_first becomes self.config.depth_first)
  • Changed data storage from arbitrary attributes to self.data dictionary (e.g., self.sub_label becomes self.data['sub_label'])
  • Changed reporter initialization from manual instantiation to configuration via self.config.report = True
  • Changed input file access to require self.open_input() context manager instead of direct file operations
  • Removed write_report attribute in favor of self.config.report
  • Default validate_<container> methods now return True instead of False

1.1.0 [2021-05-07]

Enhancements:

  • Added support for programmatic installation of extra dependencies via extra_packages parameter in curator __init__ method
  • Added configurable traversal order (depth_first attribute) for breadth-first vs. depth-first hierarchy walking

Fixes:

  • Fixed CLI script and documentation to correctly pass GearToolkitContext to curator class instead of raw flywheel.Client

Maintenance:

  • Updated Pillow from ^8.0.1 to ^8.2.0
  • Updated flywheel-gear-toolkit from ^0.1.3 to ^0.2
  • Added fw-file dependency at version ^0.5
  • Updated repository URLs from GitHub to GitLab in manifest.json

Documentation:

  • Added comprehensive description of hierarchy traversal behavior and container validation workflow
  • Added example curator script demonstrating subject metadata access at file level
  • Added documentation on installing extra dependencies programmatically
  • Added documentation with tree diagrams comparing breadth-first vs. depth-first traversal order
  • Added example curator for updating DICOM files with subject metadata

1.0.0 [2021-03-12]

Enhancements:

  • Added custom hierarchy curation gear that walks through Flywheel project hierarchy (project, subject, session, acquisition, analysis, file containers)
  • Added support for custom HierarchyCurator class implementations via input file
  • Added three optional additional input files for curator implementations
  • Added example curator scripts for various use cases (session label mapping, file classification, DICOM weight deidentification, hierarchy printing)
  • Added AggregatedReporter support for tracking curation operations
  • Added configuration option to enable debug logging

Documentation:

  • Added README with detailed instructions on implementing HierarchyCurator class
  • Added documentation for curate and validate methods for each container type
  • Added examples demonstrating input file usage in curator implementations