From 209491193b152fe6fdf7d6c061ebb6e9c4220195 Mon Sep 17 00:00:00 2001 From: duettwe <61516027+duettwe@users.noreply.github.com> Date: Wed, 24 Sep 2025 13:48:34 -0500 Subject: [PATCH 1/3] Create XnatRemoveResource --- bin/supplemental_tools/XnatRemoveResource | 115 ++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 bin/supplemental_tools/XnatRemoveResource diff --git a/bin/supplemental_tools/XnatRemoveResource b/bin/supplemental_tools/XnatRemoveResource new file mode 100644 index 00000000..b55625b3 --- /dev/null +++ b/bin/supplemental_tools/XnatRemoveResource @@ -0,0 +1,115 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Tool to remove scan/resource data BY PROJECT +# - scan resources +# - entire scans +# - assessors given their status +# - entire assessor groups +# +# OPTIONS: +# --proj REQUIRED - Project you're wanting to remove data from +# [--scan] OPTIONAL - Scan type you want removed +# [--sc_resource] OPTIONAL - Resource of scan you want removed - MUST ALSO INCLUDE SCAN +# [--assess] OPTIONAL - Assessor type you want removed +# [--as_status] OPTIONAL - Status of assessor you want removed - MUST ALSO INCLUDE ASSESSOR + + +from argparse import ArgumentParser, RawDescriptionHelpFormatter +from dax import XnatUtils + +xnat = XnatUtils.get_interface() + + +def parse_args(): + argp = ArgumentParser(prog='SwitchProjects', formatter_class=RawDescriptionHelpFormatter) + argp.add_argument('--proj', dest='project', required=True, help='Project we want to remove from') + argp.add_argument('--scan', dest='scan', help='Scan type we want removed') + argp.add_argument('--sc_resource', dest='scan_resource', help='Scan resource we want removed') + argp.add_argument('--assess', dest='assessor', help='Assessor we want removed') + argp.add_argument('--as_status', dest='assessor_status', help='Assessor status we want removed') + return argp + + +def remove_scan_res(proj,scan,scan_res): + scans = xnat.get_project_scans(proj,scan) + + for sca in scans: + if scan in sca['scan_description']: + print('Selected subject {}, session {}, scan {} - {}'.format(sca['subject_label'], sca['session_label'], sca['scan_id'], scan)) + resources = xnat.get_scan_resources(proj, sca['subject_label'], sca['session_label'], sca['scan_id']) + for resource in resources: + if scan_res in resource['label']: + print('Selected {} resource'.format(scan_res)) + res_obj = xnat.select_scan_resource(proj, sca['subject_label'], sca['session_label'], sca['scan_id'], resource['label']) + print('REMOVING {} resource'.format(scan_res)) + res_obj.delete() + print('----------------------------------------------') + + +def remove_scan(proj,scan): + scans = xnat.get_project_scans(proj,scan) + + for sca in scans: + if scan in sca['scan_description']: + print('Selected subject {}, session {}, scan {} - {}'.format(sca['subject_label'], sca['session_label'], sca['scan_id'], scan)) + scan_string = xnat.get_scan_path(proj, sca['subject_label'], sca['session_label'], scan) + scan_obj = xnat.select(scan_string) + print('REMOVING {} scan'.format(scan)) + scan_obj.delete() + print('----------------------------------------------') + + +def remove_assess_stat(proj,assessor,assessor_status): + assessors = xnat.list_project_assessors(proj) + + for assess in assessors: + if assessor in assess['proctype']: + print('Selected subject {}, session {}, assessor {} - {}'.format(assess['subject_label'], assess['session_label'], assess['scan_id'], assess)) + if assessor_status in assess['procstatus']: + print('Selected {} status'.format(assessor_status)) + assessor_string = xnat.get_assessor_path(proj,assess['subject_label'],assess['session_label'],assessor) + assessor_obj = xnat.select(assessor_string) + print('REMOVING {} assessor'.format(assessor)) + assessor_obj.delete() + print('----------------------------------------------') + + +def remove_assess(proj,assessor): + assessors = xnat.list_project_assessors(proj) + + for assess in assessors: + if assessor in assess['proctype']: + print('Selected subject {}, session {}, assessor {} - {}'.format(assess['subject_label'], assess['session_label'], assess['scan_id'], assess)) + assessor_string = xnat.get_assessor_path(proj,assess['subject_label'],assess['session_label'],assessor) + assessor_obj = xnat.select(assessor_string) + print('REMOVING {} assessor'.format(assess)) + assessor_obj.delete() + print('----------------------------------------------') + + +if __name__ == '__main__': + PARSER = parse_args() + OPTIONS = PARSER.parse_args() + + project = OPTIONS.project + + if project: + if OPTIONS.scan: + scan = OPTIONS.scan + if OPTIONS.scan_resource: + scan_resource = OPTIONS.scan_resource + remove_scan_res(project,scan,scan_resource) + else: + remove_scan(project,scan) + + if OPTIONS.assessor: + assessor = OPTIONS.assessor + if OPTIONS.assessor_status: + assessor_status = OPTIONS.assessor_status + remove_assess_stat(project,assessor,assessor_status) + else: + remove_assess(project,assessor) + + else: + print('Project is REQUIRED!') From 68a851081a43cb848269ae142773c31e0659e066 Mon Sep 17 00:00:00 2001 From: duettwe <61516027+duettwe@users.noreply.github.com> Date: Thu, 25 Sep 2025 08:34:06 -0500 Subject: [PATCH 2/3] Update XnatRemoveResource --- bin/supplemental_tools/XnatRemoveResource | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/supplemental_tools/XnatRemoveResource b/bin/supplemental_tools/XnatRemoveResource index b55625b3..4d0f1225 100644 --- a/bin/supplemental_tools/XnatRemoveResource +++ b/bin/supplemental_tools/XnatRemoveResource @@ -65,7 +65,7 @@ def remove_assess_stat(proj,assessor,assessor_status): for assess in assessors: if assessor in assess['proctype']: - print('Selected subject {}, session {}, assessor {} - {}'.format(assess['subject_label'], assess['session_label'], assess['scan_id'], assess)) + print('Selected subject {}, session {}, assessor {}'.format(assess['subject_label'], assess['session_label'], assess)) if assessor_status in assess['procstatus']: print('Selected {} status'.format(assessor_status)) assessor_string = xnat.get_assessor_path(proj,assess['subject_label'],assess['session_label'],assessor) From 58e228b99dca2e8a2874f523eccc47c653faaf8d Mon Sep 17 00:00:00 2001 From: duettwe <61516027+duettwe@users.noreply.github.com> Date: Thu, 25 Sep 2025 08:40:29 -0500 Subject: [PATCH 3/3] Update XnatRemoveResource --- bin/supplemental_tools/XnatRemoveResource | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/bin/supplemental_tools/XnatRemoveResource b/bin/supplemental_tools/XnatRemoveResource index 4d0f1225..e9002608 100644 --- a/bin/supplemental_tools/XnatRemoveResource +++ b/bin/supplemental_tools/XnatRemoveResource @@ -53,7 +53,7 @@ def remove_scan(proj,scan): for sca in scans: if scan in sca['scan_description']: print('Selected subject {}, session {}, scan {} - {}'.format(sca['subject_label'], sca['session_label'], sca['scan_id'], scan)) - scan_string = xnat.get_scan_path(proj, sca['subject_label'], sca['session_label'], scan) + scan_string = xnat.get_scan_path(proj, sca['subject_label'], sca['session_label'], sca['scan_id']) scan_obj = xnat.select(scan_string) print('REMOVING {} scan'.format(scan)) scan_obj.delete() @@ -65,10 +65,9 @@ def remove_assess_stat(proj,assessor,assessor_status): for assess in assessors: if assessor in assess['proctype']: - print('Selected subject {}, session {}, assessor {}'.format(assess['subject_label'], assess['session_label'], assess)) if assessor_status in assess['procstatus']: - print('Selected {} status'.format(assessor_status)) - assessor_string = xnat.get_assessor_path(proj,assess['subject_label'],assess['session_label'],assessor) + print('Selected subject {}, session {}, assessor {}'.format(assess['subject_label'], assess['session_label'], assess)) + assessor_string = xnat.get_assessor_path(proj,assess['subject_label'],assess['session_label'],assess['assessor_label']) assessor_obj = xnat.select(assessor_string) print('REMOVING {} assessor'.format(assessor)) assessor_obj.delete() @@ -81,13 +80,12 @@ def remove_assess(proj,assessor): for assess in assessors: if assessor in assess['proctype']: print('Selected subject {}, session {}, assessor {} - {}'.format(assess['subject_label'], assess['session_label'], assess['scan_id'], assess)) - assessor_string = xnat.get_assessor_path(proj,assess['subject_label'],assess['session_label'],assessor) + assessor_string = xnat.get_assessor_path(proj,assess['subject_label'],assess['session_label'],assess['assessor_label']) assessor_obj = xnat.select(assessor_string) print('REMOVING {} assessor'.format(assess)) assessor_obj.delete() print('----------------------------------------------') - if __name__ == '__main__': PARSER = parse_args() OPTIONS = PARSER.parse_args()