Release Notes
3.0.1 [2026-01-20]
Fixes:
- Fixed
handle_extra_packagesto parse curator scripts using AST instead of importing, preventingModuleNotFoundErrorbefore installing extra packages - Fixed
Dockerfilepermissions for/venvdirectory for compatibility with AWS - Fixed variable naming in test suite curator scripts (
filerenamed tofile_)
3.0.0 [2026-01-16]
Enhancements:
- Migrated from
flywheel-gear-toolkittofw-gearandfw-curationlibraries - Added
requirementsinput for installing additional Python packages at runtime - Added
install-latest-flywheel-sdkconfiguration 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_PACKAGESlist in curator scripts for dependency installation
Fixes:
- Updated thread-safe file access method from
self.open_input()toself.open()
Maintenance:
- Updated
pythonfrom3.11to3.12 - Removed deprecated
curatormodule in favor offw-curation - Removed
docs/multiprocessing.mdanddocs/tutorial_convert_from_legacy.mddocumentation files - Moved V2 example scripts to
examples/v2_scripts/directory - Added V3 example scripts to
examples/v3_scripts/directory - Replaced
flywheel/python-gdcm:ssebase image withflywheel/python:3.12-wolfi-build - Updated Dockerfile to use multi-stage builds with
build,dev, andprodstages
Documentation:
- Added
CONTRIBUTING.mdwith development setup and contribution guidelines - Added
docs/migration_guide_v3.mdfor transitioning from V2 to V3 - Updated README with
fw-curationandfw-gearmigration instructions - Updated documentation links to reference
fw-curationlibrary documentation - Reorganized example scripts with compatibility notes for V2 scripts
Breaking Changes:
- Curator scripts must be updated to use
fw-curation.curator.HierarchyCuratorinstead offlywheel_gear_toolkit.utils.curator.HierarchyCurator - Configuration moved from
self.configin__init__()toCurationConfigreturned byset_config()function - Custom log formats must subclass
pydantic.BaseModelinstead ofBaseLogRecord - Gear context updated to
fw_gear.GearContextfromflywheel_gear_toolkit.GearToolkitContext - Container objects in callbacks may be
AttrDictinstead offlywheel.ContainerType; usefw_curation.utils.get_container_type()
2.2.3 [2025-07-15]
Maintenance:
- Updated
jqto1.8.0-r0andgitto2.50.1-r0to address image vulnerabilities - Migrated from
poetrytouvfor dependency management
2.2.2 [2025-06-12]
Maintenance:
- Added
eolfixhook to.pre-commit-config.yamlto 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
*kwargsusage in example curator initialization
Maintenance:
- Updated
fw-clientfrom^0.8.6to^2.1.1 - Updated
pytestfrom^7.4to^8.4 - Updated
pytest-covfrom^4.1to^6.1 - Updated
ipythonfrom^8.16.1to^9 - Upgraded
setuptoolsto>=78.1.1 - Added non-root user configuration (
USER flywheel) to Dockerfile - Added
show-job,uid, andgidfields to manifest configuration - Removed commented-out code from Dockerfile
2.2.0 [2025-05-09]
Enhancements:
- Add support for
finalizeHierarchyCurator 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
_parentattributeparentproperty on files
Maintenance:
- Updated
pythonfrom3.9to3.11 - Added GDCM support for pixel data handling
- Updated
fw-filefrom2.3.0to4.1.1 - Updated
pydicomfrom2.1.1to3.0.1 - Updated
numpyfrom1.25.1to2.2.5 - Updated
pandasfrom1.1.4to2.2.3 - Updated
flywheel-gear-toolkitfrom0.6.11to0.6.18 - Updated
flywheel-sdkfrom17.1.1to19.1.0 - Added
fw-client0.8.6 - Updated
lxmlfrom4.6.1to5.3 - Updated
Pillowfrom9to11.1.0 - Updated
backofffrom1.11.1to2.2 - Updated
nibabelfrom5.1.0to5.3.2 - Updated
pytestfrom6.1.2to7.4 - Updated
pytest-covfrom2.10.1to4.1 - Migrated CI configuration to use
flywheel-io/tools/etc/qa-ci - Updated pre-commit hooks to use
ruff_formatandruffinstead ofblackandisort - Updated Dockerfile to use multi-stage build with
uvfor 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
finalizemethod 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
.dockerignorefile to optimize Docker build context and reduce image size - Added
.markdownlint.yamlconfiguration file with 88-character line length limit - Added example script
form-response-exporter.pyfor exporting form responses to CSV - Added example script
smart_copy_multi_projects.pyfor aggregating smart copies of multiple projects into a single destination project
Maintenance:
- Upgraded
pythonfrom3.8to3.9inDockerfileandpyproject.toml - Updated
flywheel-sdkfrom^15.8.0to^17.1.1 - Updated
flywheel-gear-toolkitfrom^0.6.1to^0.6.11 - Updated
fw-filefrom^1to^2.3.0 - Updated
nibabelfrom^3.2.0to^5.1.0 - Updated
numpyto^1.25.1 - Added
nipype^1.8.6dependency - Migrated from
poetrytopipfor dependency management inDockerfile - Updated
.gitlab-ci.ymlto referencesse-qa-ciproject instead ofqa-ci - Updated
.pre-commit-config.yamlhooks configuration - Removed
.envfile - Reorganized
manifest.jsonfield order and updated gear image version
Documentation:
- Fixed broken internal link in
README.mdfrom#validateto#validate-methods - Fixed incorrect reference to
container.typeinREADME.mdexample (changed tocontainer.container_type) - Improved line wrapping in
README.mdsection "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
_parentattributeparentproperty on files - Reverted fix for using
parent_refas 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_refdictionary instead of deprecatedparentobject property
Maintenance:
- Updated
Pillowfrom^8.2.0to^9 - Added system package dependencies:
gfortran,libopenblas-dev,liblapack-dev - Updated
poetry installprocess inDockerfileto use--no-rootflag 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_twotoadditional_input_two - Corrected migration instructions: changed direction from
input_file_<num>toadditional_input_<num>(previously reversed)
Maintenance:
- Updated
flywheel-gear-toolkitfrom^0.5to^0.6.1 - Updated
blackfrom^20.8b1to^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-filefrom^0.7to^1 - Updated
flywheel-gear-toolkitto^0.5withallextras
Documentation:
- Fixed code examples to use
self.config.depth_firstinstead ofself.depth_first
2.1.0 [2021-10-01]
Enhancements:
- Added support for legacy curator scripts via
import curatorwith single-threaded execution mode - Added
backoffpackage 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
CuratorConfigclass with centralized configuration viaself.configattribute - Added walker callback mechanism to dynamically control hierarchy traversal
- Added
stop_levelconfiguration option to halt walking at specified container level - Added
self.dataattribute 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
Queuesupport - 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-toolkit0.2to0.4.0 - Updated
fw-filefrom0.5to0.7 - Updated
flywheel-sdkto^15.8.0 - Added test dependencies:
rpdb,remote-pdb,dill,jupyter-client,jupyter,docker - Refactored
curate.pyto use multiprocessing withProcess,Manager,Lock, andQueue - Added
curator/__init__.pymodule with deprecation warning for old import path - Added
fw_gear_hierarchy_curator/utils.pywith pickling utilities for multiprocessing - Renamed test file from
test_integration.pytotest_end_to_end.py - Removed
__del__()call in exception cleanup - Updated
.gitignoreto include.coverage.*,junit.xml, andcoverage.xml - Added
CONTRIBUTING.mdandmultiprocessing.mddocumentation - 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
CuratorConfigoptions - 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.configobject (e.g.,self.depth_firstbecomesself.config.depth_first) - Changed data storage from arbitrary attributes to
self.datadictionary (e.g.,self.sub_labelbecomesself.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_reportattribute in favor ofself.config.report - Default
validate_<container>methods now returnTrueinstead ofFalse
1.1.0 [2021-05-07]
Enhancements:
- Added support for programmatic installation of extra dependencies via
extra_packagesparameter in curator__init__method - Added configurable traversal order (
depth_firstattribute) for breadth-first vs. depth-first hierarchy walking
Fixes:
- Fixed CLI script and documentation to correctly pass
GearToolkitContextto curator class instead of rawflywheel.Client
Maintenance:
- Updated
Pillowfrom^8.0.1to^8.2.0 - Updated
flywheel-gear-toolkitfrom^0.1.3to^0.2 - Added
fw-filedependency 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
HierarchyCuratorclass 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
AggregatedReportersupport for tracking curation operations - Added configuration option to enable debug logging
Documentation:
- Added README with detailed instructions on implementing
HierarchyCuratorclass - Added documentation for curate and validate methods for each container type
- Added examples demonstrating input file usage in curator implementations