#!/usr/bin/python26

import sys
import os
import optparse
import pyxnat

############################################################################
# defaults and definitions
#

progname = os.path.basename(sys.argv[0])

usage = 'usage: %prog [options] <project>'
description = """Clears an XNAT project.

The arguments for the base XNAT URL and the XNAT user and password override the envrionment variables XNAT_URL, XNAT_USER, XNAT_PASSWORD, respectively.
"""

parser = optparse.OptionParser(usage=usage, description=description)
parser.add_option('-c', '--check', dest='check', default=False, action='store_true', help='print subjects but don\'t delete')
parser.add_option('-x', '--xnat', dest='xnat_url', help='the base XNAT URL')
parser.add_option('-u', '--user', dest='user', help='the XNAT user')
parser.add_option('-p', '--password', dest='password', help='XNAT password')

############################################################################
# command line handling
#

(opts, args) = parser.parse_args()

if len(args) != 1:
    parser.error('wrong number of arguments')

project = args[0]

if not opts.xnat_url:
    try:
        opts.xnat_url = os.environ['XNAT_URL']
    except KeyError:
        parser.error('XNAT base url undefined')
if not opts.user:
    try:
        opts.user = os.environ['XNAT_USER']
    except KeyError:
        parser.error('XNAT user undefined')
if not opts.password:
    try:
        opts.password = os.environ['XNAT_PASSWORD']
    except KeyError:
        parser.error('XNAT password undefined')

opts.xnat_url = opts.xnat_url.rstrip('/')

############################################################################
# begin execution
#

interface = pyxnat.Interface(opts.xnat_url, opts.user, opts.password)
xnat_project = interface.select.project(project)
if not xnat_project.exists():
    sys.stderr.write('%s: XNAT project %s does not exist\n' % \
                     (progname, project))
    sys.exit(1)

if not opts.check:
    print
    print 'You\'re about to delete subjects, sessions, scans, and files from '
    print 'project %s on %s.  Are you sure you want to do this?' \
          % (xnat_project.label(), opts.xnat_url)
    print
    response = raw_input('Anything but "Yes" to stop now: ')
    if response != 'Yes':
        print 'exiting'
        sys.exit(0)

for xnat_subject in xnat_project.subjects():
    if opts.check:
        print 'not deleting %s' % xnat_subject.label()
    else:
        print 'deleting %s' % xnat_subject.label()
        xnat_subject.delete()

sys.exit(0)

# eof
