ソースを参照

added routes for new modules for database changes

joel
Simon Bowie 2年前
コミット
51bad9749a
8個のファイルの変更393行の追加39行の削除
  1. +23
    -3
      web/app/__init__.py
  2. +67
    -0
      web/app/publisher.py
  3. +67
    -0
      web/app/reference.py
  4. +67
    -0
      web/app/sensitivity.py
  5. +22
    -7
      web/app/templates/base.html
  6. +13
    -29
      web/app/templates/tool.html
  7. +67
    -0
      web/app/typology.py
  8. +67
    -0
      web/app/workflow.py

+ 23
- 3
web/app/__init__.py ファイルの表示

@@ -56,13 +56,33 @@ def create_app():
from .tool import tool as tool_blueprint
app.register_blueprint(tool_blueprint)

# blueprint for practice parts of app
from .practice import practice as practice_blueprint
app.register_blueprint(practice_blueprint)

# blueprint for sensitivity parts of app
from .sensitivity import sensitivity as sensitivity_blueprint
app.register_blueprint(sensitivity_blueprint)

# blueprint for typology parts of app
from .typology import typology as typology_blueprint
app.register_blueprint(typology_blueprint)

# blueprint for workflow parts of app
from .workflow import workflow as workflow_blueprint
app.register_blueprint(workflow_blueprint)

# blueprint for publisher parts of app
from .publisher import publisher as publisher_blueprint
app.register_blueprint(publisher_blueprint)

# blueprint for book parts of app
from .book import book as book_blueprint
app.register_blueprint(book_blueprint)

# blueprint for practice parts of app
from .practice import practice as practice_blueprint
app.register_blueprint(practice_blueprint)
# blueprint for reference parts of app
from .reference import reference as reference_blueprint
app.register_blueprint(reference_blueprint)

# blueprint for create parts of app
from .create import create as create_blueprint

+ 67
- 0
web/app/publisher.py ファイルの表示

@@ -0,0 +1,67 @@
# @name: publisher.py
# @version: 0.1
# @creation_date: 2022-02-08
# @license: The MIT License <https://opensource.org/licenses/MIT>
# @author: Simon Bowie <ad7588@coventry.ac.uk>
# @purpose: publisher route for publisher-related functions and pages
# @acknowledgements:
# https://www.digitalocean.com/community/tutorials/how-to-make-a-web-application-using-flask-in-python-3

from flask import Blueprint, render_template, request, flash, redirect, url_for
from flask_login import login_required, current_user
from .models import Publisher
from werkzeug.exceptions import abort
from . import db

publisher = Blueprint('publisher', __name__)

# function to retrieve data about a single publisher from the database
def get_publisher(publisher_id):
publisher = Publisher.query.filter_by(id=publisher_id).first()
if publisher is None:
abort(404)
return publisher

# route for displaying all publishers in database
@publisher.route('/publishers')
def get_publishers():
publishers = Publisher.query
return render_template('publishers.html', publishers=publishers)

# route for displaying a single publisher based on the ID in the database
@publisher.route('/publishers/<int:publisher_id>')
def show_publisher(publisher_id):
publisher = get_publisher(publisher_id)
return render_template('publisher.html', publisher=publisher)

# route for editing a single publisher based on the ID in the database
@publisher.route('/publishers/<int:publisher_id>/edit', methods=('GET', 'POST'))
@login_required
def edit_publisher(publisher_id):
publisher = get_publisher(publisher_id)

if request.method == 'POST':
name = request.form['name']
description = request.form['description']

if not name:
flash('Name is required!')
else:
publisher = Publisher.query.get(publisher_id)
publisher.name = name
publisher.description = description
db.session.commit()
return redirect(url_for('publisher.get_publishers'))

return render_template('edit.html', publisher=publisher)

# route for function to delete a single publisher from the edit page
@publisher.route('/publishers/<int:publisher_id>/delete', methods=('POST',))
@login_required
def delete_publisher(publisher_id):
publisher = get_publisher(publisher_id)
deletion = Publisher.query.get(publisher_id)
db.session.delete(deletion)
db.session.commit()
flash('Successfully deleted!')
return redirect(url_for('publisher.get_publishers'))

+ 67
- 0
web/app/reference.py ファイルの表示

@@ -0,0 +1,67 @@
# @name: reference.py
# @version: 0.1
# @creation_date: 2022-02-08
# @license: The MIT License <https://opensource.org/licenses/MIT>
# @author: Simon Bowie <ad7588@coventry.ac.uk>
# @purpose: reference route for reference-related functions and pages
# @acknowledgements:
# https://www.digitalocean.com/community/tutorials/how-to-make-a-web-application-using-flask-in-python-3

from flask import Blueprint, render_template, request, flash, redirect, url_for
from flask_login import login_required, current_user
from .models import Reference
from werkzeug.exceptions import abort
from . import db

reference = Blueprint('reference', __name__)

# function to retrieve data about a single reference from the database
def get_reference(reference_id):
reference = Reference.query.filter_by(id=reference_id).first()
if reference is None:
abort(404)
return reference

# route for displaying all references in database
@reference.route('/references')
def get_references():
references = Reference.query
return render_template('references.html', references=references)

# route for displaying a single reference based on the ID in the database
@reference.route('/references/<int:reference_id>')
def show_reference(reference_id):
reference = get_reference(reference_id)
return render_template('reference.html', reference=reference)

# route for editing a single reference based on the ID in the database
@reference.route('/references/<int:reference_id>/edit', methods=('GET', 'POST'))
@login_required
def edit_reference(reference_id):
reference = get_reference(reference_id)

if request.method == 'POST':
name = request.form['name']
description = request.form['description']

if not name:
flash('Name is required!')
else:
reference = Reference.query.get(reference_id)
reference.name = name
reference.description = description
db.session.commit()
return redirect(url_for('reference.get_references'))

return render_template('edit.html', reference=reference)

# route for function to delete a single reference from the edit page
@reference.route('/references/<int:reference_id>/delete', methods=('POST',))
@login_required
def delete_reference(reference_id):
reference = get_reference(reference_id)
deletion = Reference.query.get(reference_id)
db.session.delete(deletion)
db.session.commit()
flash('Successfully deleted!')
return redirect(url_for('reference.get_references'))

+ 67
- 0
web/app/sensitivity.py ファイルの表示

@@ -0,0 +1,67 @@
# @name: sensitivity.py
# @version: 0.1
# @creation_date: 2022-02-08
# @license: The MIT License <https://opensource.org/licenses/MIT>
# @author: Simon Bowie <ad7588@coventry.ac.uk>
# @purpose: sensitivity route for sensitivity-related functions and pages
# @acknowledgements:
# https://www.digitalocean.com/community/tutorials/how-to-make-a-web-application-using-flask-in-python-3

from flask import Blueprint, render_template, request, flash, redirect, url_for
from flask_login import login_required, current_user
from .models import Sensitivity
from werkzeug.exceptions import abort
from . import db

sensitivity = Blueprint('sensitivity', __name__)

# function to retrieve data about a single sensitivity from the database
def get_sensitivity(sensitivity_id):
sensitivity = Sensitivity.query.filter_by(id=sensitivity_id).first()
if sensitivity is None:
abort(404)
return sensitivity

# route for displaying all sensitivities in database
@sensitivity.route('/sensitivities')
def get_sensitivities():
sensitivities = Sensitivity.query
return render_template('sensitivities.html', sensitivities=sensitivities)

# route for displaying a single sensitivity based on the ID in the database
@sensitivity.route('/sensitivities/<int:sensitivity_id>')
def show_sensitivity(sensitivity_id):
sensitivity = get_sensitivity(sensitivity_id)
return render_template('sensitivity.html', sensitivity=sensitivity)

# route for editing a single sensitivity based on the ID in the database
@sensitivity.route('/sensitivities/<int:sensitivity_id>/edit', methods=('GET', 'POST'))
@login_required
def edit_sensitivity(sensitivity_id):
sensitivity = get_sensitivity(sensitivity_id)

if request.method == 'POST':
name = request.form['name']
description = request.form['description']

if not name:
flash('Name is required!')
else:
sensitivity = Sensitivity.query.get(sensitivity_id)
sensitivity.name = name
sensitivity.description = description
db.session.commit()
return redirect(url_for('sensitivity.get_sensitivities'))

return render_template('edit.html', sensitivity=sensitivity)

# route for function to delete a single sensitivity from the edit page
@sensitivity.route('/sensitivities/<int:sensitivity_id>/delete', methods=('POST',))
@login_required
def delete_sensitivity(sensitivity_id):
sensitivity = get_sensitivity(sensitivity_id)
deletion = Sensitivity.query.get(sensitivity_id)
db.session.delete(deletion)
db.session.commit()
flash('Successfully deleted!')
return redirect(url_for('sensitivity.get_sensitivities'))

+ 22
- 7
web/app/templates/base.html ファイルの表示

@@ -39,11 +39,6 @@
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav">
<li class="nav-item">
<a href="{{ url_for('book.get_books') }}" class="nav-link">
Books
</a>
</li>
<li class="nav-item">
<a href="{{ url_for('tool.get_tools') }}" class="nav-link">
Tools
@@ -55,15 +50,35 @@
</a>
</li>
<li class="nav-item">
<a href="{{ url_for('main.index') }}" class="nav-link">
<a href="{{ url_for('sensitivity.get_sensitivities') }}" class="nav-link">
Sensitivities
</a>
</li>
<li class="nav-item">
<a href="{{ url_for('main.index') }}" class="nav-link">
<a href="{{ url_for('typology.get_typologies') }}" class="nav-link">
Typologies
</a>
</li>
<li class="nav-item">
<a href="{{ url_for('workflow.get_workflows') }}" class="nav-link">
Workflows
</a>
</li>
<li class="nav-item">
<a href="{{ url_for('publisher.get_publishers') }}" class="nav-link">
Publishers
</a>
</li>
<li class="nav-item">
<a href="{{ url_for('book.get_books') }}" class="nav-link">
Books
</a>
</li>
<li class="nav-item">
<a href="{{ url_for('reference.get_references') }}" class="nav-link">
References
</a>
</li>
{% if current_user.is_authenticated %}
<li class="nav-item">
<a href="{{ url_for('create.create_resource') }}" class="nav-link">

+ 13
- 29
web/app/templates/tool.html ファイルの表示

@@ -38,7 +38,7 @@
Project page:
</th>
<td>
{{ tool['project_url'] }}
{{ tool['projectUrl'] }}
</td>
</tr>
<tr>
@@ -46,23 +46,15 @@
Code repository:
</th>
<td>
{{ tool['repository_url'] }}
{{ tool['repositoryUrl'] }}
</td>
</tr>
<tr>
<th>
Stand-alone or platform?:
Expertise required to use:
</th>
<td>
{{ tool['platform_status'] }}
</td>
</tr>
<tr>
<th>
Expertise required:
</th>
<td>
{{ tool['expertise'] }}
{{ tool['expertiseToUse'] }}
</td>
</tr>
<tr>
@@ -70,47 +62,39 @@
Expertise required to self-host:
</th>
<td>
{{ tool['self_host_expertise'] }}
{{ tool['expertiseToHost'] }}
</td>
</tr>
<tr>
<th>
Import / ingest:
</th>
<td>
{{ tool['ingest'] }}
</td>
</tr>
<tr>
<th>
Output formats:
Technical dependencies:
</th>
<td>
{{ tool['output'] }}
{{ tool['dependencies'] }}
</td>
</tr>
<tr>
<th>
SAAS?:
Import / ingest formats:
</th>
<td>
{{ tool['saas'] }}
{{ tool['ingestFormats'] }}
</td>
</tr>
<tr>
<th>
Community-hosted examples:
Output formats:
</th>
<td>
{{ tool['outputFormats'] }}
</td>
</tr>
<tr>
<th>
Technical dependencies:
Platform status:
</th>
<td>
{{ tool['dependencies'] }}
{{ tool['status'] }}
</td>
</tr>
</tbody>

+ 67
- 0
web/app/typology.py ファイルの表示

@@ -0,0 +1,67 @@
# @name: typology.py
# @version: 0.1
# @creation_date: 2022-02-08
# @license: The MIT License <https://opensource.org/licenses/MIT>
# @author: Simon Bowie <ad7588@coventry.ac.uk>
# @purpose: typology route for typology-related functions and pages
# @acknowledgements:
# https://www.digitalocean.com/community/tutorials/how-to-make-a-web-application-using-flask-in-python-3

from flask import Blueprint, render_template, request, flash, redirect, url_for
from flask_login import login_required, current_user
from .models import Typology
from werkzeug.exceptions import abort
from . import db

typology = Blueprint('typology', __name__)

# function to retrieve data about a single typology from the database
def get_typology(typology_id):
typology = Typology.query.filter_by(id=typology_id).first()
if typology is None:
abort(404)
return typology

# route for displaying all typologies in database
@typology.route('/typologies')
def get_typologies():
typologies = Typology.query
return render_template('typologies.html', typologies=typologies)

# route for displaying a single typology based on the ID in the database
@typology.route('/typologies/<int:typology_id>')
def show_typology(typology_id):
typology = get_typology(typology_id)
return render_template('typology.html', typology=typology)

# route for editing a single typology based on the ID in the database
@typology.route('/typologies/<int:typology_id>/edit', methods=('GET', 'POST'))
@login_required
def edit_typology(typology_id):
typology = get_typology(typology_id)

if request.method == 'POST':
name = request.form['name']
description = request.form['description']

if not name:
flash('Name is required!')
else:
typology = Typology.query.get(typology_id)
typology.name = name
typology.description = description
db.session.commit()
return redirect(url_for('typology.get_typologies'))

return render_template('edit.html', typology=typology)

# route for function to delete a single typology from the edit page
@typology.route('/typologies/<int:typology_id>/delete', methods=('POST',))
@login_required
def delete_typology(typology_id):
typology = get_typology(typology_id)
deletion = Typology.query.get(typology_id)
db.session.delete(deletion)
db.session.commit()
flash('Successfully deleted!')
return redirect(url_for('typology.get_typologies'))

+ 67
- 0
web/app/workflow.py ファイルの表示

@@ -0,0 +1,67 @@
# @name: workflow.py
# @version: 0.1
# @creation_date: 2022-02-08
# @license: The MIT License <https://opensource.org/licenses/MIT>
# @author: Simon Bowie <ad7588@coventry.ac.uk>
# @purpose: workflow route for workflow-related functions and pages
# @acknowledgements:
# https://www.digitalocean.com/community/tutorials/how-to-make-a-web-application-using-flask-in-python-3

from flask import Blueprint, render_template, request, flash, redirect, url_for
from flask_login import login_required, current_user
from .models import Workflow
from werkzeug.exceptions import abort
from . import db

workflow = Blueprint('workflow', __name__)

# function to retrieve data about a single workflow from the database
def get_workflow(workflow_id):
workflow = Workflow.query.filter_by(id=workflow_id).first()
if workflow is None:
abort(404)
return workflow

# route for displaying all workflows in database
@workflow.route('/workflows')
def get_workflows():
workflows = Workflow.query
return render_template('workflows.html', workflows=workflows)

# route for displaying a single workflow based on the ID in the database
@workflow.route('/workflows/<int:workflow_id>')
def show_workflow(workflow_id):
workflow = get_workflow(workflow_id)
return render_template('workflow.html', workflow=workflow)

# route for editing a single workflow based on the ID in the database
@workflow.route('/workflows/<int:workflow_id>/edit', methods=('GET', 'POST'))
@login_required
def edit_workflow(workflow_id):
workflow = get_workflow(workflow_id)

if request.method == 'POST':
name = request.form['name']
description = request.form['description']

if not name:
flash('Name is required!')
else:
workflow = Workflow.query.get(workflow_id)
workflow.name = name
workflow.description = description
db.session.commit()
return redirect(url_for('workflow.get_workflows'))

return render_template('edit.html', workflow=workflow)

# route for function to delete a single workflow from the edit page
@workflow.route('/workflows/<int:workflow_id>/delete', methods=('POST',))
@login_required
def delete_workflow(workflow_id):
workflow = get_workflow(workflow_id)
deletion = Workflow.query.get(workflow_id)
db.session.delete(deletion)
db.session.commit()
flash('Successfully deleted!')
return redirect(url_for('workflow.get_workflows'))

読み込み中…
キャンセル
保存