mirror of
https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
synced 2025-06-12 09:00:40 +00:00
Some renaming and moving
This commit is contained in:
@ -1,67 +0,0 @@
|
||||
from flask_wtf import FlaskForm
|
||||
from wtforms import (BooleanField, MultipleFileField, SelectField, StringField,
|
||||
SubmitField, ValidationError)
|
||||
from wtforms.validators import DataRequired, Length
|
||||
|
||||
|
||||
class NewNLPJobForm(FlaskForm):
|
||||
description = StringField('Description',
|
||||
validators=[DataRequired(), Length(1, 255)])
|
||||
files = MultipleFileField('Files', validators=[DataRequired()])
|
||||
language = SelectField('Language',
|
||||
choices=[('', 'Choose your option'),
|
||||
('nl', 'Dutch'),
|
||||
('en', 'English'),
|
||||
('fr', 'French'),
|
||||
('de', 'German'),
|
||||
('el', 'Greek'),
|
||||
('it', 'Italian'),
|
||||
('pt', 'Portuguese'),
|
||||
('es', 'Spanish')],
|
||||
validators=[DataRequired()])
|
||||
submit = SubmitField()
|
||||
title = StringField('Title', validators=[DataRequired(), Length(1, 32)])
|
||||
version = SelectField('Version',
|
||||
choices=[('2.1.0', 'Latest (2.1.0)'),
|
||||
('2.1.0', '2.1.0')],
|
||||
validators=[DataRequired()])
|
||||
|
||||
def validate_files(form, field):
|
||||
for file in field.data:
|
||||
if not file.filename.lower().endswith('.txt'):
|
||||
raise ValidationError(
|
||||
'File does not have an approved extension: .txt'
|
||||
)
|
||||
|
||||
|
||||
class NewOCRJobForm(FlaskForm):
|
||||
binarization = BooleanField('Binarazation')
|
||||
description = StringField('Description',
|
||||
validators=[DataRequired(), Length(1, 255)])
|
||||
files = MultipleFileField('Files', validators=[DataRequired()])
|
||||
language = SelectField('Language',
|
||||
choices=[('', 'Choose your option'),
|
||||
('eng', 'English'),
|
||||
('enm', 'English, Middle (1100-1500)'),
|
||||
('fra', 'French'),
|
||||
('frm', 'French, Middle (ca. 1400-1600)'),
|
||||
('deu', 'German'),
|
||||
('frk', 'German Fraktur'),
|
||||
('ita', 'Italian'),
|
||||
('por', 'Portuguese'),
|
||||
('spa', 'Spanish; Castilian')],
|
||||
validators=[DataRequired()])
|
||||
split = BooleanField('Split')
|
||||
submit = SubmitField()
|
||||
title = StringField('Title', validators=[DataRequired(), Length(1, 32)])
|
||||
version = SelectField('Version',
|
||||
choices=[('latest', 'Latest')],
|
||||
validators=[DataRequired()])
|
||||
|
||||
def validate_files(form, field):
|
||||
for file in field.data:
|
||||
if not file.filename.lower().endswith(('.pdf', '.tif', '.tiff')):
|
||||
raise ValidationError(
|
||||
'File does not have an approved extension: '
|
||||
'.pdf | .tif | .tiff'
|
||||
)
|
@ -1,72 +1,65 @@
|
||||
from app import db
|
||||
from app.jobs.forms import AddNLPJobForm, AddOCRJobForm
|
||||
from app.models import Job, JobInput
|
||||
from flask import abort, current_app, flash, redirect, render_template, url_for
|
||||
from flask_login import current_user, login_required
|
||||
from werkzeug.utils import secure_filename
|
||||
from . import services
|
||||
from .forms import NewNLPJobForm, NewOCRJobForm
|
||||
from .. import db
|
||||
from ..models import Job, JobInput
|
||||
import json
|
||||
import os
|
||||
|
||||
|
||||
SERVICES = {'nlp': {'name': 'Natural Language Processing',
|
||||
'resources': {'mem_mb': 4096, 'n_cores': 2},
|
||||
'new_job_form': NewNLPJobForm},
|
||||
'add_job_form': AddNLPJobForm},
|
||||
'ocr': {'name': 'Optical Character Recognition',
|
||||
'resources': {'mem_mb': 8192, 'n_cores': 4},
|
||||
'new_job_form': NewOCRJobForm}}
|
||||
'add_job_form': AddOCRJobForm}}
|
||||
|
||||
|
||||
@services.route('/<service_handle>', methods=['GET', 'POST'])
|
||||
@services.route('/<service>', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def service(service_handle):
|
||||
if service_handle not in SERVICES:
|
||||
def service(service):
|
||||
if service not in SERVICES:
|
||||
abort(404)
|
||||
new_job_form = SERVICES[service_handle]['new_job_form']()
|
||||
if new_job_form.validate_on_submit():
|
||||
_service_args = ['-l {}'.format(new_job_form.language.data)]
|
||||
if service_handle == 'ocr':
|
||||
if not new_job_form.binarization.data:
|
||||
_service_args.append('--skip-binarisation')
|
||||
job = Job(
|
||||
creator=current_user,
|
||||
description=new_job_form.description.data,
|
||||
mem_mb=SERVICES[service_handle]['resources']['mem_mb'],
|
||||
n_cores=SERVICES[service_handle]['resources']['n_cores'],
|
||||
service=service_handle,
|
||||
service_args=json.dumps(_service_args),
|
||||
service_version=new_job_form.version.data,
|
||||
status='preparing',
|
||||
title=new_job_form.title.data
|
||||
)
|
||||
add_job_form = SERVICES[service]['add_job_form']()
|
||||
if add_job_form.validate_on_submit():
|
||||
service_args = []
|
||||
if service == 'nlp':
|
||||
service_args.append('-l {}'.format(add_job_form.language.data))
|
||||
if service == 'ocr':
|
||||
service_args.append('-l {}'.format(add_job_form.language.data))
|
||||
if not add_job_form.binarization.data:
|
||||
service_args.append('--skip-binarisation')
|
||||
job = Job(creator=current_user,
|
||||
description=add_job_form.description.data,
|
||||
mem_mb=SERVICES[service]['resources']['mem_mb'],
|
||||
n_cores=SERVICES[service]['resources']['n_cores'],
|
||||
service=service, service_args=json.dumps(service_args),
|
||||
service_version=add_job_form.version.data,
|
||||
status='preparing', title=add_job_form.title.data)
|
||||
db.session.add(job)
|
||||
db.session.commit()
|
||||
dir = os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'],
|
||||
str(job.user_id),
|
||||
'jobs',
|
||||
str(job.id))
|
||||
relative_dir = os.path.join(str(job.user_id), 'jobs', str(job.id))
|
||||
absolut_dir = os.path.join(
|
||||
current_app.config['OPAQUE_STORAGE_DIRECTORY'], relative_dir)
|
||||
try:
|
||||
os.makedirs(dir)
|
||||
os.makedirs(absolut_dir)
|
||||
except OSError:
|
||||
flash('OSError!')
|
||||
db.session.remove(job)
|
||||
flash('[OSError] Could not add job!')
|
||||
db.session.delete(job)
|
||||
db.session.commit()
|
||||
else:
|
||||
for file in new_job_form.files.data:
|
||||
for file in add_job_form.files.data:
|
||||
filename = secure_filename(file.filename)
|
||||
file.save(os.path.join(dir, filename))
|
||||
job_input = JobInput(
|
||||
dir=os.path.join(str(job.user_id), 'jobs', str(job.id)),
|
||||
filename=filename,
|
||||
job=job
|
||||
)
|
||||
file.save(os.path.join(absolut_dir, filename))
|
||||
job_input = JobInput(dir=relative_dir, filename=filename,
|
||||
job=job)
|
||||
db.session.add(job_input)
|
||||
job.status = 'submitted'
|
||||
db.session.commit()
|
||||
flash('Job created!')
|
||||
return redirect(
|
||||
url_for('services.service', service_handle=service_handle)
|
||||
)
|
||||
return render_template('services/{}.html.j2'.format(service_handle),
|
||||
title=SERVICES[service_handle]['name'],
|
||||
new_job_form=new_job_form)
|
||||
flash('Job added!')
|
||||
return redirect(url_for('jobs.job', job_id=job.id))
|
||||
return render_template('services/{}.html.j2'.format(service),
|
||||
title=SERVICES[service]['name'],
|
||||
add_job_form=add_job_form)
|
||||
|
Reference in New Issue
Block a user