From 6e20e00c4e1e06cf651a196ccc084e65a40f549b Mon Sep 17 00:00:00 2001 From: Patrick Jentsch Date: Thu, 30 Jan 2020 11:01:17 +0100 Subject: [PATCH] Change models --- app/models.py | 10 +-- app/templates/jobs/job.html.j2 | 94 ++++++++++------------------ migrations/versions/6227310c2112_.py | 30 +++++++++ 3 files changed, 64 insertions(+), 70 deletions(-) create mode 100644 migrations/versions/6227310c2112_.py diff --git a/app/models.py b/app/models.py index 5c6966dd..5aeb8f17 100644 --- a/app/models.py +++ b/app/models.py @@ -246,9 +246,6 @@ class JobInput(db.Model): filename = db.Column(db.String(255)) dir = db.Column(db.String(255)) 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): """ @@ -260,8 +257,7 @@ class JobInput(db.Model): return {'id': self.id, 'dir': self.dir, 'filename': self.filename, - 'job_id': self.job_id, - 'results': [result.to_dict() for result in self.results]} + 'job_id': self.job_id} class JobResult(db.Model): @@ -274,7 +270,6 @@ class JobResult(db.Model): filename = db.Column(db.String(255)) dir = db.Column(db.String(255)) 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): """ @@ -286,8 +281,7 @@ class JobResult(db.Model): return {'id': self.id, 'dir': self.dir, 'filename': self.filename, - 'job_id': self.job_id, - 'job_input_id': self.job_input_id} + 'job_id': self.job_id} class Job(db.Model): diff --git a/app/templates/jobs/job.html.j2 b/app/templates/jobs/job.html.j2 index c1f881b7..d6931dc4 100644 --- a/app/templates/jobs/job.html.j2 +++ b/app/templates/jobs/job.html.j2 @@ -76,7 +76,7 @@

Input and result files

-
+
Filewise @@ -85,10 +85,9 @@ Filename Download - Result - + {% for input in job.inputs %} {{ input.filename }} @@ -97,7 +96,6 @@ file_download - {% endfor %} @@ -106,7 +104,7 @@
-
+
Bundled @@ -117,40 +115,7 @@ Download - - - AIO-Bundle - - - file_download - - - - - PDF-Bundle - - - file_download - - - - - TXT-Bundle - - - file_download - - - - - XML-Bundle - - - file_download - - - - +
@@ -166,7 +131,6 @@ Filename Download - Results @@ -228,12 +192,8 @@ this.setStatus(job.status); // End date if (job.end_date) {this.setEndDate(job.end_date);} - // Input results - for (let input of job.inputs) { - for (let result of input.results) { - this.setResult(result); - } - } + // Results + if (job.results) {this.setResults(job.results);} } _update(patch) { @@ -245,7 +205,7 @@ if (pathArray[0] != this.jobId) {continue;} switch(operation.op) { case "add": - if (pathArray[1] === "inputs" && pathArray[3] === "results") { + if (pathArray[1] === "results") { this.setResult(operation.value); } break; @@ -277,22 +237,32 @@ M.updateTextFields(); } - setResult(result) { - let resultsElement, resultDownloadButtonElement, - resultDownloadButtonIconElement; + setResults(results) { + let resultElement, resultsElement, resultDownloadElement, + resultDownloadButtonElement, resultDownloadButtonIconElement, + resultTitleElement; - resultsElement = document.getElementById(`input-${result.job_input_id}-results`); - resultDownloadButtonElement = document.createElement("a"); - resultDownloadButtonElement.classList.add("waves-effect", "waves-light", "btn-small"); - resultDownloadButtonElement.href = `/jobs/${this.jobId}/results/${result.id}/download`; - resultDownloadButtonElement.innerText = result.filename.split(".").reverse()[0]; - resultDownloadButtonElement.setAttribute("download", ""); - resultDownloadButtonIconElement = document.createElement("i"); - resultDownloadButtonIconElement.classList.add("material-icons", "left"); - resultDownloadButtonIconElement.innerText = "file_download"; - resultDownloadButtonElement.prepend(resultDownloadButtonIconElement); - resultsElement.append(resultDownloadButtonElement); - resultsElement.append(" "); + resultsElement = document.getElementById("results"); + + for (let result of results) { + resultElement = document.createElement("tr"); + resultTitleElement = document.createElement("td"); + resultTitleElement.innerText = result.filename; + resultElement.append(resultTitleElement); + resultDownloadElement = document.createElement("td"); + resultDownloadButtonElement = document.createElement("a"); + resultDownloadButtonElement.classList.add("waves-effect", "waves-light", + "btn-small"); + 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) { diff --git a/migrations/versions/6227310c2112_.py b/migrations/versions/6227310c2112_.py new file mode 100644 index 00000000..f4307c2e --- /dev/null +++ b/migrations/versions/6227310c2112_.py @@ -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 ###