U
    mf	                     @   sT   d Z ddlZddlZddlmZ dZejdkrDG dd deZeZnejZej	Z	dS )a6  
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.

The custom version of NamedTemporaryFile doesn't support the same keyword
arguments available in tempfile.NamedTemporaryFile.

1: https://mail.python.org/pipermail/python-list/2005-December/336957.html
2: https://bugs.python.org/issue14243
    N)FileProxyMixin)NamedTemporaryFile
gettempdirntc                   @   s@   e Zd ZdZdddZejZdd	 Zd
d Zdd Z	dd Z
dS )TemporaryFilea.  
        Temporary file object constructor that supports reopening of the
        temporary file in Windows.

        Unlike tempfile.NamedTemporaryFile from the standard library,
        __init__() doesn't support the 'delete', 'buffering', 'encoding', or
        'newline' keyword arguments.
        w+b Nc                 C   s4   t j|||d\}}|| _t|||| _d| _d S )N)suffixprefixdirF)tempfilemkstempnameosfdopenfileclose_called)selfmodebufsizer
   r   r   fdr    r   :/tmp/pip-unpacked-wheel-siwebuq3/django/core/files/temp.py__init__*   s    zTemporaryFile.__init__c                 C   sZ   | j sVd| _ z| j  W n tk
r.   Y nX z| | j W n tk
rT   Y nX d S )NT)r   r   closeOSErrorunlinkr   r   r   r   r   r   5   s    zTemporaryFile.closec                 C   s   |    d S N)r   r   r   r   r   __del__A   s    zTemporaryFile.__del__c                 C   s   | j   | S r   )r   	__enter__r   r   r   r   r!   D   s    
zTemporaryFile.__enter__c                 C   s   | j ||| d S r   )r   __exit__)r   excvaluetbr   r   r   r"   H   s    zTemporaryFile.__exit__)r   r   r	   r	   N)__name__
__module____qualname____doc__r   r   r   r   r    r!   r"   r   r   r   r   r       s   	
	r   )
r)   r   r   Zdjango.core.files.utilsr   __all__r   r   r   r   r   r   r   r   <module>   s   
+