def editor(self, trans, id=None, workflow_id=None, version=None): """ Render the main workflow editor interface. The canvas is embedded as an iframe (necessary for scrolling to work properly), which is rendered by `editor_canvas`. """ if not id: if workflow_id: workflow = trans.sa_session.query(model.Workflow).get(trans.security.decode_id(workflow_id)) stored_workflow = workflow.stored_workflow self.security_check(trans, stored_workflow, True, False) stored_workflow_id = trans.security.encode_id(stored_workflow.id) return trans.response.send_redirect(f'{url_for("/")}workflow/editor?id={stored_workflow_id}') error("Invalid workflow id") stored = self.get_stored_workflow(trans, id) # The following query loads all user-owned workflows, # So that they can be copied or inserted in the workflow editor. workflows = trans.sa_session.query(model.StoredWorkflow) \ .filter_by(user=trans.user, deleted=False, hidden=False) \ .order_by(desc(model.StoredWorkflow.table.c.update_time)) \ .options(joinedload('latest_workflow').joinedload('steps')) \ .all() if version is None: version = len(stored.workflows) - 1 else: version = int(version) # create workflow module models module_sections = [] for module_section in load_module_sections(trans).values(): module_sections.append({ "title": module_section.get("title"), "name": module_section.get("name"), "elems": [{ "name": elem.get("name"), "title": elem.get("title"), "description": elem.get("description") } for elem in module_section.get("modules")] }) # create data manager tool models data_managers = [] if trans.user_is_admin and trans.app.data_managers.data_managers: for data_manager_val in trans.app.data_managers.data_managers.values(): tool = data_manager_val.tool if not tool.hidden: data_managers.append({ "id": tool.id, "name": tool.name, "hidden": tool.hidden, "description": tool.description, "is_workflow_compatible": tool.is_workflow_compatible }) # create workflow models workflows = [{ 'id': trans.security.encode_id(workflow.id), 'latest_id': trans.security.encode_id(workflow.latest_workflow.id), 'step_count': len(workflow.latest_workflow.steps), 'name': workflow.name } for workflow in workflows if workflow.id != stored.id] # identify item tags item_tags = [tag for tag in stored.tags if tag.user == trans.user] item_tag_names = [] for ta in item_tags: item_tag_names.append(escape(ta.tag.name)) # build workflow editor model editor_config = { 'id': trans.security.encode_id(stored.id), 'name': stored.name, 'tags': item_tag_names, 'initialVersion': version, 'annotation': self.get_item_annotation_str(trans.sa_session, trans.user, stored), 'toolbox': trans.app.toolbox.to_dict(trans), 'moduleSections': module_sections, 'dataManagers': data_managers, 'workflows': workflows } # parse to mako return trans.fill_template("workflow/editor.mako", editor_config=editor_config)
def render_left_panel(context): context.caller_stack._push_frame() try: _import_ns = {} _mako_get_namespace(context, '__anon_0x11ade8d50')._populate(_import_ns, [u'render_individual_tagging_element']) trans = _import_ns.get('trans', context.get('trans', UNDEFINED)) h = _import_ns.get('h', context.get('h', UNDEFINED)) app = _import_ns.get('app', context.get('app', UNDEFINED)) def render_label(label): return render_render_label(context,label) n_ = _import_ns.get('n_', context.get('n_', UNDEFINED)) isinstance = _import_ns.get('isinstance', context.get('isinstance', UNDEFINED)) def render_tool(tool,section): return render_render_tool(context,tool,section) __M_writer = context.writer() # SOURCE LINE 262 __M_writer(u'\n ') # SOURCE LINE 263 from galaxy.tools import Tool from galaxy.tools.toolbox import ToolSection, ToolSectionLabel # SOURCE LINE 266 __M_writer(u'\n\n <div class="unified-panel-header" unselectable="on">\n <div class=\'unified-panel-header-inner\'>\n ') # SOURCE LINE 270 __M_writer(unicode(n_('Tools'))) __M_writer(u'\n </div>\n </div>\n\n <div class="unified-panel-body" style="overflow: auto;">\n <div class="toolMenu">\n <div id="tool-search" style="padding-bottom: 5px; position: relative; display: block; width: 100%">\n <input type="text" name="query" placeholder="search tools" id="tool-search-query" class="search-query parent-width" />\n <img src="') # SOURCE LINE 278 __M_writer(unicode(h.url_for('/static/images/loading_small_white_bg.gif'))) __M_writer(u'" id="search-spinner" class="search-spinner" />\n </div>\n <div class="toolSectionList">\n') # SOURCE LINE 281 for val in app.toolbox.tool_panel_contents( trans ): # SOURCE LINE 282 __M_writer(u' <div class="toolSectionWrapper">\n') # SOURCE LINE 283 if isinstance( val, Tool ): # SOURCE LINE 284 __M_writer(u' ') __M_writer(unicode(render_tool( val, False ))) __M_writer(u'\n') # SOURCE LINE 285 elif isinstance( val, ToolSection ) and val.elems: # SOURCE LINE 286 __M_writer(u' ') section = val __M_writer(u'\n <div class="toolSectionTitle" id="title_') # SOURCE LINE 287 __M_writer(unicode(section.id)) __M_writer(u'">\n <span>') # SOURCE LINE 288 __M_writer(unicode(section.name)) __M_writer(u'</span>\n </div>\n <div id="') # SOURCE LINE 290 __M_writer(unicode(section.id)) __M_writer(u'" class="toolSectionBody">\n <div class="toolSectionBg">\n') # SOURCE LINE 292 for section_key, section_val in section.elems.items(): # SOURCE LINE 293 if isinstance( section_val, Tool ): # SOURCE LINE 294 __M_writer(u' ') __M_writer(unicode(render_tool( section_val, True ))) __M_writer(u'\n') # SOURCE LINE 295 elif isinstance( section_val, ToolSectionLabel ): # SOURCE LINE 296 __M_writer(u' ') __M_writer(unicode(render_label( section_val ))) __M_writer(u'\n') pass pass # SOURCE LINE 299 __M_writer(u' </div>\n </div>\n') # SOURCE LINE 301 elif isinstance( val, ToolSectionLabel ): # SOURCE LINE 302 __M_writer(u' ') __M_writer(unicode(render_label( val ))) __M_writer(u'\n') pass # SOURCE LINE 304 __M_writer(u' </div>\n') pass # SOURCE LINE 307 if trans.user_is_admin() and trans.app.data_managers.data_managers: # SOURCE LINE 308 __M_writer(u' <div> </div>\n <div class="toolSectionWrapper">\n <div class="toolSectionTitle" id="title___DATA_MANAGER_TOOLS__">\n <span>Data Manager Tools</span>\n </div>\n <div id="__DATA_MANAGER_TOOLS__" class="toolSectionBody">\n <div class="toolSectionBg">\n') # SOURCE LINE 315 for data_manager_id, data_manager_val in trans.app.data_managers.data_managers.items(): # SOURCE LINE 316 __M_writer(u' ') __M_writer(unicode( render_tool( data_manager_val.tool, True ) )) __M_writer(u'\n') pass # SOURCE LINE 318 __M_writer(u' </div>\n </div>\n </div>\n') pass # SOURCE LINE 323 __M_writer(u' </div>\n') # SOURCE LINE 325 __M_writer(u' <div id="search-no-results" style="display: none; padding-top: 5px">\n <em><strong>Search did not match any tools.</strong></em>\n </div>\n <div> </div>\n\n <div class="toolMenuGroupHeader">Workflow control</div>\n ') # SOURCE LINE 331 from galaxy.workflow.modules import load_module_sections # SOURCE LINE 333 __M_writer(u'\n') # SOURCE LINE 334 for module_section in load_module_sections( trans ): # SOURCE LINE 335 __M_writer(u' ') section_title = module_section["title"] __M_writer(u'\n ') # SOURCE LINE 336 section_name = module_section["name"] __M_writer(u'\n <div class="toolSectionTitle" id="title___workflow__') # SOURCE LINE 337 __M_writer(unicode(section_name)) __M_writer(u'__">\n <span>') # SOURCE LINE 338 __M_writer(unicode(section_title)) __M_writer(u'</span>\n </div>\n <div id="__workflow__') # SOURCE LINE 340 __M_writer(unicode(section_name)) __M_writer(u'__" class="toolSectionBody">\n <div class="toolSectionBg">\n') # SOURCE LINE 342 for module in module_section["modules"]: # SOURCE LINE 343 __M_writer(u' <div class="toolTitle">\n <a href="#" onclick="workflow_view.add_node_for_module( \'') # SOURCE LINE 344 __M_writer(unicode(module['name'])) __M_writer(u"', '") __M_writer(unicode(module['title'])) __M_writer(u'\' )">') __M_writer(unicode(module['description'])) __M_writer(u'</a>\n </div><!-- end toolTitle -->\n') pass # SOURCE LINE 347 __M_writer(u' </div>\n </div>\n') pass # SOURCE LINE 350 __M_writer(u' </div>\n </div>\n\n') return '' finally: context.caller_stack._pop_frame()