a
    Lcòf²  ã                   @   sD   d Z ddlZddlmZmZ ddlmZ dgZdd„ Zdd
d„Z	dS )zž
Move a file in the safest way possible::

    >>> from django.core.files.move import file_move_safe
    >>> file_move_safe("/tmp/old_file", "/tmp/new_file")
é    N)ÚcopymodeÚcopystat)ÚlocksÚfile_move_safec                 C   sZ   t tjdƒr2ztj | |¡W S  ty0   Y dS 0 tj tj | ¡¡tj tj |¡¡kS )NÚsamefileF)ÚhasattrÚosÚpathr   ÚOSErrorÚnormcaseÚabspath)ÚsrcÚdst© r   úS/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/django/core/files/move.pyÚ	_samefile   s    
ÿr   é   Fc                 C   s¤  t | |ƒrdS z0|s.t |tj¡r.td| ƒ‚t | |¡ W dS  tyP   Y n0 t| dƒ� }t |tjtj	B t
tddƒB |s„tjndB ¡}zJt |tj¡ d}|dkrÀ| |¡}t ||¡ q W t |¡ t |¡ nt |¡ t |¡ 0 W d  ƒ n1 �s0    Y  zt| |ƒ W n8 t�yT   zt| |ƒ W n t�yN   Y n0 Y n0 zt | ¡ W n: t�yž } z t
|ddƒdk�rŠ‚ W Y d}~n
d}~0 0 dS )	aU  
    Move a file from one location to another in the safest way possible.

    First, try ``os.rename``, which is simple but will break across filesystems.
    If that fails, stream manually from one file to another in pure Python.

    If the destination file exists and ``allow_overwrite`` is ``False``, raise
    ``FileExistsError``.
    Nz8Destination file %s exists and allow_overwrite is False.ÚrbÚO_BINARYr   ó    Úwinerroré    )r   r   ÚaccessÚF_OKÚFileExistsErrorÚrenamer
   ÚopenÚO_WRONLYÚO_CREATÚgetattrÚO_EXCLr   ÚlockZLOCK_EXÚreadÚwriteÚunlockÚcloser   ÚPermissionErrorr   Úremove)Zold_file_nameZnew_file_nameÚ
chunk_sizeZallow_overwriteZold_fileÚfdZcurrent_chunkÚer   r   r   r      s\    
ÿÿÿ
þýý	

ÿ
,)r   F)
Ú__doc__r   Úshutilr   r   Zdjango.core.filesr   Ú__all__r   r   r   r   r   r   Ú<module>   s    ÿ