#!/usr/bin/python

# See file COPYING distributed with the one_click package for the copyright
# and license.

import sys
import os
import pyxnat
import one_click

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

pyxnat_server = 'http://localhost:8080/xnat'
(pyxnat_user, pyxnat_pw) = open('/home/ch/.xnat_pw').read().strip().split(':')

def handle_bad_study_comments(session, reason):
    msg = 'bad study comments (%s): %s' % (reason, str(session.study_comments))
    one_click.report_error('bad session', msg)
    session.delete()
    one_click.remove_deleted()
    return

if len(sys.argv) == 1:
    print 'usage: %s <prearchive session url>' % progname
    sys.exit(0)

session = one_click.Session(sys.argv[1])

print 'got session %s' % str(session)

try:
    if session.study_comments is None:
        raise one_click.StudyCommentsError('no study comments')
    upload_info = one_click.parse_study_comments(session.study_comments)
except one_click.StudyCommentsError, data:
    print 'study comments error: %s' % str(data)
    handle_bad_study_comments(session, str(data))
    sys.exit(0)

interface = pyxnat.Interface(server=pyxnat_server, 
                             user=pyxnat_user, 
                             password=pyxnat_pw)

project = interface.select.project(upload_info['project'])
if not project.exists():
    msg = 'unknown project %s in session %s' % (upload_info['project'], 
                                                str(session))
    print msg
    one_click.report_error('unknown project', msg)
    session.move('dead')
    sys.exit(0)

if upload_info['user'] not in project.users():
    msg = 'user %s not in project %s' % (upload_info['user'], 
                                         upload_info['project'])
    print msg
    one_click.report_error('user not in project', msg)
    session.move('dead')
    sys.exit(0)

print 'checking deidentification'
tags = session.check_deidentification()
if tags:
    print 'not deidentified'
    email = interface.manage.users.email(upload_info['user'])
    template = one_click.template_env.get_template('not_deidentified.email')
    body = template.render(session=session, 
                           tags=tags, 
                           tag_dict=one_click.deident_tags)
    subject = 'Error in data for %s sent to xnat.incf.org' % session.subject
    one_click.send_mail([email], subject, body)
    session.delete()
    one_click.remove_deleted()
    sys.exit(0)

print 'moving session %s' % str(session)
session.move(upload_info['project'])

print 'archiving session %s' % str(session)
session.archive()

sys.exit(0)

# eof
