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
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
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]
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
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))
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))
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
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
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