Skip to content

Instantly share code, notes, and snippets.

@rherrick
Created March 21, 2016 19:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rherrick/166fbcaaea0b0f981056 to your computer and use it in GitHub Desktop.
Save rherrick/166fbcaaea0b0f981056 to your computer and use it in GitHub Desktop.
Creates new NIFTI resource folder at scan level, retrieves resource ID, and transfers an nii.gz file into the resource folder.
import requests
def get_nifti_resource_id(json):
result_set = json['ResultSet']
if result_set is None:
return
result = result_set['Result']
if result is None:
return
try:
for resource in result:
if resource['format'] != "NIFTI":
continue
return int(resource['xnat_abstractresource_id'])
except TypeError:
return
return
user = '150973f7-2a0b-450b-9abb-8c700bdd2a54'
password = '1458585376697'
server = 'https://central.xnat.org'
experiment = 'CENTRAL_E07096'
scan = 2
base_url = '%(server)s/data/experiments/%(experiment)s/scans/%(scan)d/resources' % {"server": server,
"experiment": experiment,
"scan": scan}
put_url = '%(base_url)s/NIFTI?format=NIFTI'
post_url = '%(base_url)s/%(resource_id)d/files/%(resource_name)s?file_upload=true&format=NIFTI'
resource_template = '%(experiment)s.%(scan)03d.nii.gz'
session = requests.session()
# Create resource folder
# PUT https://central.xnat.org/REST/experiments/CENTRAL_E07096/scans/2/resources/NIFTI?format=NIFTI
put_instance = put_url % {"base_url": base_url}
put_response = session.put(put_instance, auth=(user, password))
print 'Create: %d' % put_response.status_code
# Get new folder resource ID
# GET https://central.xnat.org/REST/experiments/CENTRAL_E07096/scans/2/resources
get_response = session.get(base_url)
print 'Get: %d' % get_response.status_code
resource_id = get_nifti_resource_id(get_response.json())
if resource_id is None:
print "Couldn't find valid resource ID, quitting..."
exit()
# POST https://central.xnat.org/REST/experiments/CENTRAL_E07096/scans/2/resources/123232250/files/CENTRAL_E07096.002.nii
# .gz?file_upload=true&format=NIFTI
resource_name = resource_template % {"experiment": experiment, "scan": scan}
post_instance = post_url % {"base_url": base_url, "resource_id": resource_id, "resource_name": resource_name}
files = {'file': open("/Users/rherrick/Downloads/work/__SAG_LOCALIZER_20000910101500_1.nii.gz", 'rb')}
post_response = session.post(post_instance, files=files)
print 'File: %d' % post_response.status_code
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment