Refs #27777 -- Improved docs/added test for File context manager change.

This commit is contained in:
Ingo Klöcker 2017-04-07 15:41:39 +02:00 committed by Tim Graham
parent eee34ef64c
commit 6bb3b2bff4
3 changed files with 18 additions and 3 deletions

View File

@ -56,8 +56,11 @@ The ``File`` class
was originally opened with; ``None`` means to reopen with the original was originally opened with; ``None`` means to reopen with the original
mode. mode.
Returns ``self``, so that it can be used similar to Python's It can be used as a context manager, e.g. ``with file.open() as f:``.
built-in :func:`python:open()` with the ``with`` statement.
.. versionchanged:: 2.0
Context manager support was added.
.. method:: __iter__() .. method:: __iter__()

View File

@ -150,7 +150,8 @@ Email
File Storage File Storage
~~~~~~~~~~~~ ~~~~~~~~~~~~
* ... * :meth:`File.open() <django.core.files.File.open>` can be used as a context
manager, e.g. ``with file.open() as f:``.
File Uploads File Uploads
~~~~~~~~~~~~ ~~~~~~~~~~~~

View File

@ -3,6 +3,7 @@ import sys
import unittest import unittest
from django.core.files import temp from django.core.files import temp
from django.core.files.base import ContentFile
from django.core.files.uploadedfile import TemporaryUploadedFile from django.core.files.uploadedfile import TemporaryUploadedFile
from django.db.utils import IntegrityError from django.db.utils import IntegrityError
from django.test import TestCase, override_settings from django.test import TestCase, override_settings
@ -83,3 +84,13 @@ class FileFieldTests(TestCase):
tmp_file_path = tmp_file.temporary_file_path() tmp_file_path = tmp_file.temporary_file_path()
Document.objects.create(myfile=tmp_file) Document.objects.create(myfile=tmp_file)
self.assertFalse(os.path.exists(tmp_file_path), 'Temporary file still exists') self.assertFalse(os.path.exists(tmp_file_path), 'Temporary file still exists')
def test_open_returns_self(self):
"""
FieldField.open() returns self so it can be used as a context manager.
"""
d = Document.objects.create(myfile='something.txt')
# Replace the FileField's file with an in-memory ContentFile, so that
# open() doesn't write to disk.
d.myfile.file = ContentFile(b'', name='bla')
self.assertEqual(d.myfile, d.myfile.open())