From dcffbac521234d7281842c76d38de4d0f2d00c46 Mon Sep 17 00:00:00 2001 From: wfeng19 Date: Fri, 1 Aug 2025 11:25:21 -0400 Subject: [PATCH 1/4] Validator for modifying released items --- submitr/validators/__init__.py | 1 + submitr/validators/released_item_validator.py | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 submitr/validators/released_item_validator.py diff --git a/submitr/validators/__init__.py b/submitr/validators/__init__.py index 65adc84d6b..330cccd2c3 100644 --- a/submitr/validators/__init__.py +++ b/submitr/validators/__init__.py @@ -8,3 +8,4 @@ import submitr.validators.analyte_rin_validator # noqa import submitr.validators.tissue_external_id_validator # noqa import submitr.validators.tissue_sample_external_id_validator # noqa +import submitr.validators.released_item_validator # noqa diff --git a/submitr/validators/released_item_validator.py b/submitr/validators/released_item_validator.py new file mode 100644 index 0000000000..2a6ca937f8 --- /dev/null +++ b/submitr/validators/released_item_validator.py @@ -0,0 +1,23 @@ +from dcicutils.structured_data import StructuredDataSet +from submitr.validators.decorators import structured_data_validator_finish_hook + +# Validator that reports any released items that are being modified + +_RELEASED = "released" + + + +@structured_data_validator_finish_hook +def _released_item_validator(structured_data: StructuredDataSet, **kwargs) -> None: + + diffs = structured_data.compare() + + for object_type in diffs: + for object_info in diffs[object_type]: + if object_info.uuid: + if object_info.diffs: + if object_info.status == _RELEASED: + structured_data.note_validation_error( + f"{object_info.path} is not permitted to be modified because" + f" it is {_RELEASED} item. Please double-check this." + ) \ No newline at end of file From 5c4ca68d26cccc639fd4aeff1d77b9e2c6589bc2 Mon Sep 17 00:00:00 2001 From: wfeng19 Date: Fri, 1 Aug 2025 11:28:32 -0400 Subject: [PATCH 2/4] Added comments --- submitr/validators/released_item_validator.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/submitr/validators/released_item_validator.py b/submitr/validators/released_item_validator.py index 2a6ca937f8..12dfd608db 100644 --- a/submitr/validators/released_item_validator.py +++ b/submitr/validators/released_item_validator.py @@ -3,9 +3,15 @@ # Validator that reports any released items that are being modified -_RELEASED = "released" - +# NOTE: (WF) This check probably should not be a validator and would likely work +# best incorporated into the existing diff check. Running compare() takes some +# time, so probably best to not run it again +# NOTE: This code relies on an update to dcicutils where the diffs include +# the status of the existing items. +# TODO: Update this to not only check for released items, but other items +# that cannot be modified +_RELEASED = "released" @structured_data_validator_finish_hook def _released_item_validator(structured_data: StructuredDataSet, **kwargs) -> None: From da9b1b8019b3a5bff241f392369e6af6824127d9 Mon Sep 17 00:00:00 2001 From: wfeng19 Date: Fri, 1 Aug 2025 11:40:51 -0400 Subject: [PATCH 3/4] Fix formatting --- submitr/validators/released_item_validator.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/submitr/validators/released_item_validator.py b/submitr/validators/released_item_validator.py index 12dfd608db..5c63fbfdf6 100644 --- a/submitr/validators/released_item_validator.py +++ b/submitr/validators/released_item_validator.py @@ -26,4 +26,5 @@ def _released_item_validator(structured_data: StructuredDataSet, **kwargs) -> No structured_data.note_validation_error( f"{object_info.path} is not permitted to be modified because" f" it is {_RELEASED} item. Please double-check this." - ) \ No newline at end of file + ) + \ No newline at end of file From f8c711fc66b4954432e1b4ecfb1c5912782fe159 Mon Sep 17 00:00:00 2001 From: wfeng19 Date: Fri, 1 Aug 2025 11:42:38 -0400 Subject: [PATCH 4/4] Fix formatting --- submitr/validators/released_item_validator.py | 1 - 1 file changed, 1 deletion(-) diff --git a/submitr/validators/released_item_validator.py b/submitr/validators/released_item_validator.py index 5c63fbfdf6..db8abbe8d3 100644 --- a/submitr/validators/released_item_validator.py +++ b/submitr/validators/released_item_validator.py @@ -27,4 +27,3 @@ def _released_item_validator(structured_data: StructuredDataSet, **kwargs) -> No f"{object_info.path} is not permitted to be modified because" f" it is {_RELEASED} item. Please double-check this." ) - \ No newline at end of file