from flask import current_app, flash, redirect, render_template, url_for from . import services from flask_login import current_user, login_required from .forms import NewOCRJobForm, NewNLPJobForm from ..models import Job from ..import swarm from .. import db from threading import Thread import os import json @services.route('/ocr', methods=['GET', 'POST']) @login_required def ocr(): new_ocr_job_form = NewOCRJobForm() if new_ocr_job_form.validate_on_submit(): ocr_job = Job(creator=current_user._get_current_object(), description=new_ocr_job_form.description.data, service="ocr", ressources=json.dumps({"n_cores": 2, "mem_mb": 4096}), service_args=json.dumps({"args": ["--keep-intermediates", "--skip-binarisation"], "lang": new_ocr_job_form.language.data, "version": new_ocr_job_form.version.data}), status="pending", title=new_ocr_job_form.title.data) db.session.add(ocr_job) db.session.commit() dir = os.path.join(current_app.config['OPAQUE_STORAGE'], str(ocr_job.user_id), 'jobs', str(ocr_job.id)) try: os.makedirs(dir) except OSError: flash('OSError!') db.session.remove(ocr_job) db.session.commit() else: for file in new_ocr_job_form.files.data: file.save(os.path.join(dir, file.filename)) ''' ' 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. ''' db.session.expunge(ocr_job) thread = Thread(target=swarm.run, args=(ocr_job,)) thread.start() flash('Job created!') return redirect(url_for('services.ocr')) return render_template( 'services/ocr.html.j2', title='Optical Character Recognition', new_ocr_job_form=new_ocr_job_form ) @services.route('/nlp', methods=['GET', 'POST']) @login_required def nlp(): new_nlp_job_form = NewNLPJobForm() if new_nlp_job_form.validate_on_submit(): nlp_job = Job(creator=current_user._get_current_object(), description=new_nlp_job_form.description.data, service="nlp", ressources=json.dumps({"n_cores": 1, "mem_mb": 2048}), service_args=json.dumps({"args": [], "lang": new_nlp_job_form.language.data, "version": new_nlp_job_form.version.data}), status="pending", title=new_nlp_job_form.title.data) db.session.add(nlp_job) db.session.commit() dir = os.path.join(current_app.config['OPAQUE_STORAGE'], str(nlp_job.user_id), 'jobs', str(nlp_job.id)) try: os.makedirs(dir) except OSError: flash('OSError!') db.session.remove(nlp_job) db.session.commit() else: for file in new_nlp_job_form.files.data: file.save(os.path.join(dir, file.filename)) ''' ' 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. ''' db.session.expunge(nlp_job) thread = Thread(target=swarm.run, args=(nlp_job,)) thread.start() flash('Job created!') return redirect(url_for('services.nlp')) return render_template( 'services/nlp.html.j2', title='Natrual Language Processing', new_nlp_job_form=new_nlp_job_form )