Skip to content

Commit e16480c

Browse files
symroecodingjoe
andcommitted
Remove use of JSON in POST data
Co-Authored-By: codingjoe <[email protected]>
1 parent b2f9c45 commit e16480c

File tree

3 files changed

+38
-23
lines changed

3 files changed

+38
-23
lines changed

s3file/middleware.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import json
21
import logging
32
import pathlib
43

@@ -14,9 +13,9 @@ def __init__(self, get_response):
1413
self.get_response = get_response
1514

1615
def __call__(self, request):
17-
file_fields = json.loads(request.POST.get("s3file", "[]"))
16+
file_fields = request.POST.getlist("s3file")
1817
for field_name in file_fields:
19-
paths = json.loads(request.POST.get(field_name, "[]"))
18+
paths = request.POST.getlist(field_name)
2019
request.FILES.setlist(field_name, list(self.get_files_from_storage(paths)))
2120

2221
if local_dev and request.path == "/__s3_mock__/":

s3file/static/s3file/js/s3file.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,13 @@
8888
return request('POST', url, s3Form, fileInput, file, form)
8989
})
9090
Promise.all(promises).then(function (results) {
91-
var keys = results.map(function (result) {
92-
return parseURL(result)
91+
results.forEach(function (result) {
92+
var hiddenFileInput = document.createElement('input')
93+
hiddenFileInput.type = 'hidden'
94+
hiddenFileInput.name = name
95+
hiddenFileInput.value = parseURL(result)
96+
form.appendChild(hiddenFileInput)
9397
})
94-
var hiddenFileInput = document.createElement('input')
95-
hiddenFileInput.type = 'hidden'
96-
hiddenFileInput.name = name
97-
hiddenFileInput.value = JSON.stringify(keys)
98-
form.appendChild(hiddenFileInput)
9998
fileInput.name = ''
10099
window.uploading -= 1
101100
}, function (err) {
@@ -120,13 +119,14 @@
120119
form.loaded = 0
121120
form.total = 0
122121
var inputs = Array.from(form.querySelectorAll('.s3file'))
123-
var hiddenS3Input = document.createElement('input')
124-
hiddenS3Input.type = 'hidden'
125-
hiddenS3Input.name = 's3file'
126-
form.appendChild(hiddenS3Input)
127-
hiddenS3Input.value = JSON.stringify(inputs.map(function (input) {
128-
return input.name
129-
}))
122+
123+
inputs.forEach(function (input) {
124+
var hiddenS3Input = document.createElement('input')
125+
hiddenS3Input.type = 'hidden'
126+
hiddenS3Input.name = 's3file'
127+
hiddenS3Input.value = input.name
128+
form.appendChild(hiddenS3Input)
129+
})
130130
inputs.forEach(function (input) {
131131
window.uploading += 1
132132
uploadFiles(form, input, input.name)

tests/test_middleware.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,32 @@ def test_process_request(self, rf):
3030
request = rf.post(
3131
"/",
3232
data={
33-
"file": '["custom/location/tmp/s3file/s3_file.txt"]',
34-
"s3file": '["file"]',
33+
"file": "custom/location/tmp/s3file/s3_file.txt",
34+
"s3file": "file",
3535
},
3636
)
3737
S3FileMiddleware(lambda x: None)(request)
3838
assert request.FILES.getlist("file")
3939
assert request.FILES.get("file").read() == b"s3file"
4040

41+
def test_process_request__multiple_files(self, rf):
42+
storage.save("tmp/s3file/s3_file.txt", ContentFile(b"s3file"))
43+
storage.save("tmp/s3file/s3_other_file.txt", ContentFile(b"other s3file"))
44+
request = rf.post(
45+
"/",
46+
data={
47+
"file": [
48+
"custom/location/tmp/s3file/s3_file.txt",
49+
"custom/location/tmp/s3file/s3_other_file.txt",
50+
],
51+
"s3file": ["file", "other_file"],
52+
},
53+
)
54+
S3FileMiddleware(lambda x: None)(request)
55+
files = request.FILES.getlist("file")
56+
assert files[0].read() == b"s3file"
57+
assert files[1].read() == b"other s3file"
58+
4159
def test_process_request__no_location(self, rf, settings):
4260
settings.AWS_LOCATION = ""
4361
uploaded_file = SimpleUploadedFile("uploaded_file.txt", b"uploaded")
@@ -48,16 +66,14 @@ def test_process_request__no_location(self, rf, settings):
4866

4967
storage.save("tmp/s3file/s3_file.txt", ContentFile(b"s3file"))
5068
request = rf.post(
51-
"/", data={"file": '["tmp/s3file/s3_file.txt"]', "s3file": '["file"]'}
69+
"/", data={"file": "tmp/s3file/s3_file.txt", "s3file": "file"}
5270
)
5371
S3FileMiddleware(lambda x: None)(request)
5472
assert request.FILES.getlist("file")
5573
assert request.FILES.get("file").read() == b"s3file"
5674

5775
def test_process_request__no_file(self, rf, caplog):
58-
request = rf.post(
59-
"/", data={"file": '["does_not_exist.txt"]', "s3file": '["file"]'}
60-
)
76+
request = rf.post("/", data={"file": "does_not_exist.txt", "s3file": "file"})
6177
S3FileMiddleware(lambda x: None)(request)
6278
assert not request.FILES.getlist("file")
6379
assert "File not found: does_not_exist.txt" in caplog.text

0 commit comments

Comments
 (0)