From 29dbdc9f949c6ab6b226df68976484e5473353a3 Mon Sep 17 00:00:00 2001 From: Patrick Jentsch <p.jentsch@uni-bielefeld.de> Date: Thu, 3 Dec 2020 15:13:24 +0100 Subject: [PATCH] Add URL property to some models --- web/app/models.py | 51 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 5 deletions(-) diff --git a/web/app/models.py b/web/app/models.py index 4ca7095f..1fde6add 100644 --- a/web/app/models.py +++ b/web/app/models.py @@ -1,5 +1,5 @@ from datetime import datetime -from flask import current_app +from flask import current_app, url_for from flask_login import UserMixin, AnonymousUserMixin from itsdangerous import BadSignature, TimedJSONWebSignatureSerializer from time import sleep @@ -281,10 +281,20 @@ class JobInput(db.Model): # Fields filename = db.Column(db.String(255)) + @property + def download_url(self): + return url_for('job.download_job_input', job_id=self.job_id, + job_input_id=self.id) + @property def path(self): return os.path.join(self.job.path, self.filename) + @property + def url(self): + return url_for('jobs.job', job_id=self.job_id, + _anchor='job-{}-input-{}'.format(self.job_id, self.id)) + def __repr__(self): ''' String representation of the JobInput. For human readability. @@ -292,7 +302,9 @@ class JobInput(db.Model): return '<JobInput {}>'.format(self.filename) def to_dict(self): - return {'id': self.id, + return {'download_url': self.download_url, + 'url': self.url, + 'id': self.id, 'job_id': self.job_id, 'filename': self.filename} @@ -309,10 +321,20 @@ class JobResult(db.Model): # Fields filename = db.Column(db.String(255)) + @property + def download_url(self): + return url_for('job.download_job_result', job_id=self.job_id, + job_result_id=self.id) + @property def path(self): return os.path.join(self.job.path, 'output', self.filename) + @property + def url(self): + return url_for('jobs.job', job_id=self.job_id, + _anchor='job-{}-result-{}'.format(self.job_id, self.id)) + def __repr__(self): ''' String representation of the JobResult. For human readability. @@ -320,7 +342,9 @@ class JobResult(db.Model): return '<JobResult {}>'.format(self.filename) def to_dict(self): - return {'id': self.id, + return {'download_url': self.download_url, + 'url': self.url, + 'id': self.id, 'job_id': self.job_id, 'filename': self.filename} @@ -359,6 +383,10 @@ class Job(db.Model): def path(self): return os.path.join(self.creator.path, 'jobs', str(self.id)) + @property + def path(self): + return url_for('job.job', job_id=self.id) + def __repr__(self): ''' String representation of the Job. For human readability. @@ -395,7 +423,8 @@ class Job(db.Model): self.status = 'submitted' def to_dict(self): - return {'id': self.id, + return {'url': self.url, + 'id': self.id, 'user_id': self.user_id, 'creation_date': self.creation_date.timestamp(), 'description': self.description, @@ -435,10 +464,20 @@ class CorpusFile(db.Model): school = db.Column(db.String(255)) title = db.Column(db.String(255)) + @property + def download_url(self): + return url_for('corpora.download_corpus_file', + corpus_id=self.corpus_id, corpus_file_id=self.id) + @property def path(self): return os.path.join(self.corpus.path, self.filename) + @property + def url(self): + return url_for('corpora.corpus_file', corpus_id=self.corpus_id, + corpus_file_id=self.id) + def delete(self): try: os.remove(self.path) @@ -449,7 +488,9 @@ class CorpusFile(db.Model): self.corpus.status = 'unprepared' def to_dict(self): - return {'id': self.id, + return {'download_url': self.download_url, + 'url': self.url, + 'id': self.id, 'corpus_id': self.corpus_id, 'address': self.address, 'author': self.author, -- GitLab