Added support for the file mode to MediaStorage.read().
This commit is contained in:
parent
0f86101601
commit
a6beeefd6a
|
@ -79,9 +79,9 @@ class MediaStorage(BaseStorage):
|
|||
self.name = uuid4().hex
|
||||
default_storage.save(self.get_full_path(), ContentFile(data))
|
||||
|
||||
def read(self, read_mode='r'):
|
||||
with default_storage.open(self.get_full_path()) as file:
|
||||
return file.read()
|
||||
def read(self, read_mode='rb'):
|
||||
with default_storage.open(self.get_full_path(), mode=read_mode) as f:
|
||||
return f.read()
|
||||
|
||||
def remove(self):
|
||||
default_storage.delete(self.get_full_path())
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
id,name,author_email
1,Some book,test@example.com
|
|
|
@ -64,6 +64,40 @@ class ImportExportAdminIntegrationTest(TestCase):
|
|||
self.assertEqual(response.status_code, 200)
|
||||
self.assertContains(response, _('Import finished'))
|
||||
|
||||
@override_settings(TEMPLATE_STRING_IF_INVALID='INVALID_VARIABLE')
|
||||
def test_import_mac(self):
|
||||
# GET the import form
|
||||
response = self.client.get('/admin/core/book/import/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'admin/import_export/import.html')
|
||||
self.assertContains(response, 'form action=""')
|
||||
|
||||
# POST the import form
|
||||
input_format = '0'
|
||||
filename = os.path.join(
|
||||
os.path.dirname(__file__),
|
||||
os.path.pardir,
|
||||
'exports',
|
||||
'books-mac.csv')
|
||||
with open(filename, "rb") as f:
|
||||
data = {
|
||||
'input_format': input_format,
|
||||
'import_file': f,
|
||||
}
|
||||
response = self.client.post('/admin/core/book/import/', data)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertIn('result', response.context)
|
||||
self.assertFalse(response.context['result'].has_errors())
|
||||
self.assertIn('confirm_form', response.context)
|
||||
confirm_form = response.context['confirm_form']
|
||||
|
||||
data = confirm_form.initial
|
||||
self.assertEqual(data['original_file_name'], 'books-mac.csv')
|
||||
response = self.client.post('/admin/core/book/process_import/', data,
|
||||
follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertContains(response, _('Import finished'))
|
||||
|
||||
def test_export(self):
|
||||
response = self.client.get('/admin/core/book/export/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
|
|
@ -52,6 +52,16 @@ class CSVTest(TestCase):
|
|||
expected = 'id,name,author_email\n1,Some book,test@example.com\n'
|
||||
self.assertEqual(in_stream, expected)
|
||||
|
||||
def test_import_mac(self):
|
||||
filename = os.path.join(
|
||||
os.path.dirname(__file__),
|
||||
os.path.pardir,
|
||||
'exports',
|
||||
'books-mac.csv')
|
||||
in_stream = open(filename, self.format.get_read_mode()).read()
|
||||
expected = 'id,name,author_email\n1,Some book,test@example.com\n'
|
||||
self.assertEqual(in_stream, expected)
|
||||
|
||||
def test_import_unicode(self):
|
||||
# importing csv UnicodeEncodeError 347
|
||||
filename = os.path.join(
|
||||
|
|
|
@ -4,6 +4,8 @@ import os
|
|||
from django.test import TestCase
|
||||
from django.core.cache import cache
|
||||
from django.core.files.storage import default_storage
|
||||
from django.utils import six
|
||||
|
||||
from import_export.tmp_storages import (
|
||||
CacheStorage,
|
||||
MediaStorage,
|
||||
|
@ -56,3 +58,16 @@ id,name,author,author_email,imported,published,price,categories
|
|||
self.assertTrue(default_storage.exists(tmp_storage.get_full_path()))
|
||||
tmp_storage.remove()
|
||||
self.assertFalse(default_storage.exists(tmp_storage.get_full_path()))
|
||||
|
||||
def test_media_storage_read_mode(self):
|
||||
# issue 416 - MediaStorage does not respect the read_mode parameter.
|
||||
test_string = self.test_string.replace(b'\n', b'\r')
|
||||
|
||||
tmp_storage = MediaStorage()
|
||||
tmp_storage.save(test_string)
|
||||
name = tmp_storage.name
|
||||
|
||||
tmp_storage = MediaStorage(name=name)
|
||||
read_mode = 'r' if six.PY3 else 'rbU'
|
||||
self.assertEqual(self.test_string.decode('utf-8'),
|
||||
tmp_storage.read(read_mode=read_mode))
|
||||
|
|
Loading…
Reference in New Issue