HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.109.1.lve.el8.x86_64 #1 SMP Thu Mar 5 20:23:46 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.30
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/__pycache__/atomicfile.cpython-310.pyc
o

�N�g�@sdZddlZddlZddlZddlZddlZddlZddlZddlZ	ddl
Z	dZejdkrqdd�Z
dd�Zz-ddlZd	Zd
ZejjjZdd�Z
ejjjZejjjZejjjZejjjZdZd
d�ZWn	eykYnwdd�Z nej!Z dZGdd�d�Z"ddd�Z#dS)zY
A module written originally by Armin Ronacher to manage file transfers in an
atomic way
�NF�ntcC�dS�NF���src�dstrr�I/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/atomicfile.py�_rename�r
cCrrrrrrr	�_rename_atomicrr��cCs�t|t�st|t���}t|t�st|t���}t||�rdSd}d}|sB|dkrBt||ttB�}|s<t�	d�|d7}|sB|dks)|S)NTrF�d���MbP?r
)
�
isinstance�str�sys�getfilesystemencodingr�_MoveFileEx�_MOVEFILE_REPLACE_EXISTING�_MOVEFILE_WRITE_THROUGH�time�sleep)rr�retry�rvalrrr	r
!s"



�
�TcCs�tddddddd�}|dkrdSz2d}d}|s<|dkr<t||ddttB|�}|r-t|�}nt�d�|d7}|s<|dks|Wt|�St|�w)	Nri�z
Atomic rename���Frrr
)�_CreateTransaction�_MoveFileTransactedrr�_CommitTransactionrr�_CloseHandle)rrZtrarrrrr	r<s.�
�cCs�t||�rdSz	t�||�WdSty[}z?|jtjkr�|�dt�dtj	�d��}t�||�t�||�zt�
|�Wn	tyHYnwWYd}~dSWYd}~dSd}~ww)N�-rZ08x)r
�os�rename�OSError�errnoZEEXIST�random�randintrZmaxint�unlink�	Exception)rr�err�oldrrr	�
atomic_renameYs&
����r,c@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�_AtomicWFilez/
    Helper class for :func:`atomic_open`.
    cCs||_||_||_dS�N)�_fh�
_tmp_filename�	_filename)�selfZfhanleZtmp_filename�filenamerrr	�__init__us
z_AtomicWFile.__init__cCst|j|�Sr.)�getattrr/)r2�attrrrr	�__getattr__zsz_AtomicWFile.__getattr__cCs|Sr.r�r2rrr	�	__enter__}rz_AtomicWFile.__enter__cCs�|jjrdS|j��tjjjr#tj�	|j
�r"tjjj|j
|jd�n.tj�	|j
�rCt
�|j
|j�t�|j
�}t�|j|j|j�nt�|jdtjj��@�t|j|j
�dS)N)�source�targeti�)r/�closed�close�salt�utilsZwin_daclZ	HAS_WIN32r"�path�isfiler1Z
copy_securityr0�shutil�copymode�stat�chown�st_uid�st_gid�chmod�filesZ	get_umaskr,)r2�strrr	r=�s

��z_AtomicWFile.closecCsF|dur
|��dS|j��z	t�|j�WdSty"YdSwr.)r=r/r"�remover0r$)r2�exc_type�	exc_value�	tracebackrrr	�__exit__�s
�z_AtomicWFile.__exit__cCs&d�|jj|jjrdpd|j|jj�S)Nz<{} {}{}, mode {}>zclosed �)�format�	__class__�__name__r/r<r1�moder8rrr	�__repr__�s�z_AtomicWFile.__repr__N)
rS�
__module__�__qualname__�__doc__r4r7r9r=rOrUrrrr	r-ps
r-�wcCsT|dvrtd��dtj�|�dd�}d|vrd|d<tj|fi|��}t||j|�S)	z�
    Works like a regular `open()` but writes updates into a temporary
    file instead of the given file and moves it over when the file is
    closed.  The file returned behaves as if it was a regular Python
    )�r�rbzr+zrb+�a�abz0Read or append modes don't work with atomic_openz.___atomic_writeF)�prefix�dir�delete�brP�newline)�	TypeErrorr"r@�dirname�tempfileZNamedTemporaryFiler-�name)r3rT�kwargsZntfrrr	�atomic_open�s
�rh)rY)$rXr%r"r&rBrrerZsalt.utils.filesr>Zsalt.utils.win_daclZCAN_RENAME_OPEN_FILErfr
r�ctypesrrZwindllZkernel32ZMoveFileExWrZktmw32ZCreateTransactionrZCommitTransactionrZMoveFileTransactedWrZCloseHandler r)r,r#r-rhrrrr	�<module>sD





�
6