Ejemplo n.º 1
0
    def test_export_workflow_handle_node_url():
        node = {
            "id":
            "nodeab8cead211e586286003089581fc",
            "version":
            0,
            "name":
            "some node",
            "description":
            "test node",
            "author":
            "unknown",
            "function":
            "func",
            "url":
            "my_pretty_url",
            "inputs": [{
                "default": "0",
                "interface": "int",
                "description": "some input",
                "name": "in1"
            }, {
                "default": "1",
                "interface": "int",
                "description": "some other input",
                "name": "in2"
            }],
            "outputs": [{
                "default": "",
                "interface": "any",
                "description": "result",
                "name": "out"
            }]
        }

        wkf = {
            "id": "workflowead211e586286003089581fc",
            "version": 0,
            "name": "Test Workflow",
            "description": "test workflow",
            "author": "unknown",
            "nodes": [{
                "id": "nodeab8cead211e586286003089581fc",
                "x": 0,
                "y": 0
            }],
            "links": []
        }

        store = {}
        txt, bb = svg.export_workflow(wkf, store)
        assert "my_pretty_url" not in txt

        store = {node['id']: node}
        txt, bb = svg.export_workflow(wkf, store)
        assert "my_pretty_url" in txt
Ejemplo n.º 2
0
    def test_export_workflow_handle_node_url():
        node = {
            "id": "nodeab8cead211e586286003089581fc",
            "version": 0,
            "name": "some node",
            "description": "test node",
            "author": "unknown",
            "function": "func",
            "url": "my_pretty_url",
            "inputs": [
                {
                    "default": "0",
                    "interface": "int",
                    "description": "some input",
                    "name": "in1"
                },
                {
                    "default": "1",
                    "interface": "int",
                    "description": "some other input",
                    "name": "in2"
                }
            ],
            "outputs": [
                {
                    "default": "",
                    "interface": "any",
                    "description": "result",
                    "name": "out"
                }
            ]}

        wkf = {
            "id": "workflowead211e586286003089581fc",
            "version": 0,
            "name": "Test Workflow",
            "description": "test workflow",
            "author": "unknown",
            "nodes": [
                {
                    "id": "nodeab8cead211e586286003089581fc",
                    "x": 0,
                    "y": 0
                }
            ],
            "links": []
        }

        store = {}
        txt, bb = svg.export_workflow(wkf, store)
        assert "my_pretty_url" not in txt

        store = {node['id']: node}
        txt, bb = svg.export_workflow(wkf, store)
        assert "my_pretty_url" in txt
Ejemplo n.º 3
0
    def run(self):
        """Perform task associated with this directive."""
        env = self.state.document.settings.env

        wkf_file = directives.uri(self.arguments[0])
        if not os.path.isabs(wkf_file):
            wkf_file = os.path.join(os.path.dirname(env.doc2path(env.docname)),
                                    wkf_file)

        wkf_name = os.path.splitext(wkf_file)[0]
        svg_file = "%s.svg" % wkf_name
        if out_of_date(wkf_file, svg_file):
            # render the workflow again
            with open(wkf_file, 'r') as f:
                wkf = json.load(f)

            w = self.options.get('width', 600)
            h = self.options.get('height', 600)

            drawing, bb = svg.export_workflow(wkf, {}, (w, h))
            del bb

            with open(svg_file, 'w') as f:
                f.write(drawing)

        self.options['uri'] = svg_file
        node = nodes.image(**self.options)

        return [node]
Ejemplo n.º 4
0
    def run(self):
        """Perform task associated with this directive."""
        env = self.state.document.settings.env

        wkf_file = directives.uri(self.arguments[0])
        if not os.path.isabs(wkf_file):
            wkf_file = os.path.join(os.path.dirname(env.doc2path(env.docname)),
                                    wkf_file)

        wkf_name = os.path.splitext(wkf_file)[0]
        svg_file = "%s.svg" % wkf_name
        if out_of_date(wkf_file, svg_file):
            # render the workflow again
            with open(wkf_file, 'r') as f:
                wkf = json.load(f)

            w = self.options.get('width', 600)
            h = self.options.get('height', 600)

            drawing, bb = svg.export_workflow(wkf, {}, (w, h))
            del bb

            with open(svg_file, 'w') as f:
                f.write(drawing)

        self.options['uri'] = svg_file
        node = nodes.image(**self.options)

        return [node]
Ejemplo n.º 5
0
def view(request):
    session = DBSession()
    ro, view_params = view_init_min(request, session)

    view_params['description'] = Markup(ro.html_description())

    prov_def = ro.repr_json(full=True)
    data = {}
    workflow = ROWorkflow.get(session, prov_def['workflow'])
    if workflow is not None:
        store = {}
        workflow_def = workflow.repr_json(full=True)
        for node_def in workflow_def['nodes']:
            nid = node_def['id']
            wnode = ROWorkflowNode.get(session, nid)
            if wnode is None:
                pass
            else:
                store[nid] = wnode.repr_json(full=True)
                store[nid]['url'] = request.route_url('ro_view_home', uid=nid)

        txt, viewbox = svg.export_workflow(workflow_def, store, (800, 600))
        view_params['svg_repr'] = txt
        view_params['svg_viewbox'] = json.dumps(viewbox)

        prov = prov_def
        fmt_data = {}
        for data_obj in prov['data']:
            dtype = data_obj['type']
            if dtype == "ref":  # internally used to reference another RO
                url = request.route_url('ro_view_home', uid=data_obj["value"])
                val = '<p><a href="%s">link to RO</a></p>' % url
            elif dtype == "int":
                val = "<p>%d</p>" % data_obj["value"]
            elif dtype == "str":
                val = "<p>%s</p>" % data_obj["value"]
            elif dtype == "url":
                val = "<p>%s</p>" % data_obj["value"]
            elif dtype in ("image", "IImage"):
                img_data = data_obj["value"].replace("\n", "")
                val = '<img src="data:image/png;base64,%s" />' % img_data
            else:
                val = "<p>%s</p>" % json.dumps(data_obj["value"])
            fmt_data[data_obj['id']] = (dtype, val)

        for pexec in prov['executions']:
            nid = pexec['node']
            for port in pexec['inputs']:
                if port['data'] is not None:
                    key = "wkf_node_%d_input_%s" % (nid, port['port'])
                    data[key] = fmt_data[port['data']]

            for port in pexec['outputs']:
                if port['data'] is not None:
                    key = "wkf_node_%d_output_%s" % (nid, port['port'])
                    data[key] = fmt_data[port['data']]

    view_params['wkf_data'] = data

    return view_params
Ejemplo n.º 6
0
    def test_export_workflow_raise_error_if_no_pos():
        wkf = {
            "id": "workflowead211e586286003089581fc",
            "version": 0,
            "name": "Test Workflow",
            "description": "test workflow",
            "author": "unknown",
            "nodes": [
                {
                    "id": "nodeab8cead211e586286003089581fc",
                    "label": "takapouet"
                }
            ],
            "links": []
        }

        store = {}
        assert_raises(UserWarning, lambda: svg.export_workflow(wkf, store))
Ejemplo n.º 7
0
    def test_export_workflow_raise_error_if_no_pos():
        wkf = {
            "id":
            "workflowead211e586286003089581fc",
            "version":
            0,
            "name":
            "Test Workflow",
            "description":
            "test workflow",
            "author":
            "unknown",
            "nodes": [{
                "id": "nodeab8cead211e586286003089581fc",
                "label": "takapouet"
            }],
            "links": []
        }

        store = {}
        assert_raises(UserWarning, lambda: svg.export_workflow(wkf, store))
Ejemplo n.º 8
0
def view(request):
    session = DBSession()
    ro, view_params = view_init_min(request, session)

    view_params['description'] = Markup(ro.html_description())

    store = {}
    workflow_def = ro.repr_json(full=True)
    for node_def in workflow_def['nodes']:
        nid = node_def['id']
        wnode = ROWorkflowNode.get(session, nid)
        if wnode is None:
            pass
        # elif wnode.category == "alias":
        #     wnode = resolve_target(session, wnode)
        #     store[nid] = wnode.load_definition()
        #     store[nid]['url'] = request.route_url('project_content_alias_view_item', pid=wnode.project, cid=nid)
        else:
            store[nid] = wnode.repr_json(full=True)
            store[nid]['url'] = request.route_url('ro_view_home', uid=nid)

    for nid, node in store.items():
        for port in node['inputs'] + node['outputs']:
            iid = port['interface']
            iface = ROInterface.get(session, iid)
            if iface is None:
                pass
            else:
                store[iid] = iface.repr_json(full=True)
                store[iid]['url'] = request.route_url('ro_view_home', uid=iid)

    txt, viewbox = svg.export_workflow(workflow_def, store, (800, 600))
    view_params['svg_repr'] = txt
    view_params['svg_viewbox'] = json.dumps(viewbox)

    return view_params
Ejemplo n.º 9
0
    def test_export_workflow():
        node = {
            "id": "nodeab8cead211e586286003089581fc",
            "version": 0,
            "name": "some node",
            "description": "test node",
            "author": "unknown",
            "function": "func",
            "inputs": [
                {
                    "default": "0",
                    "interface": "int",
                    "description": "some input",
                    "name": "in1"
                },
                {
                    "default": "1",
                    "interface": "int",
                    "description": "some other input",
                    "name": "in2"
                }
            ],
            "outputs": [
                {
                    "default": "",
                    "interface": "any",
                    "description": "result",
                    "name": "out"
                }
            ]}

        wkf = {
            "id": "workflowead211e586286003089581fc",
            "version": 0,
            "name": "Test Workflow",
            "description": "test workflow",
            "author": "unknown",
            "nodes": [
                {
                    "id": "nodeab8cead211e586286003089581fc",
                    "x": 0,
                    "y": 0
                },
                {
                    "id": "nodeab8cead211e586286003089581fc",
                    "label": "mylabel",
                    "x": 0,
                    "y": 50
                },
                {
                    "id": "nodefailead211e586286003089581fc",
                    "x": 0,
                    "y": 100
                }
            ],
            "links": [
                {
                    "source": 0,
                    "source_port": "out",
                    "target": 2,
                    "target_port": "in1"
                },
                {
                    "source": 1,
                    "source_port": "out",
                    "target": 2,
                    "target_port": "in2"
                }
            ]
        }

        store = {node['id']: node}

        txt, bb = svg.export_workflow(wkf, store)
        assert "wkf_node_0" in txt
        assert "wkf_node_1" in txt
        assert "wkf_node_2" in txt
Ejemplo n.º 10
0
    def test_export_workflow():
        node = {
            "id":
            "nodeab8cead211e586286003089581fc",
            "version":
            0,
            "name":
            "some node",
            "description":
            "test node",
            "author":
            "unknown",
            "function":
            "func",
            "inputs": [{
                "default": "0",
                "interface": "int",
                "description": "some input",
                "name": "in1"
            }, {
                "default": "1",
                "interface": "int",
                "description": "some other input",
                "name": "in2"
            }],
            "outputs": [{
                "default": "",
                "interface": "any",
                "description": "result",
                "name": "out"
            }]
        }

        wkf = {
            "id":
            "workflowead211e586286003089581fc",
            "version":
            0,
            "name":
            "Test Workflow",
            "description":
            "test workflow",
            "author":
            "unknown",
            "nodes": [{
                "id": "nodeab8cead211e586286003089581fc",
                "x": 0,
                "y": 0
            }, {
                "id": "nodeab8cead211e586286003089581fc",
                "label": "mylabel",
                "x": 0,
                "y": 50
            }, {
                "id": "nodefailead211e586286003089581fc",
                "x": 0,
                "y": 100
            }],
            "links": [{
                "source": 0,
                "source_port": "out",
                "target": 2,
                "target_port": "in1"
            }, {
                "source": 1,
                "source_port": "out",
                "target": 2,
                "target_port": "in2"
            }]
        }

        store = {node['id']: node}

        txt, bb = svg.export_workflow(wkf, store)
        assert "wkf_node_0" in txt
        assert "wkf_node_1" in txt
        assert "wkf_node_2" in txt