mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-11-03 20:02:47 +00:00 
			
		
		
		
	integrate nopaque repo
This commit is contained in:
		@@ -1,5 +0,0 @@
 | 
			
		||||
from flask import Blueprint
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
services = Blueprint('services', __name__)
 | 
			
		||||
from . import views  # noqa
 | 
			
		||||
@@ -1,83 +0,0 @@
 | 
			
		||||
from flask import (abort, current_app, flash, make_response, render_template,
 | 
			
		||||
                   url_for)
 | 
			
		||||
from flask_login import current_user, login_required
 | 
			
		||||
from werkzeug.utils import secure_filename
 | 
			
		||||
from . import services
 | 
			
		||||
from .. import db
 | 
			
		||||
from ..jobs.forms import AddFileSetupJobForm, AddNLPJobForm, AddOCRJobForm
 | 
			
		||||
from ..models import Job, JobInput
 | 
			
		||||
import json
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
SERVICES = {'corpus_analysis': {'name': 'Corpus analysis'},
 | 
			
		||||
            'file-setup': {'name': 'File setup',
 | 
			
		||||
                           'resources': {'mem_mb': 4096, 'n_cores': 4},
 | 
			
		||||
                           'add_job_form': AddFileSetupJobForm},
 | 
			
		||||
            'nlp': {'name': 'Natural Language Processing',
 | 
			
		||||
                    'resources': {'mem_mb': 4096, 'n_cores': 2},
 | 
			
		||||
                    'add_job_form': AddNLPJobForm},
 | 
			
		||||
            'ocr': {'name': 'Optical Character Recognition',
 | 
			
		||||
                    'resources': {'mem_mb': 8192, 'n_cores': 4},
 | 
			
		||||
                    'add_job_form': AddOCRJobForm}}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@services.route('/<service>', methods=['GET', 'POST'])
 | 
			
		||||
@login_required
 | 
			
		||||
def service(service):
 | 
			
		||||
    if service not in SERVICES:
 | 
			
		||||
        abort(404)
 | 
			
		||||
    if service == 'corpus_analysis':
 | 
			
		||||
        return render_template('services/{}.html.j2'.format(service),
 | 
			
		||||
                               title=SERVICES[service]['name'])
 | 
			
		||||
    add_job_form = SERVICES[service]['add_job_form'](prefix='add-job-form')
 | 
			
		||||
    if add_job_form.is_submitted():
 | 
			
		||||
        if not add_job_form.validate():
 | 
			
		||||
            return make_response(add_job_form.errors, 400)
 | 
			
		||||
        service_args = []
 | 
			
		||||
        if service == 'nlp':
 | 
			
		||||
            service_args.append('-l {}'.format(add_job_form.language.data))
 | 
			
		||||
            if add_job_form.check_encoding.data:
 | 
			
		||||
                service_args.append('--check-encoding')
 | 
			
		||||
        if service == 'ocr':
 | 
			
		||||
            service_args.append('-l {}'.format(add_job_form.language.data))
 | 
			
		||||
            if add_job_form.binarization.data:
 | 
			
		||||
                service_args.append('--binarize')
 | 
			
		||||
        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)
 | 
			
		||||
        if job.service != 'corpus_analysis':
 | 
			
		||||
            job.create_secure_filename()
 | 
			
		||||
        db.session.add(job)
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
        relative_dir = os.path.join(str(job.user_id), 'jobs', str(job.id))
 | 
			
		||||
        absolut_dir = os.path.join(current_app.config['NOPAQUE_STORAGE'],
 | 
			
		||||
                                   relative_dir)
 | 
			
		||||
        try:
 | 
			
		||||
            os.makedirs(absolut_dir)
 | 
			
		||||
        except OSError:
 | 
			
		||||
            job.delete()
 | 
			
		||||
            flash('Internal Server Error', 'job')
 | 
			
		||||
            return make_response({'redirect_url': url_for('services.service',
 | 
			
		||||
                                                          service=service)},
 | 
			
		||||
                                 500)
 | 
			
		||||
        else:
 | 
			
		||||
            for file in add_job_form.files.data:
 | 
			
		||||
                filename = secure_filename(file.filename)
 | 
			
		||||
                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()
 | 
			
		||||
            url = url_for('jobs.job', job_id=job.id)
 | 
			
		||||
            flash('[<a href="{}">{}</a>] added'.format(url, job.title), 'job')
 | 
			
		||||
            return make_response(
 | 
			
		||||
                {'redirect_url': url_for('jobs.job', job_id=job.id)}, 201)
 | 
			
		||||
    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