from datetime import datetime 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 ..import swarm from threading import Thread import hashlib import os @services.route('/ocr', methods=['GET', 'POST']) @login_required def ocr(): new_ocr_job_form = NewOCRJobForm() if new_ocr_job_form.validate_on_submit(): app = current_app._get_current_object() id = hashlib.md5( (current_user.username + '_' + datetime.now().isoformat()).encode() ).hexdigest() ''' ' TODO: Implement a Job class. For now a dictionary representation ' is enough. ''' job = {'creator': current_user.id, 'id': id, 'requested_cpus': 2, 'requested_memory': 2048, 'service': 'ocr', 'service_args': {'lang': new_ocr_job_form.language.data, 'version': new_ocr_job_form.version.data }, 'status': 'queued' } dir = os.path.join(app.config['OPAQUE_STORAGE'], 'jobs', id) try: os.makedirs(dir) except OSError: flash('OSError!') 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. ''' thread = Thread(target=swarm.run, args=(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(): app = current_app._get_current_object() id = hashlib.md5( (current_user.username + '_' + datetime.now().isoformat()).encode() ).hexdigest() ''' ' TODO: Implement a Job class. For now a dictionary representation ' is enough. ''' job = {'creator': current_user.id, 'id': id, 'requested_cpus': 2, 'requested_memory': 2048, 'service': 'nlp', 'service_args': {'lang': new_nlp_job_form.language.data, 'version': new_nlp_job_form.version.data }, 'status': 'queued' } dir = os.path.join(app.config['OPAQUE_STORAGE'], 'jobs', id) try: os.makedirs(dir) except OSError: flash('OSError!') 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. ''' thread = Thread(target=swarm.run, args=(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 )