#
    # Create custom graph
    #
    command = "sleep `shuf -i %d-%d -n 1`" % (options.min, options.max )
    args =  { "args": command, "start":1, "end":options.num, "packetSize":1 }
    tags =  { "prod":"test", "shot":"test", "nbFrames":options.num }
    runner = "puliclient.contrib.commandlinerunner.CommandLineRunner"
    if options.lic != "":
        lic=options.lic
    else:
        lic=None

    simpleTask = Task( name="NoLic", arguments=args, tags=tags, runner=runner, lic=None )

    graph = Graph(options.jobname, poolName='default', tags=tags)
    tg = graph.addNewTaskGroup( name="TG")
    tg.addNewTask( name="Lic", arguments=args, tags=tags, runner=runner, lic=lic )

    tg2 = graph.addNewTaskGroup( name="TG2")
    tg2.addTask( simpleTask )

    if options.dump:
        print graph

    #
    # Execute
    #
    if options.execute:
        graph.execute()
    else:
        graph.submit(options.hostname, options.port)
2. a taskgroup waits the end of a task --> ok
3. a taskgroup waits the end of a taskgroup --> ok
"""

from puliclient import Task, Graph, GraphDumper

if __name__ == '__main__':
    args =  { "cmd":"sleep 30", "start":1, "end":10, "packetSize":1 }
    tags =  { "prod":"test", "shot":"test" }
    decomposer = "puliclient.contrib.generic.GenericDecomposer"

	#
    # 1. a task waits the end of a taskgroup
    #
    graph = Graph('1st case', tags=tags)
    tg1 = graph.addNewTaskGroup( name="TG1" )
    tg1.addNewTask( name="task1", arguments=args, tags=tags, decomposer=decomposer )
    tg1.addNewTask( name="task2", arguments=args, tags=tags, decomposer=decomposer )
    task3 = graph.addNewTask( name="task3", arguments=args, tags=tags, decomposer=decomposer )
    graph.addEdges( [(tg1, task3)] )
    graph.submit("pulitest", 8004)

    #
    # 2. a taskgroup waits the end of a task
    #
    graph = Graph('2nd case', tags=tags)
    tg1 = graph.addNewTaskGroup( name="TG1" )
    tg1.addNewTask( name="task1", arguments=args, tags=tags, decomposer=decomposer )
    tg1.addNewTask( name="task2", arguments=args, tags=tags, decomposer=decomposer )

    task3 = graph.addNewTask( name="task3", arguments=args, tags=tags, decomposer=decomposer )
        # command = "sleep `shuf -i 20-30 -n 1`"
        # args = {"args": command, "start": 1, "end": 10, "packetSize": 1}
        # runner = "puliclient.contrib.commandlinerunner.CommandLineRunner"
        # graph.addNewTask(name="Timer", arguments=args, tags=tags, runner=runner, timer=time.time()+600)

        graph.addNewCallable(
            MyClass.myMethod,
            "une_methode",
            user_args=("toto", 2),
            user_kwargs={"param3": 3},
            tags=tags,
            ramUse=4000
        )

        tg = graph.addNewTaskGroup("group")

        from mymodule.submodule.farm import myFunction
        tg.addNewCallable(myFunction, "une_fonction", user_args=[True,"any text"], tags=tags)

        # graph.addCallable(MyClass.myMethod, "1er_arg", 2, param3='test', name="zozo", tags=tags, timer=time.time()+600)

    except GraphError, e:
        print "oops an error occured during the graph creation: %s" % e
        sys.exit(0)

    if options.dump:
        print graph

    #
    # Execute