| 
															 | 
															 | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															from flask import Blueprint, render_template, request, flash, redirect, url_for | 
															 | 
															 | 
															from flask import Blueprint, render_template, request, flash, redirect, url_for | 
														
														
													
														
															 | 
															 | 
															from flask_login import login_required, current_user | 
															 | 
															 | 
															from flask_login import login_required, current_user | 
														
														
													
														
															 | 
															 | 
															from .models import Resource | 
															 | 
															 | 
															from .models import Resource | 
														
														
													
														
															 | 
															 | 
															from .models import Relationships | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															 | 
															 | 
															 | 
															from .resources import * | 
														
														
													
														
															 | 
															 | 
															from werkzeug.exceptions import abort | 
															 | 
															 | 
															from werkzeug.exceptions import abort | 
														
														
													
														
															 | 
															 | 
															from . import db | 
															 | 
															 | 
															from . import db | 
														
														
													
														
															 | 
															 | 
															
  | 
															 | 
															 | 
															
  | 
														
														
													
														
															 | 
															 | 
															tool = Blueprint('tool', __name__) | 
															 | 
															 | 
															tool = Blueprint('tool', __name__) | 
														
														
													
														
															 | 
															 | 
															
  | 
															 | 
															 | 
															
  | 
														
														
													
														
															 | 
															 | 
															# function to retrieve data about a single tool from the database | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															def get_tool(tool_id): | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															    tool = Resource.query.filter_by(id=tool_id).first() | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															    if tool is None: | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															        abort(404) | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															    return tool | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															
  | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															# function to retrieve linked resources | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															def get_linked_resources(tool_id): | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															    relationships = Relationships.query.filter_by(first_resource_id=tool_id).first() | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															    if relationships: | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															        resource_id = relationships.second_resource_id | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															        resources = Resource.query.filter_by(id=resource_id).all() | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															        return resources | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															
  | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															# route for displaying all tools in database | 
															 | 
															 | 
															# route for displaying all tools in database | 
														
														
													
														
															 | 
															 | 
															@tool.route('/tools') | 
															 | 
															 | 
															@tool.route('/tools') | 
														
														
													
														
															 | 
															 | 
															def get_tools(): | 
															 | 
															 | 
															def get_tools(): | 
														
														
													
												
													
														
															 | 
															 | 
															 | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															# route for displaying a single tool based on the ID in the database | 
															 | 
															 | 
															# route for displaying a single tool based on the ID in the database | 
														
														
													
														
															 | 
															 | 
															@tool.route('/tools/<int:tool_id>') | 
															 | 
															 | 
															@tool.route('/tools/<int:tool_id>') | 
														
														
													
														
															 | 
															 | 
															def show_tool(tool_id): | 
															 | 
															 | 
															def show_tool(tool_id): | 
														
														
													
														
															 | 
															 | 
															    tool = get_tool(tool_id) | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															 | 
															 | 
															 | 
															    tool = get_resource(tool_id) | 
														
														
													
														
															 | 
															 | 
															    resources = get_linked_resources(tool_id) | 
															 | 
															 | 
															    resources = get_linked_resources(tool_id) | 
														
														
													
														
															 | 
															 | 
															    return render_template('tool.html', tool=tool, resources=resources) | 
															 | 
															 | 
															    return render_template('tool.html', tool=tool, resources=resources) | 
														
														
													
														
															 | 
															 | 
															
  | 
															 | 
															 | 
															
  | 
														
														
													
												
													
														
															 | 
															 | 
															 | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															@tool.route('/tools/<int:tool_id>/edit', methods=('GET', 'POST')) | 
															 | 
															 | 
															@tool.route('/tools/<int:tool_id>/edit', methods=('GET', 'POST')) | 
														
														
													
														
															 | 
															 | 
															@login_required | 
															 | 
															 | 
															@login_required | 
														
														
													
														
															 | 
															 | 
															def edit_tool(tool_id): | 
															 | 
															 | 
															def edit_tool(tool_id): | 
														
														
													
														
															 | 
															 | 
															    tool = get_tool(tool_id) | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															 | 
															 | 
															 | 
															    tool = get_resource(tool_id) | 
														
														
													
														
															 | 
															 | 
															
  | 
															 | 
															 | 
															
  | 
														
														
													
														
															 | 
															 | 
															    if request.method == 'POST': | 
															 | 
															 | 
															    if request.method == 'POST': | 
														
														
													
														
															 | 
															 | 
															        name = request.form['name'] | 
															 | 
															 | 
															        name = request.form['name'] | 
														
														
													
												
													
														
															 | 
															 | 
															 | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															            tool = Resource.query.get(tool_id) | 
															 | 
															 | 
															            tool = Resource.query.get(tool_id) | 
														
														
													
														
															 | 
															 | 
															            tool.name = name | 
															 | 
															 | 
															            tool.name = name | 
														
														
													
														
															 | 
															 | 
															            tool.description = description | 
															 | 
															 | 
															            tool.description = description | 
														
														
													
														
															 | 
															 | 
															            tool.projectUrl = project_url | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															            tool.repositoryUrl = repository_url | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															            tool.dependencies = dependencies | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															            tool.expertiseToUse = expertise | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															            tool.expertiseToHost = self_host_expertise | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															            tool.ingestFormats = ingest | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															            tool.outputFormats = output | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															            tool.status = status | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															 | 
															 | 
															 | 
															            # tool.projectUrl = project_url | 
														
														
													
														
															 | 
															 | 
															 | 
															 | 
															 | 
															            # tool.repositoryUrl = repository_url | 
														
														
													
														
															 | 
															 | 
															 | 
															 | 
															 | 
															            # tool.dependencies = dependencies | 
														
														
													
														
															 | 
															 | 
															 | 
															 | 
															 | 
															            # tool.expertiseToUse = expertise | 
														
														
													
														
															 | 
															 | 
															 | 
															 | 
															 | 
															            # tool.expertiseToHost = self_host_expertise | 
														
														
													
														
															 | 
															 | 
															 | 
															 | 
															 | 
															            # tool.ingestFormats = ingest | 
														
														
													
														
															 | 
															 | 
															 | 
															 | 
															 | 
															            # tool.outputFormats = output | 
														
														
													
														
															 | 
															 | 
															 | 
															 | 
															 | 
															            # tool.status = status | 
														
														
													
														
															 | 
															 | 
															            db.session.commit() | 
															 | 
															 | 
															            db.session.commit() | 
														
														
													
														
															 | 
															 | 
															            return redirect(url_for('tool.get_tools')) | 
															 | 
															 | 
															            return redirect(url_for('tool.get_tools')) | 
														
														
													
														
															 | 
															 | 
															
  | 
															 | 
															 | 
															
  | 
														
														
													
												
													
														
															 | 
															 | 
															 | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															@tool.route('/tools/<int:tool_id>/delete', methods=('POST',)) | 
															 | 
															 | 
															@tool.route('/tools/<int:tool_id>/delete', methods=('POST',)) | 
														
														
													
														
															 | 
															 | 
															@login_required | 
															 | 
															 | 
															@login_required | 
														
														
													
														
															 | 
															 | 
															def delete_tool(tool_id): | 
															 | 
															 | 
															def delete_tool(tool_id): | 
														
														
													
														
															 | 
															 | 
															    tool = get_tool(tool_id) | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															    deletion = Resource.query.get(tool_id) | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															    db.session.delete(deletion) | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															    db.session.commit() | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															    flash('Successfully deleted!') | 
															 | 
															 | 
															 | 
														
														
													
														
															 | 
															 | 
															 | 
															 | 
															 | 
															    delete_resource(tool_id) | 
														
														
													
														
															 | 
															 | 
															    return redirect(url_for('tool.get_tools')) | 
															 | 
															 | 
															    return redirect(url_for('tool.get_tools')) |