From 7b185d929e8f35043b3a7d012c3b5daa9c6c6078 Mon Sep 17 00:00:00 2001 From: Patrick Jentsch <p.jentsch@uni-bielefeld.de> Date: Fri, 19 Jul 2019 13:28:17 +0200 Subject: [PATCH] Move ocr job to extra package. --- app/__init__.py | 7 +++-- app/main/forms.py | 6 ----- app/main/views.py | 36 +++---------------------- app/services/__init__.py | 5 ++++ app/services/forms.py | 6 +++++ app/services/views.py | 43 ++++++++++++++++++++++++++++++ app/templates/main/admin.html.j2 | 12 --------- app/templates/services/ocr.html.j2 | 15 +++++++++++ 8 files changed, 77 insertions(+), 53 deletions(-) create mode 100644 app/services/__init__.py create mode 100644 app/services/forms.py create mode 100644 app/services/views.py create mode 100644 app/templates/services/ocr.html.j2 diff --git a/app/__init__.py b/app/__init__.py index e8bcfa39..c8344428 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -23,13 +23,16 @@ def create_app(config_name): db.init_app(app) login_manager.init_app(app) mail.init_app(app) - if not hasattr(app, 'extensions'): - app.extensions = {} from .auth import auth as auth_blueprint app.register_blueprint(auth_blueprint, url_prefix='/auth') + from .services import services as services_blueprint + app.register_blueprint(services_blueprint, url_prefix='/services') + from .main import main as main_blueprint app.register_blueprint(main_blueprint) + print(app.url_map) + return app diff --git a/app/main/forms.py b/app/main/forms.py index e850cfe1..e69de29b 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -1,6 +0,0 @@ -from flask_wtf import FlaskForm -from wtforms import SubmitField - - -class SwarmForm(FlaskForm): - submit = SubmitField('Submit') diff --git a/app/main/views.py b/app/main/views.py index e7c9ab86..93be680b 100644 --- a/app/main/views.py +++ b/app/main/views.py @@ -1,12 +1,9 @@ -from flask import redirect, render_template, url_for +from flask import render_template from ..models import User from ..tables import AdminUserTable, AdminUserItem from . import main from ..decorators import admin_required -from flask_login import current_user, login_required -from .forms import SwarmForm -from ..import swarm -from threading import Thread +from flask_login import login_required @main.route('/') @@ -29,32 +26,5 @@ def for_admins_only(): users = User.query.order_by(User.username).all() items = [AdminUserItem(u.username, u.email, u.role_id, u.confirmed) for u in users] table = AdminUserTable(items) - - swarm_form = SwarmForm() - if swarm_form.validate_on_submit(): - ''' - ' TODO: Implement a Job class. For now a dictionary representation is - ' enough. - ''' - job = { - 'creator': current_user.id, - 'id': '5fd40cb0cadef3ab5676c4968fc3d748', - 'requested_cpus': 2, - 'requested_memory': 2048, - 'service': 'ocr', - 'service_args': { - 'lang': 'eng' - }, - 'status': 'queued' - } - ''' - ' TODO: Let the scheduler run this job in the background. Using self - ' created threads is just for testing purpose as there is no - ' scheduler available. - ''' - thread = Thread(target=swarm.run, args=(job,)) - thread.start() - return redirect(url_for('main.for_admins_only')) - return render_template('main/admin.html.j2', title='Administration tools', - swarm_form=swarm_form, table=table.__html__()) + table=table.__html__()) diff --git a/app/services/__init__.py b/app/services/__init__.py new file mode 100644 index 00000000..bb1dcf3d --- /dev/null +++ b/app/services/__init__.py @@ -0,0 +1,5 @@ +from flask import Blueprint + +services = Blueprint('services', __name__) + +from . import views diff --git a/app/services/forms.py b/app/services/forms.py new file mode 100644 index 00000000..6bd3b534 --- /dev/null +++ b/app/services/forms.py @@ -0,0 +1,6 @@ +from flask_wtf import FlaskForm +from wtforms import SubmitField + + +class OCRJobForm(FlaskForm): + submit = SubmitField('Submit') diff --git a/app/services/views.py b/app/services/views.py new file mode 100644 index 00000000..7c236d1e --- /dev/null +++ b/app/services/views.py @@ -0,0 +1,43 @@ +from flask import redirect, render_template, url_for +from . import services +from flask_login import current_user, login_required +from .forms import OCRJobForm +from ..import swarm +from threading import Thread + + +@services.route('/ocr', methods=['GET', 'POST']) +@login_required +def ocr(): + ocr_job_form = OCRJobForm() + if ocr_job_form.validate_on_submit(): + ''' + ' TODO: Implement a Job class. For now a dictionary representation is + ' enough. + ''' + job = {'worker': None, + 'creator': current_user.id, + 'id': '5fd40cb0cadef3ab5676c4968fc3d748', + 'requested_cpus': 2, + 'requested_memory': 2048, + 'service': 'ocr', + 'service_args': {'lang': 'eng', + 'version': 'latest' + }, + 'status': 'queued' + } + ''' + ' TODO: Let the scheduler run this job in the background. + ' + ' NOTE: Using self created threads is just for testing purpose as there + ' is no scheduler available. + ''' + thread = Thread(target=swarm.run, args=(job,)) + thread.start() + return redirect(url_for('services.ocr')) + + return render_template( + 'services/ocr.html.j2', + title='Optical Character Recognition', + ocr_job_form=ocr_job_form + ) diff --git a/app/templates/main/admin.html.j2 b/app/templates/main/admin.html.j2 index 56f550c5..1420ca4c 100644 --- a/app/templates/main/admin.html.j2 +++ b/app/templates/main/admin.html.j2 @@ -9,16 +9,4 @@ </div> </div> </div> - -<div class="col s12"> - <div class="card large"> - <div class="card-content"> - <span class="card-title">Swarm</span> - <form method="POST"> - {{ swarm_form.hidden_tag() }} - {{ swarm_form.submit(class='btn') }} - </form> - </div> - </div> -</div> {% endblock %} diff --git a/app/templates/services/ocr.html.j2 b/app/templates/services/ocr.html.j2 new file mode 100644 index 00000000..a7955fef --- /dev/null +++ b/app/templates/services/ocr.html.j2 @@ -0,0 +1,15 @@ +{% extends "base.html.j2" %} + +{% block page_content %} +<div class="col s12"> + <div class="card large"> + <div class="card-content"> + <span class="card-title">OCR</span> + <form method="POST"> + {{ ocr_job_form.hidden_tag() }} + {{ ocr_job_form.submit(class='btn') }} + </form> + </div> + </div> +</div> +{% endblock %} -- GitLab