From dd13e8223f819fea4f4a8d44b5da15a70bd8b0ef Mon Sep 17 00:00:00 2001 From: arjunsridhar12345 Date: Tue, 14 Jul 2026 10:39:47 -0700 Subject: [PATCH 1/3] fix: constructing processing schema --- src/dynamic_foraging_processing/pipeline/_pipeline.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/dynamic_foraging_processing/pipeline/_pipeline.py b/src/dynamic_foraging_processing/pipeline/_pipeline.py index 0796cdc..f7a3842 100644 --- a/src/dynamic_foraging_processing/pipeline/_pipeline.py +++ b/src/dynamic_foraging_processing/pipeline/_pipeline.py @@ -279,8 +279,16 @@ def _write_processing( experimenters=["Alex Piet", "Micah Woodard", "Bruno Cruz", "Arjun Sridhar"], start_date_time=start_date_time, end_date_time=end_date_time, + pipeline_name="dynamic-foraging-processing-pipeline", ) - ] + ], + pipelines=[ + Code( + url=_CODE_URL, + version=_PACKAGE_VERSION, + name="dynamic-foraging-processing-pipeline", + ) + ], ) processing.write_standard_file(output_directory=Path(output_path)) From 6eed6b9d4e30ce0a228b5c14676440df6ad61cca Mon Sep 17 00:00:00 2001 From: arjunsridhar12345 Date: Tue, 14 Jul 2026 10:39:56 -0700 Subject: [PATCH 2/3] test: update tests --- tests/test_pipeline/test_pipeline.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/test_pipeline/test_pipeline.py b/tests/test_pipeline/test_pipeline.py index cef052f..7af0cbf 100644 --- a/tests/test_pipeline/test_pipeline.py +++ b/tests/test_pipeline/test_pipeline.py @@ -371,6 +371,11 @@ def test_run_nwb_writes_nwb_and_processing(tmp_path): assert processing_json.exists() loaded = Processing.model_validate_json(processing_json.read_text()) assert loaded.data_processes[0].process_type == ProcessName.PIPELINE + # The data process and the top-level pipeline are linked by name. + assert loaded.data_processes[0].pipeline_name == "dynamic-foraging-processing-pipeline" + assert [p.name for p in loaded.pipelines] == ["dynamic-foraging-processing-pipeline"] + assert loaded.pipelines[0].version == _pipeline._PACKAGE_VERSION + assert loaded.pipelines[0].url == _pipeline._CODE_URL def test_run_qc_writes_quality_control(tmp_path): From 43ac9de018890bd9c4b7db088425ce3acdee88ae Mon Sep 17 00:00:00 2001 From: arjunsridhar12345 Date: Mon, 20 Jul 2026 13:23:40 -0700 Subject: [PATCH 3/3] feat: add input data to code field for pipelines --- .../pipeline/_pipeline.py | 2 ++ tests/test_pipeline/test_pipeline.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/dynamic_foraging_processing/pipeline/_pipeline.py b/src/dynamic_foraging_processing/pipeline/_pipeline.py index f7a3842..dfa2d6f 100644 --- a/src/dynamic_foraging_processing/pipeline/_pipeline.py +++ b/src/dynamic_foraging_processing/pipeline/_pipeline.py @@ -26,6 +26,7 @@ import numpy as np import pandas as pd import pynwb +from aind_data_schema.components.identifiers import DataAsset from aind_data_schema.core.processing import ( Code, DataProcess, @@ -287,6 +288,7 @@ def _write_processing( url=_CODE_URL, version=_PACKAGE_VERSION, name="dynamic-foraging-processing-pipeline", + input_data=[DataAsset(name=Path(self.loader.path).stem)], ) ], ) diff --git a/tests/test_pipeline/test_pipeline.py b/tests/test_pipeline/test_pipeline.py index 7af0cbf..24fe4f1 100644 --- a/tests/test_pipeline/test_pipeline.py +++ b/tests/test_pipeline/test_pipeline.py @@ -1,5 +1,6 @@ """Tests for ``dynamic_foraging_processing.pipeline._pipeline``.""" +from datetime import datetime, timezone from pathlib import Path from unittest.mock import MagicMock @@ -378,6 +379,20 @@ def test_run_nwb_writes_nwb_and_processing(tmp_path): assert loaded.pipelines[0].url == _pipeline._CODE_URL +def test_write_processing_records_input_data_from_loader_path(tmp_path): + """``_write_processing`` records the loader file stem as the pipeline ``input_data``.""" + pipeline = _make_pipeline() + pipeline.loader.path = Path("some/dir/my_session.json") + start = datetime(2024, 1, 1, tzinfo=timezone.utc) + end = datetime(2024, 1, 2, tzinfo=timezone.utc) + + pipeline._write_processing(str(tmp_path), start, end) + + loaded = Processing.model_validate_json((tmp_path / "processing.json").read_text()) + input_data = loaded.pipelines[0].input_data + assert [asset.name for asset in input_data] == ["my_session"] + + def test_run_qc_writes_quality_control(tmp_path): """``run_qc`` reads the NWB, assembles into a subfolder, and writes the JSON.""" pipeline = _make_pipeline()