Skip to content

Commit

Permalink
Add support for text mode file reading
Browse files Browse the repository at this point in the history
  • Loading branch information
danlamanna authored and thomasf committed Dec 19, 2023
1 parent 8cc46a8 commit 9dd8d2e
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 0 deletions.
15 changes: 15 additions & 0 deletions minio_storage/files.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,21 @@ def __init__(self, name: str, mode: str, storage: "MinioStorage", **kwargs):
self._mode: str = mode
self._file = None

def read(self, *args, **kwargs):
if "b" in self._mode:
return super().read(*args, **kwargs)
else:
return super().read(*args, **kwargs).decode()

def readline(self, *args, **kwargs):
if "b" in self._mode:
return super().readline(*args, **kwargs)
else:
return super().readline(*args, **kwargs).decode()

def readlines(self, *args, **kwargs):
return list(self)


class ReadOnlyMinioObjectFile(MinioStorageFile, ReadOnlyMixin, NonSeekableMixin):
"""A django File class which directly exposes the underlying minio object. This
Expand Down
10 changes: 10 additions & 0 deletions tests/test_app/tests/retrieve_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,16 @@ def test_reading_non_existing_file_raises_exception(self):
f = self.media_storage.open("this does not exist")
f.read()

def test_reading_respects_binary_mode_flag(self):
self.media_storage.save("test.txt", io.BytesIO(b"stuff"))
f = self.media_storage.open("test.txt", "rb")
self.assertEqual(f.read(), b"stuff")

def test_reading_respects_text_mode_flag(self):
self.media_storage.save("test.txt", io.BytesIO(b"stuff"))
f = self.media_storage.open("test.txt", "r")
self.assertEqual(f.read(), "stuff")

def test_file_names_are_properly_sanitized(self):
self.media_storage.save("./meh22222.txt", io.BytesIO(b"stuff"))

Expand Down

0 comments on commit 9dd8d2e

Please sign in to comment.