#!/usr/bin/python

import os, sys

if 'QBDIR' in os.environ:
	sys.path.append('%s/api/python' % os.environ['QBDIR']);
elif os.uname()[0] == 'Darwin':
	sys.path.append('/Applications/pfx/qube/api/python');
else:
	sys.path.append('/usr/local/pfx/qube/api/python');

import qb

def main():

    #
    # set up the first job
    #
    job = {}
    job['name'] = 'python grandparent job'
    job['cpus'] = 2
    job['prototype'] = 'cmdrange'
    job['requirements'] = 'host.os=linux'
    
    package = {}
    job['package'] = package
    job['package']['cmdline'] = 'sleep QB_FRAME_NUMBER'

    agendaRange = '0-60x10'
    agenda = qb.genframes(agendaRange)
    job['agenda'] = agenda

    job['label'] = 'grandparentJob'
    
    listOfJobsToSubmit = []
    listOfJobsToSubmit.append(job)

    #
    # set up the second job, dependent upon the first
    #
    job = {}
    job['name'] = 'python parent job'
    job['cpus'] = 1
    job['prototype'] = 'cmdline'
    job['requirements'] = 'host.os=linux'
    job['label'] = 'parentJob'
    
    package = {}
    job['package'] = package
    job['package']['cmdline'] = 'sleep 60'

    callback = {}
    callback['triggers'] = 'done-job-grandparentJob'
    callback['language'] = 'qube'
    callback['code'] = 'unblock-self'

    listOfCallbacks = []
    listOfCallbacks.append(callback)
    job['status'] = 'blocked'
    job['callbacks'] = listOfCallbacks

    listOfJobsToSubmit.append(job)

    # 
    # set up the third job, dependent upon the second
    #
    job = {}
    job['name'] = 'python child job'
    job['cpus'] = 1
    job['prototype'] = 'cmdline'
    job['requirements'] = 'host.os=linux'
    job['label'] = 'childJob'
    
    package = {}
    job['package'] = package
    job['package']['cmdline'] = 'sleep 20'

    callback = {}
    callback['triggers'] = 'done-job-parentJob'
    callback['language'] = 'qube'
    callback['code'] = 'unblock-self'

    listOfCallbacks = []
    listOfCallbacks.append(callback)
    job['status'] = 'blocked'
    job['callbacks'] = listOfCallbacks

    listOfJobsToSubmit.append(job)
    listOfSubmittedJobs = qb.submit(listOfJobsToSubmit)
    
    for job in listOfSubmittedJobs:
        if job['label'] == 'grandparentJob':
            print 'grandparent: %d' % job['id']
        elif job['label'] == 'parentJob':
            print 'parent: %d' % job['id']
        elif job['label'] == 'childJob':
            print 'child:  %d' % job['id']
        else:
            print job['id']

if __name__ == "__main__":
    main()
    sys.exit(0)
