o
    i                     @   s   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rnz-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W n eyg   dd
 Zdd ZY nw dd ZdS 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   sp   t | t } t |t }t| |rdS d}d}|s6|dk r6t| |ttB }|s0td |d7 }|s6|dk s|S )NTr   Fd   MbP?r   )r   r   _rename_atomic_MoveFileEx_MOVEFILE_REPLACE_EXISTING_MOVEFILE_WRITE_THROUGHtimesleep)srcdstretryrv r   R/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/werkzeug/posixemulation.py_rename'   s   


r   Tc                 C   s   t d dddddd}|dkrdS z2d}d}|s<|dk r<t| |d d ttB |}|r-t|}ntd |d7 }|s<|dk s|W t| S t| w )	Nr   i  zWerkzeug renameFr   r   r   )_CreateTransaction_MoveFileTransactedr   r   _CommitTransactionr   r   _CloseHandle)r   r   tar   r   r   r   r   r	   >   s.   
r	   c                 C      dS NFr   r   r   r   r   r   r   Z      c                 C   r   r   r   r   r   r   r   r	   ]   r   c                 C   s   t | |rd S z	t| | W d S  tyY } z=|jtjkr d|tdtj	f }t|| t| | zt
| W n	 tyF   Y nw W Y d }~d S W Y d }~d S d }~ww )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   can_rename_open_filenamectypesr   r   windllkernel32MoveFileExWr
   r   ktmw32CreateTransactionr   CommitTransactionr   MoveFileTransactedWr   CloseHandler   r	   r*   r!   r   r   r   r   <module>   s:   





