#!/usr/bin/env python
import sys
import traceback
import fileseq
import blueprint

from blueprint.exception import CommandException

class Taskrun(blueprint.Application):

    def __init__(self):
        blueprint.Application.__init__(self,
            "Taskrun - Blueprint task execution tool")
        group = self._argparser.add_argument_group("Taskrun Options")
        
        group.add_argument("script", metavar="SCRIPT", help="Path to blueprint script.")
        group.add_argument("range", metavar="FRAME_RANGE", help="Frame range.", default="1001")

        group.add_argument("-layer", metavar="LAYER", 
            help="Layer to execute task from.")

        group.add_argument("-task", metavar="TASK",
            help="Task to execute.");

    def handleArgs(self, args):
        job = blueprint.loadScript(args.script)
        
        try:
            if args.layer:
                layer = job.getLayer(args.layer)
                frameset = fileseq.FrameSet(args.range)
                layer.execute(frameset)
            elif args.task:
                task = job.getLayer(args.task)
                task.execute()
            else:
                raise Exception("Unsupported operation, must specify -layer or -task")

        except CommandException, e:
            print >> sys.stderr, "%s\n" % e
            sys.exit(e.exitStatus)

        except Exception, e:
            print >> sys.stderr, "Error running task %s\n" % e
            traceback.print_exc(file=sys.stderr)
            sys.exit(1)


if __name__ == "__main__":
    taskrun = Taskrun()
    taskrun.go()
