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 Book | |||||
from .models import Resource | |||||
from werkzeug.exceptions import abort | from werkzeug.exceptions import abort | ||||
from . import db | from . import db | ||||
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 Tool | |||||
from .models import Practice | |||||
from .models import Sensitivity | |||||
from .models import Typology | |||||
from .models import Workflow | |||||
from .models import Publisher | |||||
from .models import Book | |||||
from .models import Reference | |||||
from .models import Resource | |||||
from .models import Relationships | |||||
from werkzeug.exceptions import abort | from werkzeug.exceptions import abort | ||||
from . import db | from . import db | ||||
def create_resource(): | def create_resource(): | ||||
if request.method == 'POST': | if request.method == 'POST': | ||||
if request.form.get('resource_type') == 'tool': | if request.form.get('resource_type') == 'tool': | ||||
type = 'tool' | |||||
name = request.form.get('tool_name') | name = request.form.get('tool_name') | ||||
description = request.form.get('description') | description = request.form.get('description') | ||||
projectUrl = request.form.get('projectUrl') | projectUrl = request.form.get('projectUrl') | ||||
ingestFormats = request.form.get('ingestFormats') | ingestFormats = request.form.get('ingestFormats') | ||||
outputFormats = request.form.get('outputFormats') | outputFormats = request.form.get('outputFormats') | ||||
status = request.form.get('status') | status = request.form.get('status') | ||||
practice_id = request.form.get('linked_practice_id') | |||||
if not name: | if not name: | ||||
flash('Name is required!') | flash('Name is required!') | ||||
else: | else: | ||||
tool = Tool.query.filter_by(name=name).first() # if this returns a tool, then the name already exists in database | |||||
tool = Resource.query.filter_by(type='tool').filter_by(name=name).first() # if this returns a tool, then the name already exists in database | |||||
if tool: # if a tool is found, we want to redirect back to create page | if tool: # if a tool is found, we want to redirect back to create page | ||||
flash('Tool with same name already exists') | flash('Tool with same name already exists') | ||||
return redirect(url_for('create.create_resource')) | return redirect(url_for('create.create_resource')) | ||||
# create a new tool with the form data | # create a new tool with the form data | ||||
new_tool = Tool(name=name, description=description, projectUrl=projectUrl, repositoryUrl=repositoryUrl, expertiseToUse=expertiseToUse, expertiseToHost=expertiseToHost, dependencies=dependencies, ingestFormats=ingestFormats, outputFormats=outputFormats, status=status, practice_id=practice_id) | |||||
new_tool = Resource(type=type, name=name, description=description, projectUrl=projectUrl, repositoryUrl=repositoryUrl, expertiseToUse=expertiseToUse, expertiseToHost=expertiseToHost, dependencies=dependencies, ingestFormats=ingestFormats, outputFormats=outputFormats, status=status) | |||||
# add the new tool to the database | # add the new tool to the database | ||||
db.session.add(new_tool) | db.session.add(new_tool) | ||||
db.session.commit() | db.session.commit() | ||||
if request.form.get('linked_practice_id'): | |||||
tool = Resource.query.filter_by(type='tool').filter_by(name=name).first() | |||||
first_resource_id = tool.id | |||||
second_resource_id = request.form.get('linked_practice_id') | |||||
new_relationship = Relationships(first_resource_id=first_resource_id, second_resource_id=second_resource_id) | |||||
# add the new relationship to the database | |||||
db.session.add(new_relationship) | |||||
db.session.commit() | |||||
elif request.form.get('resource_type') == 'practice': | elif request.form.get('resource_type') == 'practice': | ||||
type = 'practice' | |||||
name = request.form.get('practice_name') | name = request.form.get('practice_name') | ||||
description = request.form.get('description') | description = request.form.get('description') | ||||
if not name: | if not name: | ||||
flash('Name is required!') | flash('Name is required!') | ||||
else: | else: | ||||
practice = Practice.query.filter_by(name=name).first() # if this returns a practice, then the name already exists in database | |||||
practice = Resource.query.filter_by(type='practice').filter_by(name=name).first() # if this returns a practice, then the name already exists in database | |||||
if practice: # if a practice is found, we want to redirect back to create page | if practice: # if a practice is found, we want to redirect back to create page | ||||
flash('Practice with same name already exists') | flash('Practice with same name already exists') | ||||
return redirect(url_for('create.create_resource')) | return redirect(url_for('create.create_resource')) | ||||
# create a new practice with the form data | # create a new practice with the form data | ||||
new_practice = Practice(name=name, description=description) | |||||
new_practice = Resource(type=type, name=name, description=description) | |||||
# add the new practice to the database | # add the new practice to the database | ||||
db.session.add(new_practice) | db.session.add(new_practice) | ||||
db.session.commit() | db.session.commit() | ||||
elif request.form.get('resource_type') == 'sensitivity': | elif request.form.get('resource_type') == 'sensitivity': | ||||
type = 'sensitivity' | |||||
name = request.form.get('sensitivity_name') | name = request.form.get('sensitivity_name') | ||||
description = request.form.get('description') | description = request.form.get('description') | ||||
return redirect(url_for('create.create_resource')) | return redirect(url_for('create.create_resource')) | ||||
# create a new sensitivity with the form data | # create a new sensitivity with the form data | ||||
new_sensitivity = Sensitivity(name=name, description=description) | |||||
new_sensitivity = Resource(type=type, name=name, description=description) | |||||
# add the new sensitivity to the database | # add the new sensitivity to the database | ||||
db.session.add(new_sensitivity) | db.session.add(new_sensitivity) | ||||
db.session.commit() | db.session.commit() | ||||
elif request.form.get('resource_type') == 'typology': | elif request.form.get('resource_type') == 'typology': | ||||
type = 'typology' | |||||
name = request.form.get('typology_name') | name = request.form.get('typology_name') | ||||
description = request.form.get('description') | description = request.form.get('description') | ||||
return redirect(url_for('create.create_resource')) | return redirect(url_for('create.create_resource')) | ||||
# create a new typology with the form data | # create a new typology with the form data | ||||
new_typology = Typology(name=name, description=description) | |||||
new_typology = Resource(type=type, name=name, description=description) | |||||
# add the new typology to the database | # add the new typology to the database | ||||
db.session.add(new_typology) | db.session.add(new_typology) | ||||
db.session.commit() | db.session.commit() | ||||
elif request.form.get('resource_type') == 'publisher': | elif request.form.get('resource_type') == 'publisher': | ||||
type = 'publisher' | |||||
name = request.form.get('publisher_name') | name = request.form.get('publisher_name') | ||||
description = request.form.get('description') | description = request.form.get('description') | ||||
publisherUrl = request.form.get('publisherUrl') | publisherUrl = request.form.get('publisherUrl') | ||||
return redirect(url_for('create.create_resource')) | return redirect(url_for('create.create_resource')) | ||||
# create a new publisher with the form data | # create a new publisher with the form data | ||||
new_publisher = Publisher(name=name, description=description, publisherUrl=publisherUrl) | |||||
new_publisher = Resource(type=type, name=name, description=description, publisherUrl=publisherUrl) | |||||
# add the new publisher to the database | # add the new publisher to the database | ||||
db.session.add(new_publisher) | db.session.add(new_publisher) | ||||
db.session.commit() | db.session.commit() | ||||
elif request.form.get('resource_type') == 'book': | elif request.form.get('resource_type') == 'book': | ||||
type = 'book' | |||||
name = request.form.get('book_name') | name = request.form.get('book_name') | ||||
description = request.form.get('description') | description = request.form.get('description') | ||||
return redirect(url_for('create.create_resource')) | return redirect(url_for('create.create_resource')) | ||||
# create a new book with the form data | # create a new book with the form data | ||||
new_book = Book(name=name, description=description) | |||||
new_book = Resource(type=type, name=name, description=description) | |||||
# add the new book to the database | # add the new book to the database | ||||
db.session.add(new_book) | db.session.add(new_book) | ||||
db.session.commit() | db.session.commit() | ||||
elif request.form.get('resource_type') == 'reference': | elif request.form.get('resource_type') == 'reference': | ||||
type = 'reference' | |||||
zoteroUrl = request.form.get('zoteroUrl') | zoteroUrl = request.form.get('zoteroUrl') | ||||
if not zoteroUrl: | if not zoteroUrl: | ||||
return redirect(url_for('create.create_resource')) | return redirect(url_for('create.create_resource')) | ||||
# create a new reference with the form data | # create a new reference with the form data | ||||
new_reference = Reference(zoteroUrl=zoteroUrl) | |||||
new_reference = Resource(type=type, zoteroUrl=zoteroUrl) | |||||
# add the new reference to the database | # add the new reference to the database | ||||
db.session.add(new_reference) | db.session.add(new_reference) | ||||
db.session.commit() | db.session.commit() | ||||
practice_dropdown = Practice.query | |||||
practice_dropdown = Resource.query.filter_by(type='practice') | |||||
return render_template('create.html', practice_dropdown=practice_dropdown) | return render_template('create.html', practice_dropdown=practice_dropdown) |
from flask import Blueprint, render_template | from flask import Blueprint, render_template | ||||
from flask_login import login_required, current_user | from flask_login import login_required, current_user | ||||
from . import db | from . import db | ||||
from .models import Tool | |||||
from .models import Resource | |||||
from sqlalchemy.sql import func | from sqlalchemy.sql import func | ||||
main = Blueprint('main', __name__) | main = Blueprint('main', __name__) | ||||
# route for index page | # route for index page | ||||
@main.route('/') | @main.route('/') | ||||
def index(): | def index(): | ||||
tools = Tool.query.order_by(func.random()).limit(5).all() | |||||
tools = Resource.query.filter_by(type='tool').order_by(func.random()).limit(5).all() | |||||
return render_template('index.html', tools=tools) | return render_template('index.html', tools=tools) | ||||
# route for profile page | # route for profile page |
password = db.Column(db.String(100)) | password = db.Column(db.String(100)) | ||||
name = db.Column(db.String(1000)) | name = db.Column(db.String(1000)) | ||||
# table for tools | |||||
class Tool(db.Model): | |||||
__tablename__ = 'Tool' | |||||
# table for resources | |||||
class Resource(db.Model): | |||||
__tablename__ = 'Resource' | |||||
id = db.Column(db.Integer, primary_key=True) # primary keys are required by SQLAlchemy | id = db.Column(db.Integer, primary_key=True) # primary keys are required by SQLAlchemy | ||||
created = db.Column(db.DateTime, default=datetime.utcnow) | created = db.Column(db.DateTime, default=datetime.utcnow) | ||||
type = db.Column(db.Text) | |||||
name = db.Column(db.Text) | name = db.Column(db.Text) | ||||
description = db.Column(db.Text) | description = db.Column(db.Text) | ||||
projectUrl = db.Column(db.Text) | projectUrl = db.Column(db.Text) | ||||
ingestFormats = db.Column(db.Text) | ingestFormats = db.Column(db.Text) | ||||
outputFormats = db.Column(db.Text) | outputFormats = db.Column(db.Text) | ||||
status = db.Column(db.Text) | status = db.Column(db.Text) | ||||
practice_id = db.Column(db.Integer, db.ForeignKey('Practice.id')) | |||||
book_id = db.Column(db.Integer, db.ForeignKey('Book.id')) | |||||
practices = db.relationship('Practice', foreign_keys=[practice_id], backref='tool') | |||||
books = db.relationship('Book', foreign_keys=[book_id], backref='tool') | |||||
# table for practices | |||||
class Practice(db.Model): | |||||
__tablename__ = 'Practice' | |||||
id = db.Column(db.Integer, primary_key=True) # primary keys are required by SQLAlchemy | |||||
created = db.Column(db.DateTime, default=datetime.utcnow) | |||||
name = db.Column(db.Text) | |||||
description = db.Column(db.Text) | |||||
tool_id = db.Column(db.Integer, db.ForeignKey('Tool.id')) | |||||
typology_id = db.Column(db.Integer, db.ForeignKey('Typology.id')) | |||||
book_id = db.Column(db.Integer, db.ForeignKey('Book.id')) | |||||
reference_id = db.Column(db.Integer, db.ForeignKey('Reference.id')) | |||||
tools = db.relationship('Tool', foreign_keys=[tool_id], backref='practice') | |||||
typologies = db.relationship('Typology', foreign_keys=[typology_id], backref='practice') | |||||
books = db.relationship('Book', foreign_keys=[book_id], backref='practice') | |||||
references = db.relationship('Reference', foreign_keys=[reference_id], backref='practice') | |||||
# table for sensitivities | |||||
class Sensitivity(db.Model): | |||||
__tablename__ = 'Sensitivity' | |||||
id = db.Column(db.Integer, primary_key=True) # primary keys are required by SQLAlchemy | |||||
created = db.Column(db.DateTime, default=datetime.utcnow) | |||||
name = db.Column(db.Text) | |||||
description = db.Column(db.Text) | |||||
practice_id = db.Column(db.Integer, db.ForeignKey('Practice.id')) | |||||
typology_id = db.Column(db.Integer, db.ForeignKey('Typology.id')) | |||||
reference_id = db.Column(db.Integer, db.ForeignKey('Reference.id')) | |||||
practices = db.relationship('Practice', foreign_keys=[practice_id], backref='sensitivity') | |||||
typologies = db.relationship('Typology', foreign_keys=[typology_id], backref='sensitivity') | |||||
references = db.relationship('Reference', foreign_keys=[reference_id], backref='sensitivity') | |||||
# table for typologies | |||||
class Typology(db.Model): | |||||
__tablename__ = 'Typology' | |||||
id = db.Column(db.Integer, primary_key=True) # primary keys are required by SQLAlchemy | |||||
created = db.Column(db.DateTime, default=datetime.utcnow) | |||||
name = db.Column(db.Text) | |||||
description = db.Column(db.Text) | |||||
tool_id = db.Column(db.Integer, db.ForeignKey('Tool.id')) | |||||
book_id = db.Column(db.Integer, db.ForeignKey('Book.id')) | |||||
practice_id = db.Column(db.Integer, db.ForeignKey('Practice.id')) | |||||
reference_id = db.Column(db.Integer, db.ForeignKey('Reference.id')) | |||||
tools = db.relationship('Tool', foreign_keys=[tool_id], backref='typology') | |||||
books = db.relationship('Book', foreign_keys=[book_id], backref='typology_books') | |||||
practices = db.relationship('Practice', foreign_keys=[practice_id], backref='typology') | |||||
references = db.relationship('Reference', foreign_keys=[reference_id], backref='typology') | |||||
# table for workflows | |||||
class Workflow(db.Model): | |||||
__tablename__ = 'Workflow' | |||||
id = db.Column(db.Integer, primary_key=True) # primary keys are required by SQLAlchemy | |||||
created = db.Column(db.DateTime, default=datetime.utcnow) | |||||
# table for publishers | |||||
class Publisher(db.Model): | |||||
__tablename__ = 'Publisher' | |||||
id = db.Column(db.Integer, primary_key=True) # primary keys are required by SQLAlchemy | |||||
created = db.Column(db.DateTime, default=datetime.utcnow) | |||||
name = db.Column(db.Text) | |||||
description = db.Column(db.Text) | |||||
publisherUrl = db.Column(db.Text) | publisherUrl = db.Column(db.Text) | ||||
zoteroUrl = db.Column(db.Text) | |||||
book_id = db.Column(db.Integer, db.ForeignKey('Book.id')) | |||||
books = db.relationship('Book', foreign_keys=[book_id], backref='publisher') | |||||
# table for books | |||||
class Book(db.Model): | |||||
__tablename__ = 'Book' | |||||
id = db.Column(db.Integer, primary_key=True) # primary keys are required by SQLAlchemy | |||||
created = db.Column(db.DateTime, default=datetime.utcnow) | |||||
name = db.Column(db.Text) | |||||
description = db.Column(db.Text) | |||||
tool_id = db.Column(db.Integer, db.ForeignKey('Tool.id')) | |||||
typology_id = db.Column(db.Integer, db.ForeignKey('Typology.id')) | |||||
practice_id = db.Column(db.Integer, db.ForeignKey('Practice.id')) | |||||
workflow_id = db.Column(db.Integer, db.ForeignKey('Workflow.id')) | |||||
tools = db.relationship('Tool', foreign_keys=[tool_id], backref='book') | |||||
typology = db.relationship('Typology', foreign_keys=[typology_id], backref='book') | |||||
practices = db.relationship('Practice', foreign_keys=[practice_id], backref='book') | |||||
workflow = db.relationship('Workflow', foreign_keys=[workflow_id], backref='book') | |||||
# table for references | |||||
class Reference(db.Model): | |||||
__tablename__ = 'Reference' | |||||
# table for relationships | |||||
class Relationships(db.Model): | |||||
__tablename__ = 'Relationships' | |||||
id = db.Column(db.Integer, primary_key=True) # primary keys are required by SQLAlchemy | id = db.Column(db.Integer, primary_key=True) # primary keys are required by SQLAlchemy | ||||
created = db.Column(db.DateTime, default=datetime.utcnow) | |||||
zoteroUrl = db.Column(db.Text) | |||||
first_resource_id = db.Column(db.Integer) | |||||
second_resource_id = db.Column(db.Integer) |
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 Practice | |||||
from .models import Resource | |||||
from werkzeug.exceptions import abort | from werkzeug.exceptions import abort | ||||
from . import db | from . import db | ||||
# function to retrieve data about a single practice from the database | # function to retrieve data about a single practice from the database | ||||
def get_practice(practice_id): | def get_practice(practice_id): | ||||
practice = Practice.query.filter_by(id=practice_id).first() | |||||
practice = Resource.query.filter_by(id=practice_id).first() | |||||
if practice is None: | if practice is None: | ||||
abort(404) | abort(404) | ||||
return practice | return practice | ||||
# route for displaying all practices in database | # route for displaying all practices in database | ||||
@practice.route('/practices') | @practice.route('/practices') | ||||
def get_practices(): | def get_practices(): | ||||
practices = Practice.query | |||||
practices = Resource.query.filter_by(type='practice') | |||||
return render_template('practices.html', practices=practices) | return render_template('practices.html', practices=practices) | ||||
# route for displaying a single practice based on the ID in the database | # route for displaying a single practice based on the ID in the database | ||||
if not name: | if not name: | ||||
flash('Name is required!') | flash('Name is required!') | ||||
else: | else: | ||||
practice = Practice.query.get(practice_id) | |||||
practice = Resource.query.get(practice_id) | |||||
practice.name = name | practice.name = name | ||||
practice.description = description | practice.description = description | ||||
db.session.commit() | db.session.commit() | ||||
return redirect(url_for('practice.get_practices')) | return redirect(url_for('practice.get_practices')) | ||||
return render_template('edit.html', practice=practice) | |||||
return render_template('edit.html', resource=practice) | |||||
# route for function to delete a single practice from the edit page | # route for function to delete a single practice from the edit page | ||||
@practice.route('/practices/<int:practice_id>/delete', methods=('POST',)) | @practice.route('/practices/<int:practice_id>/delete', methods=('POST',)) | ||||
@login_required | @login_required | ||||
def delete_practice(practice_id): | def delete_practice(practice_id): | ||||
practice = get_practice(practice_id) | practice = get_practice(practice_id) | ||||
deletion = Practice.query.get(practice_id) | |||||
deletion = Resource.query.get(practice_id) | |||||
db.session.delete(deletion) | db.session.delete(deletion) | ||||
db.session.commit() | db.session.commit() | ||||
flash('Successfully deleted!') | flash('Successfully deleted!') |
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 Publisher | |||||
from .models import Resource | |||||
from werkzeug.exceptions import abort | from werkzeug.exceptions import abort | ||||
from . import db | from . import db | ||||
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 Reference | |||||
from .models import Resource | |||||
from werkzeug.exceptions import abort | from werkzeug.exceptions import abort | ||||
from . import db | from . import db | ||||
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 Sensitivity | |||||
from .models import Resource | |||||
from werkzeug.exceptions import abort | from werkzeug.exceptions import abort | ||||
from . import db | from . import db | ||||
{% extends 'base.html' %} | {% extends 'base.html' %} | ||||
{% block content %} | {% block content %} | ||||
<h1>{% block title %} Edit "{{ tool['name'] }}" {% endblock %}</h1> | |||||
<h1>{% block title %} Edit "{{ resource['name'] }}" {% endblock %}</h1> | |||||
<form method="post"> | <form method="post"> | ||||
<div class="mb-3 mt-3"> | <div class="mb-3 mt-3"> | ||||
<label for="name">Name</label> | <label for="name">Name</label> | ||||
<input type="text" name="name" placeholder="Tool name" | |||||
<input type="text" name="name" placeholder="Name" | |||||
class="form-control" | class="form-control" | ||||
value="{{ request.form['name'] or tool['name'] }}"> | |||||
value="{{ request.form['name'] or resource['name'] }}"> | |||||
</input> | </input> | ||||
</div> | </div> | ||||
<div class="mb-3 mt-3"> | <div class="mb-3 mt-3"> | ||||
<label for="description">Description</label> | <label for="description">Description</label> | ||||
<textarea name="description" placeholder="Tool description" | |||||
class="form-control">{{ request.form['description'] or tool['description'] }}</textarea> | |||||
<textarea name="description" placeholder="Description" | |||||
class="form-control">{{ request.form['description'] or resource['description'] }}</textarea> | |||||
</div> | </div> | ||||
<div class="mb-3 mt-3"> | <div class="mb-3 mt-3"> | ||||
<button type="submit" class="btn btn-primary">Submit</button> | <button type="submit" class="btn btn-primary">Submit</button> | ||||
</form> | </form> | ||||
<hr> | <hr> | ||||
<form action="{{ url_for('tool.delete_tool', tool_id=tool['id']) }}" method="POST"> | |||||
<input type="submit" value="Delete Tool" | |||||
{% if resource['type'] == 'tool' %} | |||||
<form action="{{ url_for('tool.delete_tool', tool_id=resource['id']) }}" method="POST"> | |||||
<input type="submit" value="Delete" | |||||
class="btn btn-danger btn-sm" | class="btn btn-danger btn-sm" | ||||
onclick="return confirm('Are you sure you want to delete this tool?')"> | onclick="return confirm('Are you sure you want to delete this tool?')"> | ||||
</form> | </form> | ||||
{% endif %} | |||||
{% endblock %} | {% endblock %} |
</table> | </table> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
{% if resources %} | |||||
<div class="row"> | <div class="row"> | ||||
<div class="col"> | <div class="col"> | ||||
<h2 class="text-center">Linked practices:</h2> | |||||
<h2 class="text-center">Linked resources:</h2> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="row"> | <div class="row"> | ||||
{% for resource in resources %} | |||||
<div class="col-md-4 col-sm-6 py-3"> | <div class="col-md-4 col-sm-6 py-3"> | ||||
<div class="card text-dark bg-warning mb-3"> | <div class="card text-dark bg-warning mb-3"> | ||||
<div class="card-body"> | <div class="card-body"> | ||||
<a href="{{ url_for('practice.show_practice', practice_id=practice['id']) }}"> | |||||
<h3 class="card-title text-center text-dark">{{ practice['name'] }}</h3> | |||||
<a href="{{ url_for('practice.show_practice', practice_id=resource['id']) }}"> | |||||
<h3 class="card-title text-center text-dark">{{ resource['name'] }}</h3> | |||||
</a> | </a> | ||||
<p class="card-text"> | <p class="card-text"> | ||||
{{ practice['description']|truncate(100) }} | |||||
{{ resource['description']|truncate(100) }} | |||||
</p> | </p> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
{% endfor %} | |||||
</div> | </div> | ||||
{% endif %} | |||||
{% endblock %} | {% endblock %} |
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 Tool | |||||
from .models import Practice | |||||
from .models import Resource | |||||
from .models import Relationships | |||||
from werkzeug.exceptions import abort | from werkzeug.exceptions import abort | ||||
from . import db | from . import db | ||||
# function to retrieve data about a single tool from the database | # function to retrieve data about a single tool from the database | ||||
def get_tool(tool_id): | def get_tool(tool_id): | ||||
tool = Tool.query.filter_by(id=tool_id).first() | |||||
tool = Resource.query.filter_by(id=tool_id).first() | |||||
if tool is None: | if tool is None: | ||||
abort(404) | abort(404) | ||||
return tool | return tool | ||||
# function to retrieve linked practices | |||||
def get_practice(practice_id): | |||||
practice = Practice.query.filter_by(id=practice_id).first() | |||||
return practice | |||||
# 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(): | ||||
tools = Tool.query | |||||
tools = Resource.query.filter_by(type='tool') | |||||
return render_template('tools.html', tools=tools) | return render_template('tools.html', tools=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_tool(tool_id) | ||||
practice = get_practice(tool.practice_id) | |||||
return render_template('tool.html', tool=tool, practice=practice) | |||||
resources = get_linked_resources(tool_id) | |||||
return render_template('tool.html', tool=tool, resources=resources) | |||||
# route for editing a single tool based on the ID in the database | # route for editing a single tool based on the ID in the database | ||||
@tool.route('/tools/<int:tool_id>/edit', methods=('GET', 'POST')) | @tool.route('/tools/<int:tool_id>/edit', methods=('GET', 'POST')) | ||||
if not name: | if not name: | ||||
flash('Name is required!') | flash('Name is required!') | ||||
else: | else: | ||||
tool = Tool.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.projectUrl = project_url | ||||
tool.ingestFormats = ingest | tool.ingestFormats = ingest | ||||
tool.outputFormats = output | tool.outputFormats = output | ||||
tool.status = status | tool.status = status | ||||
tool.practice_id = practice_id | |||||
db.session.commit() | db.session.commit() | ||||
return redirect(url_for('tool.get_tools')) | return redirect(url_for('tool.get_tools')) | ||||
return render_template('edit.html', tool=tool) | |||||
return render_template('edit.html', resource=tool) | |||||
# route for function to delete a single tool from the edit page | # route for function to delete a single tool from the edit page | ||||
@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) | tool = get_tool(tool_id) | ||||
deletion = Tool.query.get(tool_id) | |||||
deletion = Resource.query.get(tool_id) | |||||
db.session.delete(deletion) | db.session.delete(deletion) | ||||
db.session.commit() | db.session.commit() | ||||
flash('Successfully deleted!') | flash('Successfully deleted!') |
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 Typology | |||||
from .models import Resource | |||||
from werkzeug.exceptions import abort | from werkzeug.exceptions import abort | ||||
from . import db | from . import db | ||||
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 Workflow | |||||
from .models import Resource | |||||
from werkzeug.exceptions import abort | from werkzeug.exceptions import abort | ||||
from . import db | from . import db | ||||