Prevent file objects unexpectedly being closed by boto after upload to S3 #212
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
As outlined in #153, it appears
boto3
'supload_fileobj()
auto closes files when done/interrupted.This MR utilizes a workaround discussed here to safely override this behavior so file objects are not unexpectedly closed even after an upload.
Fixes
#153
A concern worth noting
The recommended workaround uses a new class
NonCloseableBufferedReader
which subclassesio.BufferedReader
which expects aRawIOBase
unbuffered file-like object.However, a look at the usage of
_to_stream()
function which is called on the file object instore_file()
just before uploading shows that in some cases, it could return aBytesIO
object which is already an in-memory stream and already buffered thus, a bit redundant to go ahead and wrap withNonCloseableBufferedReader
.While I can't think of any obvious harm that this can cause and it generally seems like a safe operation, I just wanted to put it out here hopefully it sparks more discussions and insights.