diff --git a/app/services/forms.py b/app/services/forms.py index f2d473db..1c1aac02 100644 --- a/app/services/forms.py +++ b/app/services/forms.py @@ -24,7 +24,7 @@ class NewOCRJobForm(FlaskForm): ], validators=[DataRequired()] ) - submit = SubmitField('Create OCR job') + submit = SubmitField('Submit') title = StringField( 'Title', validators=[DataRequired(), Length(1, 32)] @@ -64,7 +64,7 @@ class NewNLPJobForm(FlaskForm): ], validators=[DataRequired()] ) - submit = SubmitField('Create OCR job') + submit = SubmitField('Submit') title = StringField( 'Title', validators=[DataRequired(), Length(1, 32)] diff --git a/app/services/views.py b/app/services/views.py index 74a40915..c580bb32 100644 --- a/app/services/views.py +++ b/app/services/views.py @@ -2,7 +2,7 @@ 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 +from .forms import NewOCRJobForm, NewNLPJobForm from ..import swarm from threading import Thread import hashlib @@ -57,3 +57,53 @@ def ocr(): 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 + )