Does anyone have a working example of SimpleUploadedFile
with Django in Python 3?
This code worked in Python 2, but not in Python 3.
I have the below test:
test.py
class AttachmentModelTests(TestCase):
def setUp(self):
self.model = mommy.make(LocationLevel)
base_dir = dirname(dirname(dirname(__file__)))
self.image = join(base_dir, "source/attachments/test_in/test-mountains.jpg")
def test_create(self):
_file = SimpleUploadedFile(self.image, "file_content",
content_type="image/jpeg")
attachment = Attachment.objects.create(
model_id=self.model.id,
file=_file
)
self.assertIsInstance(attachment, Attachment)
self.assertEqual(
attachment.filename,
self.image.split('/')[-1] # test-mountains.jpg
)
Here is the error it's outputting:
Traceback (most recent call last):
File "/Users/alelevier/Documents/bsrs/bsrs-django/bigsky/generic/tests/test_models.py", line 97, in test_create
content_type="image/jpeg")
File "/Users/alelevier/.virtualenvs/bs/lib/python3.4/site-packages/django/core/files/uploadedfile.py", line 114, in __init__
super(SimpleUploadedFile, self).__init__(BytesIO(content), None, name,
TypeError: 'str' does not support the buffer interface
This SO answer helped me solve it.
In the end, this is the updated working test code:
def test_create(self):
(abs_dir_path, filename) = os.path.split(self.image)
with open(self.image) as infile:
_file = SimpleUploadedFile(filename, infile.read())
attachment = Attachment.objects.create(
model_id=self.model.id,
file=_file
)
self.assertIsInstance(attachment, Attachment)
self.assertEqual(
attachment.filename,
self.image.split('/')[-1] # test-mountains.jpg
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With