HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux ns3133907 6.8.0-86-generic #87-Ubuntu SMP PREEMPT_DYNAMIC Mon Sep 22 18:03:36 UTC 2025 x86_64
User: cssnetorguk (1024)
PHP: 8.2.28
Disabled: NONE
Upload Files
File: //usr/libexec/kcare/python/kcarectl/__pycache__/utils.cpython-312.pyc
�

p��gF��L�ddlZddlZddlZddlZddlZddlZddlZddlmZddlm	Z	ddlm
Z
	ej$d�ZdZed�Zed	�Zed�Zdd
�Zdd�Zdd�Zdd
�Zd�Zd d�Zdedfd�Zd�Z d�Z!d�Z"d�Z#d�Z$d�Z%ed��Z&d�Z'd!d�Z(d!d�Z)d�Z*d�Z+y)"�N)�datetime�)�	constants)�configz^(\d+[.]\d+[-]\d+)���c��|dz}tjj|�}|r4tjj|�stj|�t||�5}|j
|�|j�tj|j��ddd�tj
|tj�}	tj|�tj|�tj||�y#1swY�oxYw#tj|�wxYw)Nz.tmp)
�os�path�dirname�exists�makedirs�open�write�flush�fsync�fileno�O_RDONLY�close�rename)�fname�content�
ensure_dir�mode�	tmp_fname�dname�f�	folder_fds        �+/usr/libexec/kcare/python/kcarectl/utils.py�atomic_writer!!s������I��G�G�O�O�I�&�E��"�'�'�.�.��/�
���E��	
�i��	��!�	�����	���	�
�������������r�{�{�+�I��
�����
������I�I�i������	�����s�'AD�D&�D#�&D=c��t|�tur|St|�tur|j|�S|j	|�S�N)�type�ntype�btype�decode�encode��data�encodings  r �nstrr,8s=���D�z�U����	
�d��u�	��{�{�8�$�$��{�{�8�$�$r	c�J�t|�tur|j|�}|Sr#)r$�utyper(r)s  r �bstrr/B�!���D�z�U���{�{�8�$���Kr	c�J�t|�tur|j|�}|Sr#)r$r&r'r)s  r �ustrr2Ir0r	c����i�tj����fd��}�|_�j|_�|_|S)Nc���|tt|j���f}	�|S#t$rYnwxYw�|i|��x}�|<|Sr#)�tuple�sorted�items�KeyError)�args�kwargs�	cache_key�result�cache�fns    ��r �innerzcached.<locals>.innerTs]����5������!7�8�9�	�	���#�#���	��	��$&��$7��$7�7���y�!��
s�,�	8�8)�	functools�wrapsr=�clear�orig)r>r?r=s` @r �cachedrDPsC����E��_�_�R������E�K��+�+�E�K��E�J��Lr	c���������tj���tj���tj�i������fd�}|S)Nc����������fd�}|S)Nc�Z���	}t��D]}	�
|i|��cS	�
|i|��S#t$r}�|��s�Yd}~nd}~wwxYwtj|�t	|tjd��ztj�}�#t$r}t|d���d}~wwxYw)Nr�attempts)
�range�	Exception�time�sleep�min�random�uniformr�RETRY_MAX_DELAY�setattr)r9r:�ldelay�_�ex�final_ex�backoff�check_retry�count�delayr>�states      ������r r?z'retry.<locals>.decorator.<locals>.innerps�����F��5�\�	
]����t�.�v�.�.�	
]�
��4�*�6�*�*��!��&�r�5�1��2�����
�
�6�"��V�f�n�n�Q��&@�@�)�B[�B[�\����
���*�e�4���
�s)�'�B�	A�
?�A�	B*�B%�%B*�)r>r?rVrWrXrYrZs` �����r �	decoratorzretry.<locals>.decoratoros���	�	�&�r	)r�RETRY_DELAY�RETRY_COUNT�
RETRY_BACKOFF)rWrXrYrVr\rZs```` @r �retryr`dsJ����}��%�%���}��%�%�����)�)���E���,�r	c�j�tjj|�syg}tj|�}|�t	j
||�}|D]i}tjj
||�}||k7r0|jtj|�j|f�|jd���k||dD]n\}}	tjj|	�stjj|	�rtj|	��Ztj|	��py)NT)�reverse)rrr�listdir�fnmatch�filter�join�append�stat�st_mtime�sort�isfile�islink�remove�shutil�rmtree)
�	directory�exclude_path�keep_n�patternr*r7�item�	full_pathrS�entrys
          r �clean_directoryrw�s���
�7�7�>�>�)�$��
�D��J�J�y�!�E������u�g�.��� ���G�G�L�L��D�1�	���$��K�K�����+�4�4�i�@�A��	�	�$�	��	 �
���M�!���5�
�7�7�>�>�%� �B�G�G�N�N�5�$9��I�I�e���M�M�%� �	!r	c��ttjjtj
d�d��ttjjtj
d�d��tjj
tj�r$tjtj�yy)N�modulesr)rr�patches)	rwrrrfr�PATCH_CACHEr�CACHE_KEY_DUMP_PATH�unlinkr[r	r �clear_all_cacher~�sm���B�G�G�L�L��!6�!6�	�B�1�M��B�G�G�L�L��!6�!6�	�B�1�M�	�w�w�~�~�i�3�3�4�
�	�	�)�/�/�0�5r	c�~�tjj|�}tjj|�stj|�t|d�5}t
j||�|j�tj|j��ddd�y#1swYyxYw)N�wb)rrr
rrrrn�copyfileobjrrr)�response�dst�
parent_dirrs    r �save_to_filer��s{��������%�J�
�7�7�>�>�*�%�
���J��	
�c�4���A����8�Q�'�	���	�
�����������s
� A
B3�3B<c�^�tj|�}|xr|jd�xs|S)Nr)�
VERSION_RE�match�group)�versionr�s  r �strip_version_timestampr��s*�����W�%�E��#�U�[�[��^�.�w�.r	c��|jd�\}}}|s|jd�\}}}tj|d�S)N�T� z%Y-%m-%d)�	partitionr�strptime)�str_raw�str_date�seprSs    r �parse_response_dater��sG���(�(��-��H�c�1�� �*�*�3�/���!�Q����X�z�2�2r	c�j�djd�tdtjf|z�D��S)N�/c3�>K�|]}|jd����y�w)r�N)�strip)�.0�its  r �	<genexpr>z'get_patch_server_url.<locals>.<genexpr>�s����Y�b�B�H�H�S�M�Y�s�)rfrer�PATCH_SERVER)�partss r �get_patch_server_urlr��s-���8�8�Y�F�4�&�:M�:M�9O�RW�9W�,X�Y�Y�Yr	c��tjj|�syt|�5}|j	�j�cddd�S#1swYyxYwr#)rrrr�readr�)�filenamers  r �try_to_readr��sC��
�7�7�>�>�(�#��	
�h�� �1��v�v�x�~�~�� � � �s�A�Ac�4�ttj�Sr#)r�rr|r[r	r �
get_cache_keyr��s���y�4�4�5�5r	c��tjj|�s|St||�5}|j	�cddd�S#1swYyxYwr#)rrrrr�)rr�defaultrs    r �
_read_filer��sA��
�7�7�>�>�%� ���	
�e�T�	��a��v�v�x����s�A�Ac� �t|d|�}|S)N�r�r��rr�r<s   r �	read_filer��s��
��s�G�
,�F��Mr	c� �t|d|�}|S)N�rbr�r�s   r �
read_file_binr��s��
��t�W�
-�F��Mr	c��i}|j�}|D]0}|s�|jd�\}}}|s�|j�||<�2|S)N�:)�
splitlinesr�r�)r*r<�
data_lines�line�key�	delimiter�values       r �data_as_dictr��sS��
�F����"�J��,���$(�N�N�3�$7�!�C��E��#�k�k�m��s��	,�
�Mr	c�N�tttj���Sr#)�str�intrKr[r	r �
timestamp_strr��s���s�4�9�9�;�� � r	)F�w)zutf-8)�latin1)NNNr#),rrdr@�rernrNrKrrrr�typing�Any�Optional�Union�Callable�TypeVarr��compiler��
CACHE_ENTRIESr$r%r&r.r!r,r/r2rDr`rwr~r�r�r�r�r�r�r�r�r�r�r�r[r	r �<module>r�s���

���	�
�
�����	��R�Z�Z�-�
.�
��
�	
�R����S�	���S�	�� �.%����(!�H-1��PT�!�(1��/�3�Z�
 ��6��6�
���	�!r