From 6bc1ef94dc022defce448fb2c5e4a6a46bedbc6a Mon Sep 17 00:00:00 2001
From: Patrick Jentsch <p.jentsch@uni-bielefeld.de>
Date: Thu, 15 Aug 2019 12:02:50 +0200
Subject: [PATCH] Add api blueprint.

---
 app/__init__.py     |  3 ++
 app/api/__init__.py |  5 ++++
 app/api/views.py    | 67 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 75 insertions(+)
 create mode 100644 app/api/__init__.py
 create mode 100644 app/api/views.py

diff --git a/app/__init__.py b/app/__init__.py
index 4432a4e8..3afd43e2 100644
--- a/app/__init__.py
+++ b/app/__init__.py
@@ -24,6 +24,9 @@ def create_app(config_name):
     scheduler.init_app(app)
     scheduler.start()
 
+    from .api import api as api_blueprint
+    app.register_blueprint(api_blueprint, url_prefix='/api')
+
     from .auth import auth as auth_blueprint
     app.register_blueprint(auth_blueprint, url_prefix='/auth')
 
diff --git a/app/api/__init__.py b/app/api/__init__.py
new file mode 100644
index 00000000..27a63156
--- /dev/null
+++ b/app/api/__init__.py
@@ -0,0 +1,5 @@
+from flask import Blueprint
+
+api = Blueprint('api', __name__)
+
+from . import views
diff --git a/app/api/views.py b/app/api/views.py
new file mode 100644
index 00000000..ce3bc875
--- /dev/null
+++ b/app/api/views.py
@@ -0,0 +1,67 @@
+from flask import jsonify
+from flask_login import current_user, login_required
+from . import api
+
+
+@api.route('/v1.0/corpora')
+@login_required
+def corpora():
+    corpora = []
+    for corpus in current_user.corpora.all():
+        corpora.append({'id': corpus.id,
+                        'creation_date': corpus.creation_date.timestamp(),
+                        'description': corpus.description,
+                        'title': corpus.title})
+    return jsonify(corpora)
+
+
+@api.route('/v1.0/corpora/<int:corpus_id>')
+@login_required
+def corpus(corpus_id):
+    corpus = current_user.corpora.filter_by(id=corpus_id).first()
+    if not corpus:
+        ''' This should return 404 '''
+        return jsonify(None)
+    return jsonify({'id': corpus.id,
+                    'creation_date': corpus.creation_date,
+                    'description': corpus.description,
+                    'title': corpus.title})
+
+
+@api.route('/v1.0/jobs')
+@login_required
+def jobs():
+    jobs = []
+    for job in current_user.jobs.all():
+        jobs.append({'id': job.id,
+                     'creation_date': job.creation_date.timestamp(),
+                     'description': job.description,
+                     'end_date': job.end_date.timestamp() if job.end_date else None,
+                     'mem_mb': job.mem_mb,
+                     'n_cores': job.n_cores,
+                     'service': job.service,
+                     'service_args': job.service_args,
+                     'service_version': job.service_version,
+                     'status': job.status,
+                     'title': job.title})
+    return jsonify(jobs)
+
+
+@api.route('/v1.0/jobs/<int:job_id>')
+@login_required
+def job(job_id):
+    job = current_user.jobs.filter_by(id=job_id).first()
+    if not job:
+        ''' This should return 404 '''
+        return jsonify(None)
+    return jsonify({'id': job.id,
+                    'creation_date': job.creation_date.timestamp(),
+                    'description': job.description,
+                    'end_date': job.end_date.timestamp() if job.end_date else None,
+                    'mem_mb': job.mem_mb,
+                    'n_cores': job.n_cores,
+                    'service': job.service,
+                    'service_args': job.service_args,
+                    'service_version': job.service_version,
+                    'status': job.status,
+                    'title': job.title})
-- 
GitLab