diff --git a/googleapiclient/http.py b/googleapiclient/http.py index b8e1b8eaaee..e842bb4c87b 100644 --- a/googleapiclient/http.py +++ b/googleapiclient/http.py @@ -573,8 +573,9 @@ def __init__( resumable: bool, True if this is a resumable upload. False means upload in a single request. """ + self._fd = None self._filename = filename - fd = open(self._filename, "rb") + self._fd = open(self._filename, "rb") if mimetype is None: # No mimetype provided, make a guess. mimetype, _ = mimetypes.guess_type(filename) @@ -582,11 +583,12 @@ def __init__( # Guess failed, use octet-stream. mimetype = "application/octet-stream" super(MediaFileUpload, self).__init__( - fd, mimetype, chunksize=chunksize, resumable=resumable + self._fd, mimetype, chunksize=chunksize, resumable=resumable ) def __del__(self): - self._fd.close() + if self._fd: + self._fd.close() def to_json(self): """Creating a JSON representation of an instance of MediaFileUpload. diff --git a/tests/test_http.py b/tests/test_http.py index 5293a6a3bfc..9bfae93fd73 100644 --- a/tests/test_http.py +++ b/tests/test_http.py @@ -248,6 +248,10 @@ def test_media_file_upload_to_from_json(self): self.assertEqual(500, new_upload.chunksize()) self.assertEqual(b"PNG", new_upload.getbytes(1, 3)) + def test_media_file_upload_raises_on_file_not_found(self): + with self.assertRaises(FileNotFoundError): + MediaFileUpload(datafile("missing.png")) + def test_media_file_upload_raises_on_invalid_chunksize(self): self.assertRaises( InvalidChunkSizeError,