Change models

This commit is contained in:
Patrick Jentsch 2020-01-30 11:01:17 +01:00
parent 3dad22d41a
commit 6e20e00c4e
3 changed files with 64 additions and 70 deletions

View File

@ -246,9 +246,6 @@ class JobInput(db.Model):
filename = db.Column(db.String(255)) filename = db.Column(db.String(255))
dir = db.Column(db.String(255)) dir = db.Column(db.String(255))
job_id = db.Column(db.Integer, db.ForeignKey('jobs.id')) job_id = db.Column(db.Integer, db.ForeignKey('jobs.id'))
# Relationships
results = db.relationship('JobResult', backref='job_input', lazy='dynamic',
cascade='save-update, merge, delete')
def __repr__(self): def __repr__(self):
""" """
@ -260,8 +257,7 @@ class JobInput(db.Model):
return {'id': self.id, return {'id': self.id,
'dir': self.dir, 'dir': self.dir,
'filename': self.filename, 'filename': self.filename,
'job_id': self.job_id, 'job_id': self.job_id}
'results': [result.to_dict() for result in self.results]}
class JobResult(db.Model): class JobResult(db.Model):
@ -274,7 +270,6 @@ class JobResult(db.Model):
filename = db.Column(db.String(255)) filename = db.Column(db.String(255))
dir = db.Column(db.String(255)) dir = db.Column(db.String(255))
job_id = db.Column(db.Integer, db.ForeignKey('jobs.id')) job_id = db.Column(db.Integer, db.ForeignKey('jobs.id'))
job_input_id = db.Column(db.Integer, db.ForeignKey('job_inputs.id'))
def __repr__(self): def __repr__(self):
""" """
@ -286,8 +281,7 @@ class JobResult(db.Model):
return {'id': self.id, return {'id': self.id,
'dir': self.dir, 'dir': self.dir,
'filename': self.filename, 'filename': self.filename,
'job_id': self.job_id, 'job_id': self.job_id}
'job_input_id': self.job_input_id}
class Job(db.Model): class Job(db.Model):

View File

@ -76,7 +76,7 @@
<h4>Input and result files</h4> <h4>Input and result files</h4>
</div> </div>
<div class="col s12 m8"> <div class="col s12 m7">
<div class="card"> <div class="card">
<div class="card-content"> <div class="card-content">
<span class="card-title">Filewise</span> <span class="card-title">Filewise</span>
@ -85,10 +85,9 @@
<tr> <tr>
<th>Filename</th> <th>Filename</th>
<th>Download</th> <th>Download</th>
<th>Result</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody id="inputs">
{% for input in job.inputs %} {% for input in job.inputs %}
<tr> <tr>
<td id="input-{{ input.id }}-filename">{{ input.filename }}</td> <td id="input-{{ input.id }}-filename">{{ input.filename }}</td>
@ -97,7 +96,6 @@
<i class="material-icons">file_download</i> <i class="material-icons">file_download</i>
</a> </a>
</td> </td>
<td id="input-{{ input.id }}-results"></td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
@ -106,7 +104,7 @@
</div> </div>
</div> </div>
<div class="col s12 m4"> <div class="col s12 m5">
<div class="card"> <div class="card">
<div class="card-content"> <div class="card-content">
<span class="card-title">Bundled</span> <span class="card-title">Bundled</span>
@ -117,40 +115,7 @@
<th>Download</th> <th>Download</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody id="results"></tbody>
<tr>
<td>AIO-Bundle</td>
<td>
<a class="waves-effect waves-light btn-small" download href="">
<i class="material-icons">file_download</i>
</a>
</td>
</tr>
<tr>
<td>PDF-Bundle</td>
<td>
<a class="waves-effect waves-light btn" download href="">
<i class="material-icons">file_download</i>
</a>
</td>
</tr>
<tr>
<td>TXT-Bundle</td>
<td>
<a class="waves-effect waves-light btn" download href="">
<i class="material-icons">file_download</i>
</a>
</td>
</tr>
<tr>
<td>XML-Bundle</td>
<td>
<a class="waves-effect waves-light btn" download href="">
<i class="material-icons">file_download</i>
</a>
</td>
</tr>
</tbody>
</table> </table>
</div> </div>
</div> </div>
@ -166,7 +131,6 @@
<tr> <tr>
<th>Filename</th> <th>Filename</th>
<th>Download</th> <th>Download</th>
<th>Results</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -228,12 +192,8 @@
this.setStatus(job.status); this.setStatus(job.status);
// End date // End date
if (job.end_date) {this.setEndDate(job.end_date);} if (job.end_date) {this.setEndDate(job.end_date);}
// Input results // Results
for (let input of job.inputs) { if (job.results) {this.setResults(job.results);}
for (let result of input.results) {
this.setResult(result);
}
}
} }
_update(patch) { _update(patch) {
@ -245,7 +205,7 @@
if (pathArray[0] != this.jobId) {continue;} if (pathArray[0] != this.jobId) {continue;}
switch(operation.op) { switch(operation.op) {
case "add": case "add":
if (pathArray[1] === "inputs" && pathArray[3] === "results") { if (pathArray[1] === "results") {
this.setResult(operation.value); this.setResult(operation.value);
} }
break; break;
@ -277,22 +237,32 @@
M.updateTextFields(); M.updateTextFields();
} }
setResult(result) { setResults(results) {
let resultsElement, resultDownloadButtonElement, let resultElement, resultsElement, resultDownloadElement,
resultDownloadButtonIconElement; resultDownloadButtonElement, resultDownloadButtonIconElement,
resultTitleElement;
resultsElement = document.getElementById(`input-${result.job_input_id}-results`); resultsElement = document.getElementById("results");
resultDownloadButtonElement = document.createElement("a");
resultDownloadButtonElement.classList.add("waves-effect", "waves-light", "btn-small"); for (let result of results) {
resultDownloadButtonElement.href = `/jobs/${this.jobId}/results/${result.id}/download`; resultElement = document.createElement("tr");
resultDownloadButtonElement.innerText = result.filename.split(".").reverse()[0]; resultTitleElement = document.createElement("td");
resultDownloadButtonElement.setAttribute("download", ""); resultTitleElement.innerText = result.filename;
resultDownloadButtonIconElement = document.createElement("i"); resultElement.append(resultTitleElement);
resultDownloadButtonIconElement.classList.add("material-icons", "left"); resultDownloadElement = document.createElement("td");
resultDownloadButtonIconElement.innerText = "file_download"; resultDownloadButtonElement = document.createElement("a");
resultDownloadButtonElement.prepend(resultDownloadButtonIconElement); resultDownloadButtonElement.classList.add("waves-effect", "waves-light",
resultsElement.append(resultDownloadButtonElement); "btn-small");
resultsElement.append(" "); resultDownloadButtonElement.href = `/jobs/${result.job_id}/results/${result.id}/download`;
resultDownloadButtonElement.setAttribute("download", "");
resultDownloadButtonIconElement = document.createElement("i");
resultDownloadButtonIconElement.classList.add("material-icons");
resultDownloadButtonIconElement.innerText = "file_download";
resultDownloadButtonElement.append(resultDownloadButtonIconElement);
resultDownloadElement.append(resultDownloadButtonElement)
resultElement.append(resultDownloadElement);
resultsElement.append(resultElement);
}
} }
setStatus(status) { setStatus(status) {

View File

@ -0,0 +1,30 @@
"""empty message
Revision ID: 6227310c2112
Revises: ded5a37f8a7b
Create Date: 2020-01-30 09:28:06.770159
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '6227310c2112'
down_revision = 'ded5a37f8a7b'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint('job_results_job_input_id_fkey', 'job_results', type_='foreignkey')
op.drop_column('job_results', 'job_input_id')
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('job_results', sa.Column('job_input_id', sa.INTEGER(), autoincrement=False, nullable=True))
op.create_foreign_key('job_results_job_input_id_fkey', 'job_results', 'job_inputs', ['job_input_id'], ['id'])
# ### end Alembic commands ###