File: //usr/local/lib/python3.10/dist-packages/__pycache__/jsonpointer.cpython-310.pyc
o
���gi) � @ s� d Z dZdZdZdZddlZddlZddlmZm Z ddl
mZmZ e
� Zdd
d�Zefdd
�Zdd� ZG dd� de�ZG dd� de
�ZG dd� de
�Zdd� Zdd� ZdS )z7 Identify specific nodes in a JSON document (RFC 6901) u Stefan Kögl <stefan@skoegl.net>z3.0.0z2https://github.com/stefankoegl/python-json-pointerzModified BSD License� N)�Mapping�Sequence)�tee�chainTc C s t |�}|�| ||�S )a� Resolves a pointer against doc and sets the value of the target within doc.
With inplace set to true, doc is modified as long as pointer is not the
root.
>>> obj = {'foo': {'anArray': [ {'prop': 44}], 'another prop': {'baz': 'A string' }}}
>>> set_pointer(obj, '/foo/anArray/0/prop', 55) == {'foo': {'another prop': {'baz': 'A string'}, 'anArray': [{'prop': 55}]}}
True
>>> set_pointer(obj, '/foo/yet another prop', 'added prop') == {'foo': {'another prop': {'baz': 'A string'}, 'yet another prop': 'added prop', 'anArray': [{'prop': 55}]}}
True
>>> obj = {'foo': {}}
>>> set_pointer(obj, '/foo/a%20b', 'x') == {'foo': {'a%20b': 'x' }}
True
)�JsonPointer�set)�doc�pointer�value�inplace� r �6/usr/local/lib/python3.10/dist-packages/jsonpointer.py�set_pointer1 s r c C s t |�}|�| |�S )aa Resolves pointer against doc and returns the referenced object
>>> obj = {'foo': {'anArray': [ {'prop': 44}], 'another prop': {'baz': 'A string' }}, 'a%20b': 1, 'c d': 2}
>>> resolve_pointer(obj, '') == obj
True
>>> resolve_pointer(obj, '/foo') == obj['foo']
True
>>> resolve_pointer(obj, '/foo/another prop') == obj['foo']['another prop']
True
>>> resolve_pointer(obj, '/foo/another prop/baz') == obj['foo']['another prop']['baz']
True
>>> resolve_pointer(obj, '/foo/anArray/0') == obj['foo']['anArray'][0]
True
>>> resolve_pointer(obj, '/some/path', None) == None
True
>>> resolve_pointer(obj, '/a b', None) == None
True
>>> resolve_pointer(obj, '/a%20b') == 1
True
>>> resolve_pointer(obj, '/c d') == 2
True
>>> resolve_pointer(obj, '/c%20d', None) == None
True
)r �resolve)r r �defaultr r r
�resolve_pointerK s $r c C s t | �\}}|D ]} t||�S )z� Transforms a list to a list of tuples of adjacent items
s -> (s0,s1), (s1,s2), (s2, s3), ...
>>> list(pairwise([]))
[]
>>> list(pairwise([1]))
[]
>>> list(pairwise([1, 2, 3, 4]))
[(1, 2), (2, 3), (3, 4)]
)r �zip)�iterable�a�b�_r r r
�pairwises s
r c @ s e Zd ZdS )�JsonPointerExceptionN)�__name__�
__module__�__qualname__r r r r
r � s r c @ s e Zd ZdZdd� Zdd� ZdS )� EndOfListz)Result of accessing element "-" of a listc C s
|| _ d S �N)�list_)�selfr r r r
�__init__� �
zEndOfList.__init__c C s dj | jjt| j�d�S )Nz{cls}({lst}))�cls�lst)�format� __class__r �reprr �r r r r
�__repr__� s
�zEndOfList.__repr__N)r r r �__doc__r r( r r r r
r � s r c @ s� e Zd ZdZe�d�Ze�d�Zdd� Zdd� Z e
fdd �ZeZd(dd�Z
ed
d� �Zdd� Zdd� Zdd� Zdd� Zdd� Zdd� Zedd� �Zdd� Zdd � Zd!d"� Zd#d$� Zed%d&� �Zd'S ))r z:A JSON Pointer that can reference parts of a JSON documentz0|[1-9][0-9]*$z(~[^01]|~$)c C sZ | j �|�}|rtd�|�� ���|�d�}|�d�dkr!td��dd� |D �}|| _d S )NzFound invalid escape {}�/r � zLocation must start with /c S � g | ]}t |��qS r )�unescape��.0�partr r r
�
<listcomp>� � z(JsonPointer.__init__.<locals>.<listcomp>)�_RE_INVALID_ESCAPE�searchr r$ �group�split�pop�parts)r r �invalid_escaper8 r r r
r � s �
zJsonPointer.__init__c C sD | j s|dfS | j dd� D ]}| �||�}q|t�|| j d �fS )z>Resolves ptr until the last step, returns (sub-doc, last-step)N���)r8 �walkr �get_part�r r r0 r r r
�to_last� s
zJsonPointer.to_lastc C sD | j D ]}z| �||�}W q ty |tu r� | Y S w |S )zBResolves the pointer against doc and returns the referenced object)r8 r; r �_nothing)r r r r0 r r r
r � s
�zJsonPointer.resolveTc C sf t | j�dkr|r
td��|S |st�|�}| �|�\}}t|t�r-|dkr-|�|� |S |||<