Skip to content
Snippets Groups Projects
Commit 716ebdfa authored by Patrick Jentsch's avatar Patrick Jentsch
Browse files

Add create corpus form to dashboard.

parent a5b7ccae
No related branches found
No related tags found
No related merge requests found
from flask import current_app, flash, redirect, render_template, request, url_for
from datetime import datetime
from flask import current_app, flash, redirect, render_template, url_for
from flask_login import current_user, login_required
from ..models import User
from ..tables import AdminUserTable, AdminUserItem
from . import main
from .forms import CreateCorpusForm
from ..decorators import admin_required
import hashlib
import os
......@@ -15,25 +17,23 @@ def dashboard():
if create_corpus_form.validate_on_submit():
app = current_app._get_current_object()
files = request.FILES
print(files)
corpus = {
'description': create_corpus_form.description.data,
'files': [],
'owner': current_user.id,
'title': create_corpus_form.title.data
}
corpus_dir = os.path.join(
app.config['OPAQUE_FILES'],
'corpora',
corpus['title']
)
id = hashlib.md5(
(current_user.username + '_' + datetime.now().isoformat()).encode()
).hexdigest()
corpus = {'description': create_corpus_form.description.data,
'id': id,
'creator': current_user.id,
'title': create_corpus_form.title.data
}
dir = os.path.join(app.config['OPAQUE_FILES'], 'corpora', id)
try:
os.mkdir(corpus_dir)
except FileExistsError:
flash('FileExistsError')
os.makedirs(dir)
except OSError:
flash('OSError!')
else:
for file in create_corpus_form.files.data:
file.save(os.path.join(dir, file.filename))
flash('Corpus created!')
return redirect(url_for('main.dashboard'))
......
......@@ -18,32 +18,29 @@ def ocr():
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': ocr_job_form.language.data,
'version': 'latest'
},
'status': 'queued'
}
dir = os.path.join(app.config['OPAQUE_FILES'], 'jobs', id)
try:
os.mkdir(dir)
except FileExistsError:
# Possible MD5 hash collision occurred.
flash('Internal error occurred, please try again!')
os.makedirs(dir)
except OSError:
flash('OSError!')
else:
file = ocr_job_form.file.data
file.save(os.path.join(dir, file.filename))
'''
' TODO: Implement a Job class. For now a dictionary representation
' is enough.
'''
job = {'worker': None,
'creator': current_user.id,
'id': id,
'requested_cpus': 2,
'requested_memory': 2048,
'service': 'ocr',
'service_args': {'lang': ocr_job_form.language.data,
'version': 'latest'
},
'status': 'queued'
}
'''
' TODO: Let the scheduler run this job in the background.
'
......@@ -52,6 +49,7 @@ def ocr():
'''
thread = Thread(target=swarm.run, args=(job,))
thread.start()
flash('Job created!')
return redirect(url_for('services.ocr'))
return render_template(
......
......@@ -37,23 +37,43 @@
<div class="col s12">
<div class="card small">
<div class="card-content">
<form method="POST">
<form method="POST" enctype="multipart/form-data">
{{ create_corpus_form.hidden_tag() }}
<div class="input-field">
<i class="material-icons prefix">title</i>
{{ create_corpus_form.title() }}
{{ create_corpus_form.title.label }}
{% for error in create_corpus_form.title.errors %}
<span class="helper-text red-text">{{ error }}</span>
{% endfor %}
</div>
<div class="input-field">
<i class="material-icons prefix">description</i>
{{ create_corpus_form.description() }}
{{ create_corpus_form.description.label }}
{% for error in create_corpus_form.description.errors %}
<span class="helper-text red-text">{{ error }}</span>
{% endfor %}
<div class="row">
<div class="col s12 m4">
<div class="input-field">
<i class="material-icons prefix">title</i>
{{ create_corpus_form.title() }}
{{ create_corpus_form.title.label }}
{% for error in create_corpus_form.title.errors %}
<span class="helper-text red-text">{{ error }}</span>
{% endfor %}
</div>
</div>
<div class="col s12 m8">
<div class="input-field">
<i class="material-icons prefix">description</i>
{{ create_corpus_form.description() }}
{{ create_corpus_form.description.label }}
{% for error in create_corpus_form.description.errors %}
<span class="helper-text red-text">{{ error }}</span>
{% endfor %}
</div>
</div>
<div class="col s12">
<div class="file-field input-field">
<div class="btn">
<span>{{ create_corpus_form.files.label.text }}</span>
{{ create_corpus_form.files(accept='.vrt') }}
</div>
<div class="file-path-wrapper">
<input class="file-path validate" type="text">
</div>
{% for error in create_corpus_form.files.errors %}
<span class="helper-text red-text">{{ error }}</span>
{% endfor %}
</div>
</div>
</div>
<div class="card-action right-align">
{{ create_corpus_form.submit(class='btn') }}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment