コード例 #1
0
ファイル: ctl.py プロジェクト: andrix/sworkflow
def draw_workflow(workflow, workflow_name, filename=None, remove_dependencies=True):
    try:
        import pygraphviz as pgv
    except ImportError:
        print "You need PyGraphviz to run this command."
        return

    starttask = workflow.starttask
    redundant_deps = set(edge for edge, _  in find_redundant_deps(starttask))

    graph = pgv.AGraph(strict=False, directed=True)
    graph.graph_attr['label'] = "Workflow name: %s" % taskid(workflow)
    for task in walk(starttask):
        for t in task.deps:
            a = taskid(task)
            b = taskid(t)
            color = ''
            if (a, b) in redundant_deps:
                if remove_dependencies:
                    continue
                color = 'red'
            graph.add_edge(b, a, color=color)

    graph.layout(prog='dot')
    filename = filename or "%s%s.png" % (workflow_name, '-nodeps' if remove_dependencies else '')
    graph.draw(filename)
    print "Workflow graphical representation drawn : %s." % filename
    if remove_dependencies:
        print "Unnecesary dependencies were removed from the graph to make it"
        print "clear. Use 'lint' command if you want to see them"
コード例 #2
0
ファイル: ctl.py プロジェクト: andrix/sworkflow
def cmdline(controller):
    """Provide a command line interface to sworkflow"""

    parser = _parser()
    opts, args = parser.parse_args()
    if not args:
        parser.error("please specify a command, or -h for help")

    params = dict(p.strip().split("=") for p in opts.param or ())

    cmd = args[0]
    workflow = None
    if cmd in ('run', 'list-tasks', 'draw', 'lint', 'list-settings',): # need workflow name
        try:
            name = args[1]
        except IndexError:
            parser.error("'%s' command needs the workflow name" % args[0])

        workflow = controller.create(name, params=params,
                exclude_tasks=opts.exclude_task, include_tasks=opts.include_task)

    if cmd == 'run':
        workflow.execute()
    elif cmd == 'list':
        for wf in controller.list():
            print wf
    elif cmd == 'list-tasks':
        print " %3s | %-38s | %-9s | %s" % ('#', 'taskid', 'skipped?', 'name')
        print "-"*80
        for i, task, skipped in workflow.tasks:
            task_id = taskid(task)
            print " %3d | %-38s | %-9s | %s" % (i, task_id, skipped, task)
        print "-"*80
    elif cmd == 'lint':
        draw_workflow(workflow, name, filename=opts.output, remove_dependencies=False)
    elif cmd == 'draw':
        draw_workflow(workflow, name, filename=opts.output)
    elif cmd == 'list-settings':
        print "| %s | %s |" % ("setting name".ljust(28), "default".ljust(45))
        print "-"*80
        settings = workflow.settings or {}
        for name, default in settings.items():
            print "| %s | %s |" % (name.ljust(28), default.ljust(45),)
        print "-"*80
    else:
        parser.error("'%s' is not a valid command" % cmd)