mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-10-31 02:32:45 +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