from flask import ( abort, redirect, render_template, send_from_directory, url_for ) from flask_breadcrumbs import register_breadcrumb from flask_login import current_user, login_required import os from app.models import Job, JobInput, JobResult from . import bp from .utils import job_dynamic_list_constructor as job_dlc @bp.route('') @register_breadcrumb(bp, '.', 'JMy Jobs') @login_required def corpora(): return redirect(url_for('main.dashboard', _anchor='jobs')) @bp.route('/') @register_breadcrumb(bp, '.entity', '', dynamic_list_constructor=job_dlc) @login_required def job(job_id): job = Job.query.get_or_404(job_id) if not (job.user == current_user or current_user.is_administrator()): abort(403) return render_template( 'jobs/job.html.j2', job=job, title='Job' ) @bp.route('//inputs//download') @login_required def download_job_input(job_id, job_input_id): job_input = JobInput.query.get_or_404(job_input_id) if job_input.job.id != job_id: abort(404) if not (job_input.job.user == current_user or current_user.is_administrator()): abort(403) return send_from_directory( os.path.dirname(job_input.path), os.path.basename(job_input.path), as_attachment=True, attachment_filename=job_input.filename, mimetype=job_input.mimetype ) @bp.route('//results//download') @login_required def download_job_result(job_id, job_result_id): job_result = JobResult.query.get_or_404(job_result_id) if job_result.job.id != job_id: abort(404) if not (job_result.job.user == current_user or current_user.is_administrator()): abort(403) return send_from_directory( os.path.dirname(job_result.path), os.path.basename(job_result.path), as_attachment=True, attachment_filename=job_result.filename, mimetype=job_result.mimetype )