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