HEX
Server: LiteSpeed
System: Linux shams.tasjeel.ae 5.14.0-611.5.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 11 08:09:09 EST 2025 x86_64
User: infowars (1469)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: //usr/lib64/python3.9/site-packages/borg/helpers/__pycache__/misc.cpython-39.pyc
a

HZ�h�!�@sNddlZddlZddlZddlZddlZddlZddlmZmZddl	m	Z	m
Z
mZddlm
Z
ddlmZddlmZe�Zdd	lmZdd
lmZddlmZddlmZdd
lmZmZdd�Zegd��Zd)dd�Zdd�Zej ed�dd�Z!dd�Z"Gdd�d�Z#dd�Z$dd�Z%d*d d!�Z&Gd"d#�d#ej'�Z(d+d%d&�Z)d'd(�Z*dS),�N)�deque�OrderedDict)�datetime�timezone�	timedelta)�islice)�
attrgetter�)�
create_logger�)�to_localtime)�msgpack)�__version__)�chunker)�
CH_BUZHASH�CH_FIXEDcCsZt�tj�t|dd�}d}g}|D].}|j|kr&|d7}d|f||j<|�|�q&|S)Ni)ZsecondsrrZwithin)rZnowrZutcr�ts�id�append)�archivesZhours�kept_because�targetZkept_counter�result�a�r�7/usr/lib64/python3.9/site-packages/borg/helpers/misc.py�prune_withins
r))Zsecondlyz%Y-%m-%d %H:%M:%S)Zminutelyz%Y-%m-%d %H:%M)Zhourlyz%Y-%m-%d %H)Zdailyz%Y-%m-%d)Zweeklyz%G-%V)Zmonthlyz%Y-%m)Zyearlyz%Yc	Cs�d}g}t|}|duri}|dkr(|Sd}t|td�dd�D]V}t|j��|�}||kr>|}|j|vr>|�|�|t|�f||j<t|�|kr>q�q>|dur�t|�|kr�|j|vr�|�|�|dt|�f||j<|S)NrrT)�key�reversez[oldest])	�PRUNING_PATTERNS�sortedrrr�strftimerr�len)	rZrule�nr�lastZkeep�patternrZperiodrrr�prune_split-s*


r&c	Cs~tj�dd���}|dkrdSt��}t��}zt��}WntyPd}Yn0t	j�
d�rdd}nd}zd�dd	�tj
D��}Wnd
}Yn0ddlm}m}|r�|jnd
}|r�d|jnd}	|�|	�d|�d�}
g}|dur�|�d�d�|���|du�r|�d|�|�d�t||||
��|�dt��t��f�|�dt	j�|�dtj�d��|�d�d�|�S)NZBORG_SHOW_SYSINFOZyes�no�Zlinux)z
Unknown Linuxr(r(�.css|]}t|�VqdS�N)�str)�.0�vrrr�	<genexpr>Y�zsysinfo.<locals>.<genexpr>�unknownr	)�llfuse�BORG_FUSE_IMPL�Nonez %sz [�]zPlatform: {}� zLinux: %s %s %sz,Borg: {}  Python: {} {} msgpack: {} fuse: {}zPID: %d  CWD: %szsys.argv: %rzSSH_ORIGINAL_COMMAND: %rZSSH_ORIGINAL_COMMAND�
)�os�environ�get�lower�platform�python_implementation�python_version�uname�AttributeError�sys�
startswith�joinr
�versionZ	fuse_implr1r2�__name__rr�format�borg_version�getpid�getcwd�argv)Zshow_sysinfor<r=r>Zlinux_distributionZmsgpack_versionr1r2Zllfuse_nameZllfuse_versionZllfuse_info�inforrr�sysinfoGsB



�
rK)�level�loggercGs6g}|D]}|�|���q|D]}|�||�q dS)z�
    log multiple lines of text, each line by a separate logging call for cosmetic reasons

    each positional argument may be a single or multiple lines (separated by newlines) of text.
    N)�extend�
splitlines�log)rLrMZmsgs�lines�msg�linerrr�	log_multins
rTcCs`t|ttf�sJ�t|t�r$t|�}t|�dkrHt|dt�rHtf|}|dttfvs\J�|S)N�r)�
isinstance�list�tupler"�intrr)Zcprrr�normalize_chunker_params{s

rZc@s2eZdZdZddd�Zdd�Zdd�Zd	d
�ZdS)�ChunkIteratorFileWrapperz%File-like wrapper for chunk iteratorsNcCs"||_d|_d|_d|_||_dS)at
        *chunk_iterator* should be an iterator yielding bytes. These will be buffered
        internally as necessary to satisfy .read() calls.

        *read_callback* will be called with one argument, some byte string that has
        just been read and will be subsequently returned to a caller of .read().
        It can be used to update a progress display.
        rr/FN)�chunk_iterator�chunk_offset�chunk�	exhausted�
read_callback)�selfr\r`rrr�__init__�s
	z!ChunkIteratorFileWrapper.__init__cCs\t|j�|j}|sXzt|j�}t|�|_WntyFd|_YdS0d|_t|j�}|S)NTr)r"r^r]�nextr\�
memoryview�
StopIterationr_)ra�	remainingr^rrr�_refill�s

z ChunkIteratorFileWrapper._refillcCs>|sdS|��}t||�}|j|7_|j|j||j�S�Nr/)rg�minr]r^)ra�nbytesrfZ	will_readrrr�_read�s
zChunkIteratorFileWrapper._readcCsJg}|r@|js@|�|�}|t|�8}|�|�|jr|�|�qd�|�Srh)r_rkr"rr`rB)rarj�partsZ	read_datarrr�read�s


zChunkIteratorFileWrapper.read)N)rD�
__module__�__qualname__�__doc__rbrgrkrmrrrrr[�s


r[cCs |j�dd�|jD��}t|�S)z8Return file-like object for archived item (with chunks).cSsg|]
}|j�qSr)r)r,�crrr�
<listcomp>�r/zopen_item.<locals>.<listcomp>)ZpipelineZ
fetch_many�chunksr[)�archive�itemr\rrr�	open_item�srvcst|��t��fdd�g�S)z�
    Chunk an iterator <it> into pieces of <size>.

    >>> list(chunker('ABCDEFG', 3))
    [['A', 'B', 'C'], ['D', 'E', 'F'], ['G']]
    cstt����Sr*)rWrr��iterable�sizerr�<lambda>�r/zchunkit.<locals>.<lambda>)�iter)�itryrrwr�chunkit�sr}cCs,|durt|dd�ntt|||�d�dS)zCAdvance the iterator n-steps ahead. If n is none, consume entirely.Nr)�maxlen)rrcr)�iteratorr#rrr�consume�sr�cs(eZdZ�fdd�Z�fdd�Z�ZS)�ErrorIgnoringTextIOWrappercsN|jsJzt��|�WStyHzt���WntyBYn0Yn0dS)Nr()�closed�superrm�BrokenPipeError�close�OSError)rar#��	__class__rrrm�szErrorIgnoringTextIOWrapper.readcsR|jsJzt��|�WStyHzt���WntyBYn0Yn0t|�Sr*)r�r��writer�r�r�r")ra�sr�rrr��sz ErrorIgnoringTextIOWrapper.write)rDrnrormr��
__classcell__rrr�rr��sr��c	cs�|�|�}t|t�}|rdnd}|p.|r,dnd}t|�dkrv|�|�^}}||g|�R�^}}|EdH|�|�}q0t|�dkr�|VdS)zHIter over chunks of open file ``fd`` delimited by ``sep``. Doesn't trim.r(r/r6�
rN)rmrVr+r"�split)	�fd�sepZ	read_size�bufZis_str�partZpart2�itemsZfullrrr�iter_separated�s


r�cCs�|�d�r|rdnd}nd|�d�r0|r*dnd}nL|�d�rH|rBdnd	}n4|�d
�r`|rZdnd}n|�d
�rx|rrdnd}nd}t�d|�|S)N)z.tar.gzz.tgzzgzip -d�gzip)z.tar.bz2z.tbzzbzip2 -d�bzip2)z.tar.xzz.txzzxz -d�xz)z.tar.lz4zlz4 -dZlz4)z	.tar.zstdz.tar.zstzzstd -dZzstdz'Automatically determined tar filter: %s)�endswithrM�debug)�fname�
decompress�filterrrr�get_tar_filter�s




r�)N)N)Nr�)+Zlogging�ior7Zos.pathr;r@�collectionsrrrrr�	itertoolsr�operatorrrMr
�timerr(r
rrFrZ	constantsrrrrr&rK�INFOrTrZr[rvr}r��
TextIOWrapperr�r�r�rrrr�<module>s:
'
2