Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(262)

Unified Diff: venv/Lib/site-packages/django/core/files/temp.py

Issue 554060043: testMe
Patch Set: Created 2 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: venv/Lib/site-packages/django/core/files/temp.py
===================================================================
new file mode 100644
--- /dev/null
+++ b/venv/Lib/site-packages/django/core/files/temp.py
@@ -0,0 +1,75 @@
+"""
+The temp module provides a NamedTemporaryFile that can be reopened in the same
+process on any platform. Most platforms use the standard Python
+tempfile.NamedTemporaryFile class, but Windows users are given a custom class.
+
+This is needed because the Python implementation of NamedTemporaryFile uses the
+O_TEMPORARY flag under Windows, which prevents the file from being reopened
+if the same flag is not provided [1][2]. Note that this does not address the
+more general issue of opening a file for writing and reading in multiple
+processes in a manner that works across platforms.
+
+Also note that the custom version of NamedTemporaryFile does not support the
+full range of keyword arguments available in Python 2.6+ and 3.0+.
+
+1: https://mail.python.org/pipermail/python-list/2005-December/336957.html
+2: http://bugs.python.org/issue14243
+"""
+
+import os
+import tempfile
+
+from django.core.files.utils import FileProxyMixin
+
+__all__ = ('NamedTemporaryFile', 'gettempdir',)
+
+
+if os.name == 'nt':
+ class TemporaryFile(FileProxyMixin):
+ """
+ Temporary file object constructor that supports reopening of the
+ temporary file in Windows.
+
+ Note that unlike tempfile.NamedTemporaryFile from the standard library,
+ __init__() does not support the 'delete' keyword argument in
+ Python 2.6+, or the 'delete', 'buffering', 'encoding', or 'newline'
+ keyword arguments in Python 3.0+.
+ """
+ def __init__(self, mode='w+b', bufsize=-1, suffix='', prefix='', dir=None):
+ fd, name = tempfile.mkstemp(suffix=suffix, prefix=prefix, dir=dir)
+ self.name = name
+ self.file = os.fdopen(fd, mode, bufsize)
+ self.close_called = False
+
+ # Because close can be called during shutdown
+ # we need to cache os.unlink and access it
+ # as self.unlink only
+ unlink = os.unlink
+
+ def close(self):
+ if not self.close_called:
+ self.close_called = True
+ try:
+ self.file.close()
+ except (OSError, IOError):
+ pass
+ try:
+ self.unlink(self.name)
+ except (OSError):
+ pass
+
+ def __del__(self):
+ self.close()
+
+ def __enter__(self):
+ self.file.__enter__()
+ return self
+
+ def __exit__(self, exc, value, tb):
+ self.file.__exit__(exc, value, tb)
+
+ NamedTemporaryFile = TemporaryFile
+else:
+ NamedTemporaryFile = tempfile.NamedTemporaryFile
+
+gettempdir = tempfile.gettempdir
« no previous file with comments | « venv/Lib/site-packages/django/core/files/storage.py ('k') | venv/Lib/site-packages/django/core/files/uploadedfile.py » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b