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