예제 #1
0
파일: workflow.py 프로젝트: msauria/galaxy
    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)
예제 #2
0
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>&nbsp;</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>&nbsp;</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()