added new property which indicates the remaining download time in secs

This commit is contained in:
Jan Friedli 2020-05-15 14:38:13 +02:00
parent e75d9a7de5
commit 83618ff529
No known key found for this signature in database
GPG Key ID: F945FA2FCA30549D
7 changed files with 18 additions and 5 deletions

View File

@ -110,6 +110,7 @@ The `file` parameter is the base64 encoded file which will be cleaned.
**Example Response:**
```json
{
"inactive_after_sec": 120,
"output_filename": "fancy.cleaned.jpg",
"mime": "image/jpg",
"key": "81a541f9ebc0233d419d25ed39908b16f82be26a783f32d56c381559e84e6161",
@ -175,6 +176,7 @@ The `key` parameter is the key from a previously uploaded file.
**Example Response:**
```json
{
"inactive_after_sec": 120,
"output_filename": "files.2cd225d5-2d75-44a2-9f26-e120a87e4279.cleaned.zip",
"mime": "application/zip",
"key": "5ee4cf8821226340d3d5ed16bd2e1b435234a9ad218f282b489a85d116e7a4c4",

View File

@ -4,6 +4,8 @@ import sys
import os
import random
from matweb import utils
def run_file_removal_job(upload_folder_path):
if random.randint(0, 10) == 0:
@ -18,7 +20,7 @@ def delete_file_when_too_old(filepath):
last_time = time.time() - file_mod_time
# if file is older than our configured max timeframe, delete it
if last_time > int(os.environ.get('MAT2_MAX_FILE_AGE_FOR_REMOVAL', 15 * 60)):
if last_time > utils.get_file_removal_max_age_sec():
try:
os.remove(filepath)
except OSError:

View File

@ -48,6 +48,7 @@ class APIUpload(Resource):
key, secret, meta_after, output_filename = utils.cleanup(parser, filepath, self.upload_folder)
return utils.return_file_created_response(
utils.get_file_removal_max_age_sec(),
output_filename,
mime,
key,
@ -133,6 +134,7 @@ class APIBulkDownloadCreator(Resource):
abort(500, message='Unable to clean %s' % mime)
key, secret, meta_after, output_filename = utils.cleanup(parser, zip_path, self.upload_folder)
return {
'inactive_after_sec': utils.get_file_removal_max_age_sec(),
'output_filename': output_filename,
'mime': mime,
'key': key,

View File

@ -35,6 +35,7 @@ def check_upload_folder(upload_folder):
def return_file_created_response(
inactive_after_sec: int,
output_filename: str,
mime: str,
key: str,
@ -44,6 +45,7 @@ def return_file_created_response(
download_link: str
) -> dict:
return {
'inactive_after_sec': inactive_after_sec,
'output_filename': output_filename,
'mime': mime,
'key': key,
@ -106,3 +108,7 @@ def is_valid_api_download_file(filename: str, key: str, secret: str, upload_fold
if hmac.compare_digest(hash_file(complete_path, secret), key) is False:
abort(400, message='The file hash does not match')
return complete_path, filepath
def get_file_removal_max_age_sec() -> int:
return int(os.environ.get('MAT2_MAX_FILE_AGE_FOR_REMOVAL', 15 * 60))

View File

@ -170,7 +170,7 @@ class Mat2WebTestCase(TestCase):
request = app.get(self.get_context_variable('download_uri'))
self.assertEqual(302, request.status_code)
os.environ['MAT2_MAX_FILE_AGE_FOR_REMOVAL'] = '9999'
os.environ['MAT2_MAX_FILE_AGE_FOR_REMOVAL'] = str(15*60)
def test_info_page(self):
rv = self.client.get('/info')
@ -191,7 +191,6 @@ class Mat2WebTestCase(TestCase):
self.assertIn(b'Invalid Filename', rv.data)
if __name__ == '__main__':
unittest.main()

View File

@ -42,7 +42,7 @@ class Mat2APITestCase(unittest.TestCase):
self.assertEqual(request.status_code, 200)
data = request.get_json()
self.assertEqual(data['output_filename'], 'test_name.cleaned.jpg')
self.assertEqual(data['inactive_after_sec'], 15 * 60)
self.assertEqual(data['output_filename'], 'test_name.cleaned.jpg')
self.assertEqual(data['mime'], 'image/jpeg')
self.assertEqual(len(data['secret']), 64)
@ -237,6 +237,7 @@ class Mat2APITestCase(unittest.TestCase):
self.assertIn('files.', response['output_filename'])
self.assertIn('cleaned.zip', response['output_filename'])
self.assertEquals(15 * 60, response['inactive_after_sec'])
self.assertIn(response['mime'], 'application/zip')
self.assertEqual(response['meta_after'], {})
@ -387,7 +388,7 @@ class Mat2APITestCase(unittest.TestCase):
randint_mock.return_value = 0
self.upload_download_test_jpg_and_assert_response_code(app, 404)
os.environ['MAT2_MAX_FILE_AGE_FOR_REMOVAL'] = '9999'
os.environ['MAT2_MAX_FILE_AGE_FOR_REMOVAL'] = str(15 * 60)
def upload_download_test_jpg_and_assert_response_code(self, app, code):
request = app.post('/api/upload',

View File

@ -42,6 +42,7 @@ class Mat2WebTestCase(unittest.TestCase):
randint_mock.return_value = 0
file_removal_scheduler.run_file_removal_job(self.app.config['UPLOAD_FOLDER'])
self.assertTrue(path.exists(path.join(self.upload_folder, filename)))
environ['MAT2_MAX_FILE_AGE_FOR_REMOVAL'] = str(15 * 60)
def tearDown(self):
shutil.rmtree(self.upload_folder)