Do not send deleted files

stable
neingeist 6 years ago
parent f74f059f13
commit 125df3af66

@ -10,8 +10,13 @@ class Config:
SECRET_KEY = os.environ.get('SECRET_KEY') or \ SECRET_KEY = os.environ.get('SECRET_KEY') or \
''.join(random_choices(string.ascii_letters, k=20)) ''.join(random_choices(string.ascii_letters, k=20))
DATA_DIR = os.environ.get('DATA_DIR') or '/var/tmp/prolefeeder-test-data' DATA_DIR = os.environ.get('DATA_DIR') or '/var/tmp/prolefeeder-test-data'
TMP_DIR = os.environ.get('TMP_DIR') or '/var/tmp' OUT_DIR = os.environ.get('OUT_DIR') or '/var/tmp/prolefeeder-test-out'
MAX_LENGTH = os.environ.get('MAX_LENGTH') or 180 MAX_LENGTH = os.environ.get('MAX_LENGTH') or 180
KBITS = os.environ.get('KBITS') or 128 KBITS = os.environ.get('KBITS') or 128
DEBUG = False DEBUG = False
if not os.path.exists(DATA_DIR):
raise "DATA_DIR does not exist"
if not os.path.exists(OUT_DIR):
raise "OUT_DIR does not exist"

@ -1,5 +1,5 @@
from flask import (Flask, render_template, flash, redirect, from flask import (Flask, render_template, flash, redirect,
url_for, request, send_file, abort) url_for, request, send_from_directory, abort)
from flask_bootstrap import Bootstrap from flask_bootstrap import Bootstrap
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import DateTimeField, IntegerField, SubmitField from wtforms import DateTimeField, IntegerField, SubmitField
@ -11,6 +11,7 @@ import os
import random import random
import re import re
import subprocess import subprocess
import time
from config import Config from config import Config
@ -56,6 +57,16 @@ def download():
return render_template('download.html', form=form) return render_template('download.html', form=form)
def clean_out_dir():
"""Clean up OUT_DIR"""
for fn in os.listdir(app.config['OUT_DIR']):
if not fn.startswith('prolefeeder'):
continue
creation_time = os.path.getctime(os.path.join(app.config['OUT_DIR'], fn))
if time.time() - creation_time >= 60:
os.unlink(os.path.join(app.config['OUT_DIR'], fn))
@app.route('/download_file/<filename>') @app.route('/download_file/<filename>')
def download_file(filename): def download_file(filename):
"""Download an output file""" """Download an output file"""
@ -64,12 +75,10 @@ def download_file(filename):
abort(404) abort(404)
attachment_filename = attachment_filenames.pop(filename) attachment_filename = attachment_filenames.pop(filename)
fh = open(os.path.join(app.config['TMP_DIR'], filename), 'rb') clean_out_dir()
os.remove(os.path.join(app.config['TMP_DIR'], filename))
# XXX How to close fh? return send_from_directory(app.config['OUT_DIR'], filename,
return send_file(fh, as_attachment=True, as_attachment=True, attachment_filename=attachment_filename)
attachment_filename=attachment_filename)
def prepare_download(form): def prepare_download(form):
@ -110,7 +119,7 @@ def prepare_download(form):
ss = (form.start_time.data - sources[0]['start_time']).total_seconds() ss = (form.start_time.data - sources[0]['start_time']).total_seconds()
# Let ffmpeg do the rest of the job # Let ffmpeg do the rest of the job
_, output_filename = mkstemp(suffix='.mp3', dir=app.config['TMP_DIR']) _, output_filename = mkstemp(prefix='prolefeeder', suffix='.mp3', dir=app.config['OUT_DIR'])
output_filename = os.path.basename(output_filename) output_filename = os.path.basename(output_filename)
attachment_filename = '{}_{}.mp3'.format(form.start_time.data, form.length.data) attachment_filename = '{}_{}.mp3'.format(form.start_time.data, form.length.data)
@ -121,7 +130,7 @@ def prepare_download(form):
[os.path.join(app.config['DATA_DIR'], s['fn']) for s in sources]), [os.path.join(app.config['DATA_DIR'], s['fn']) for s in sources]),
'-codec', 'copy', '-codec', 'copy',
'-t', str(form.length.data * 60), '-t', str(form.length.data * 60),
os.path.join(app.config['TMP_DIR'], output_filename) os.path.join(app.config['OUT_DIR'], output_filename)
] ]
app.logger.debug(' '.join(c)) app.logger.debug(' '.join(c))
subprocess.call(c) subprocess.call(c)

Loading…
Cancel
Save