Source code for pdfebc_web.main.views

# -*- coding: utf-8 -*-
"""This module contains all views for the main blueprint.

.. module:: views
    :platform: Unix
    :synopsis: Views for the main blueprint.

.. moduleauthor:: Simon Larsén <slarse@kth.se>
"""
import os
import uuid
from pdfebc_core import email_utils, config_utils
from flask import render_template, session, flash, Blueprint, redirect, url_for
from werkzeug import secure_filename
from .forms import FileUploadForm, CompressFilesForm
from ..util.file import (create_session_upload_dir,
                         session_upload_dir_exists,
                         get_session_upload_dir_path,
                         delete_session_upload_dir,
                         compress_uploaded_files)

PDFEBC_CORE_GITHUB = 'https://github.com/slarse/pdfebc-core'
PDFEBC_WEB_GITHUB = 'https://github.com/slarse/pdfebc-web'


SESSION_ID_KEY = 'session_id'


[docs]def construct_blueprint(celery): """Construct the main blueprint. Args: celery (Celery): A Celery instance. Returns: Blueprint: A Flask Blueprint. """ main = Blueprint('main', __name__) #TODO This is a suboptimal way of reading the config, fix it! if config_utils.valid_config_exists(): config = config_utils.read_config() gs_binary = config_utils.get_attribute_from_config(config, config_utils.DEFAULT_SECTION_KEY, config_utils.GS_DEFAULT_BINARY_KEY) else: gs_binary = 'gs' @celery.task def process_uploaded_files(session_id): """Compress the files uploaded to the session upload directory and send them by email with the preconfigured values in the pdfebc-core config. Also clears the session upload directory when done. Args: session_id (str): Id of the session. """ session_upload_dir = get_session_upload_dir_path(session_id) filepaths = compress_uploaded_files(session_upload_dir, gs_binary) email_utils.send_files_preconf(filepaths) delete_session_upload_dir(session_id) @main.route('/', methods=['GET', 'POST']) def index(): """View for the index page.""" compress_form = CompressFilesForm() form = FileUploadForm() if SESSION_ID_KEY not in session: session[SESSION_ID_KEY] = str(uuid.uuid4()) session_id = session[SESSION_ID_KEY] session_upload_dir_path = get_session_upload_dir_path(session_id) if not session_upload_dir_exists(session_id): create_session_upload_dir(session_id) if form.validate_on_submit(): file = form.upload.data filename = secure_filename(file.filename) file.save( os.path.join(session_upload_dir_path, filename)) flash("{} was successfully uploaded!".format(filename)) if compress_form.validate_on_submit(): process_uploaded_files.delay(session_id) flash("Your files are being compressed and will be sent by email upon completion.") return redirect(url_for('main.index')) uploaded_files = [] if not os.path.isdir(session_upload_dir_path) else [ file for file in os.listdir(session_upload_dir_path) if file.endswith('.pdf')] return render_template('index.html', form=form, uploaded_files=uploaded_files, compress_form=compress_form) @main.route('/about') def about(): """View for the about page.""" return render_template('about.html', pdfebc_web_github=PDFEBC_WEB_GITHUB, pdfebc_core_github=PDFEBC_CORE_GITHUB) return main