
_                 @   sK  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l m Z d d l m	 Z	 d Z
 e j d k r8y d d l Z d Z d Z e j j j Z d	 d
   Z e j j j Z e j j j Z e j j j Z e j j j Z d Z
 d d   Z Wn* e k
 r(d d
   Z d d   Z Yn Xd d   Z n e j Z d Z
 d S)am  
    werkzeug.posixemulation
    ~~~~~~~~~~~~~~~~~~~~~~~

    Provides a POSIX emulation for some features that are relevant to
    web applications.  The main purpose is to simplify support for
    systems such as Windows NT that are not 100% POSIX compatible.

    Currently this only implements a :func:`rename` function that
    follows POSIX semantics.  Eg: if the target file already exists it
    will be replaced without asking.

    This module was introduced in 0.6.1 and is not a public interface.
    It might become one in later versions of Werkzeug.

    :copyright: 2007 Pallets
    :license: BSD-3-Clause
    N   )
to_unicode)get_filesystem_encodingFnt   c             C   s   t  |  t    }  t  | t    } t |  |  r7 d Sd } d } xJ | r | d k  r t |  | t t B } | sF t j d  | d 7} qF W| S)NTr   Fd   gMbP?r   )r   r   _rename_atomic_MoveFileEx_MOVEFILE_REPLACE_EXISTING_MOVEFILE_WRITE_THROUGHtimesleep)srcdstretryrv r   ;/tmp/pip-build-5gj8f0j9/Werkzeug/werkzeug/posixemulation.py_rename'   s    r   Tc             C   s   t  d  d d d d d d  } | d k r. d Szz d } d } xc | r | d k  r t |  | d  d  t t B|  } | r t |  } Pq@ t j d  | d 7} q@ W| SWd  t |  Xd  S)	Nr   i  zWerkzeug renamer   Fr   gMbP?)_CreateTransaction_MoveFileTransactedr
   r   _CommitTransactionr   r   _CloseHandle)r   r   tar   r   r   r   r   r   >   s*    	r   c             C   s   d S)NFr   )r   r   r   r   r   r   Z   s    c             C   s   d S)NFr   )r   r   r   r   r   r   ]   s    c             C   s   t  |  |  r d  Sy t j |  |  Wn t k
 r } z | j t j k rQ   d | t j d t j	  f } t j | |  t j |  |  y t j
 |  Wn t k
 r Yn XWYd  d  } ~ Xn Xd  S)Nz%s-%08xr   )r   osrenameOSErrorerrnoEEXISTrandomrandintsysmaxsizeunlink	Exception)r   r   eoldr   r   r   r   `   s    r   ) __doc__r   r   r    r"   r   _compatr   
filesystemr   Zcan_rename_open_filenamectypesr
   r   windllkernel32ZMoveFileExWr	   r   Zktmw32ZCreateTransactionr   ZCommitTransactionr   ZMoveFileTransactedWr   ZCloseHandler   r   r%   r   r   r   r   r   <module>   s6   	