mirror of
https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
synced 2024-12-24 10:34:17 +00:00
Change models
This commit is contained in:
parent
3dad22d41a
commit
6e20e00c4e
@ -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):
|
||||||
|
@ -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) {
|
||||||
|
30
migrations/versions/6227310c2112_.py
Normal file
30
migrations/versions/6227310c2112_.py
Normal 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 ###
|
Loading…
Reference in New Issue
Block a user