mirror of
https://0xacab.org/jvoisin/mat2-web.git
synced 2025-02-23 00:29:56 -05:00
added new property which indicates the remaining download time in secs
This commit is contained in:
parent
e75d9a7de5
commit
83618ff529
@ -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",
|
||||
|
@ -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:
|
||||
|
@ -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,
|
||||
|
@ -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))
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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',
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user