File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/__pycache__/json.cpython-310.pyc
o
�N�g� � @ sp d Z ddlZddlZddlZddlZe�e�Zej Z dd� Z
dd� Zdd� Zd d
� Z
dd� Zd
d� Zdd� ZdS )z
Functions to work with JSON
� Nc C s | � � S )z�
Performs a splitlines on the string. This function exists to make mocking
possible in unit tests, since the member functions of the str/unicode
builtins cannot be mocked.
)�
splitlines)�raw� r �C/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/json.py�__split s r c C s� i }t | �}ttt|��}g }g }t|�D ].\}}|�� }|r#|d n|}|dks-|dkr4|�||f� |dks<|dkrC|�||f� qg }|D ]1\} }
t|�D ](\}}|| krx|
dkr`|dksh|
dkrx|dkrx|�| |t|| |d � �f� qPqH|j dd� d d
� |D ]+\} }}
|| �� d }d�
|| |� �| }z
t�|�}|W S t
y� Y q�w t|�D ]>\}}
zd�
||d� �}W n ty� d�
tjj�||d� ��}Y nw zt�|�}W n t
y� Y q�w |r�| S q�|s�t
�dS )
z�
Pass in a raw string and load the json when it starts. This allows for a
string to start or end with garbage but the JSON be cleanly loaded
r �{�[�}�]� c S s | d | d | d | d fS )N� r r r )�xr r r �<lambda>; s zfind_json.<locals>.<lambda>T)�key�reverse�
N)r �list�map�len� enumerate�lstrip�append�reversed�sum�sort�join�json�loads�
ValueError�UnicodeDecodeError�salt�utils�data�decode)r �ret�linesZlengthsZstartsZendsZind�lineZstarts_ends�startZ
start_char�endZend_br�_Zend_strZworkingr r r � find_json sb � ��
� ����r* c C s>