HEX
Server: Apache
System: Linux msm5694.mjhst.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: camjab_ssh (1000)
PHP: 5.3.29
Disabled: NONE
Upload Files
File: //lib/python2.7/site-packages/jsonpatch.pyc
ó
µ‹URc@sÃddlmZdZdZdZdZddlZddlZddlZddl	Z	ddl
Z
ddlZejd#krŽe
efZnejZd	efd
„ƒYZdefd„ƒYZd
eefd„ƒYZd„Zd„Zeƒe
_ed„Zd„Zdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZ defd„ƒYZ!defd„ƒYZ"defd „ƒYZ#d!efd"„ƒYZ$dS($iÿÿÿÿ(tunicode_literalsu Stefan Kögl <stefan@skoegl.net>u1.2u0https://github.com/stefankoegl/python-json-patchuModified BSD LicenseNiitJsonPatchExceptioncBseZdZRS(uBase Json Patch exception(t__name__t
__module__t__doc__(((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR:stJsonPatchConflictcBseZdZRS(uRaised if patch could not be applied due to conflict situation such as:
    - attempt to add object key then it already exists;
    - attempt to operate with nonexistence object key;
    - attempt to insert value to array at position beyond of it size;
    - etc.
    (RRR(((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR>stJsonPatchTestFailedcBseZdZRS(u A Test operation failed (RRR(((s-/usr/lib/python2.7/site-packages/jsonpatch.pyRFscCstjtƒ}x%|D]\}}||j|ƒqWx=|jƒD]/\}}t|ƒdkrD|d||<qDqDWt|ƒS(u'Convert duplicate keys values to lists.ii(tcollectionstdefaultdicttlisttappendtitemstlentdict(t
ordered_pairstdtktv((s-/usr/lib/python2.7/site-packages/jsonpatch.pyt	multidictJscCsVddl}ddl}|jtjƒ}d|jkr@tjS|jtjdtƒS(u adds the object_pairs_hook parameter to json.load when possible

    The "object_pairs_hook" parameter is used to handle duplicate keys when
    loading a JSON object. This parameter does not exist in Python 2.6. This
    methods returns an unmodified json.load for Python 2.6 and a partial
    function with object_pairs_hook set to multidict for Python versions that
    support the parameter. iÿÿÿÿNuobject_pairs_hooktobject_pairs_hook(tinspectt	functoolst
getargspectjsontloadtargstpartialR(RRtargspec((s-/usr/lib/python2.7/site-packages/jsonpatch.pytget_loadjsonXs	cCs=t|tƒr!tj|ƒ}nt|ƒ}|j||ƒS(u#Apply list of patches to specified json document.

    :param doc: Document object.
    :type doc: dict

    :param patch: JSON patch as list of dicts or raw JSON-encoded string.
    :type patch: list or str

    :param in_place: While :const:`True` patch will modify target document.
                     By default patch will be applied to document copy.
    :type in_place: bool

    :return: Patched document object.
    :rtype: dict

    >>> doc = {'foo': 'bar'}
    >>> other = apply_patch(doc, [{'op': 'add', 'path': '/baz', 'value': 'qux'}])
    >>> doc is not other
    True
    >>> other == {'foo': 'bar', 'baz': 'qux'}
    True
    >>> apply_patch(doc, [{'op': 'add', 'path': '/baz', 'value': 'qux'}], in_place=True) == {'foo': 'bar', 'baz': 'qux'}
    True
    >>> doc == other
    True
    (t
isinstancet
basestringt	JsonPatchtfrom_stringtapply(tdoctpatchtin_place((s-/usr/lib/python2.7/site-packages/jsonpatch.pytapply_patchmscCstj||ƒS(uÇGenerates patch by comparing of two document objects. Actually is
    a proxy to :meth:`JsonPatch.from_diff` method.

    :param src: Data source document object.
    :type src: dict

    :param dst: Data source document object.
    :type dst: dict

    >>> src = {'foo': 'bar', 'numbers': [1, 3, 4, 8]}
    >>> dst = {'baz': 'qux', 'numbers': [1, 4, 7]}
    >>> patch = make_patch(src, dst)
    >>> new = patch.apply(src)
    >>> new == dst
    True
    (Rt	from_diff(tsrctdst((s-/usr/lib/python2.7/site-packages/jsonpatch.pyt
make_patchsRcBs•eZdZd„Zd„Zd„ZeZd„Zd„Zd„Z	e
d„ƒZe
d„ƒZd	„Z
ed
„ƒZed„Zd„ZRS(
ugA JSON Patch is a list of Patch Operations.

    >>> patch = JsonPatch([
    ...     {'op': 'add', 'path': '/foo', 'value': 'bar'},
    ...     {'op': 'add', 'path': '/baz', 'value': [1, 2, 3]},
    ...     {'op': 'remove', 'path': '/baz/1'},
    ...     {'op': 'test', 'path': '/baz', 'value': [1, 3]},
    ...     {'op': 'replace', 'path': '/baz/0', 'value': 42},
    ...     {'op': 'remove', 'path': '/baz/1'},
    ... ])
    >>> doc = {}
    >>> result = patch.apply(doc)
    >>> expected = {'foo': 'bar', 'baz': [42]}
    >>> result == expected
    True

    JsonPatch object is iterable, so you could easily access to each patch
    statement in loop:

    >>> lpatch = list(patch)
    >>> expected = {'op': 'add', 'path': '/foo', 'value': 'bar'}
    >>> lpatch[0] == expected
    True
    >>> lpatch == patch.patch
    True

    Also JsonPatch could be converted directly to :class:`bool` if it contains
    any operation statements:

    >>> bool(patch)
    True
    >>> bool(JsonPatch([]))
    False

    This behavior is very handy with :func:`make_patch` to write more readable
    code:

    >>> old = {'foo': 'bar', 'numbers': [1, 3, 4, 8]}
    >>> new = {'baz': 'qux', 'numbers': [1, 4, 7]}
    >>> patch = make_patch(old, new)
    >>> if patch:
    ...     # document have changed, do something useful
    ...     patch.apply(old)    #doctest: +ELLIPSIS
    {...}
    cCs@||_itd6td6td6td6td6td6|_dS(Nuremoveuaddureplaceumoveutestucopy(R#tRemoveOperationtAddOperationtReplaceOperationt
MoveOperationt
TestOperationt
CopyOperationt
operations(tselfR#((s-/usr/lib/python2.7/site-packages/jsonpatch.pyt__init__Ñs	cCs
|jƒS(ustr(self) -> self.to_string()(t	to_string(R1((s-/usr/lib/python2.7/site-packages/jsonpatch.pyt__str__ÝscCs
t|jƒS(N(tboolR#(R1((s-/usr/lib/python2.7/site-packages/jsonpatch.pyt__bool__áscCs
t|jƒS(N(titerR#(R1((s-/usr/lib/python2.7/site-packages/jsonpatch.pyt__iter__æscCstt|jƒƒS(N(thashttuplet_ops(R1((s-/usr/lib/python2.7/site-packages/jsonpatch.pyt__hash__êscCs\t|tƒstStt|jƒƒtt|jƒƒko[tttj	|j|jƒƒS(N(
RRtFalseRR	R;talltmaptoperatorteq(R1tother((s-/usr/lib/python2.7/site-packages/jsonpatch.pyt__eq__îs*cCstj|ƒ}||ƒS(u¸Creates JsonPatch instance from string source.

        :param patch_str: JSON patch as raw string.
        :type patch_str: str

        :return: :class:`JsonPatch` instance.
        (Rtloads(tclst	patch_strR#((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR ös	csO‡‡fd†‰‡fd†‰‡fd†‰|tˆdg||ƒƒƒS(uOCreates JsonPatch instance based on comparing of two document
        objects. Json patch would be created for `src` argument against `dst`
        one.

        :param src: Data source document object.
        :type src: dict

        :param dst: Data source document object.
        :type dst: dict

        :return: :class:`JsonPatch` instance.

        >>> src = {'foo': 'bar', 'numbers': [1, 3, 4, 8]}
        >>> dst = {'baz': 'qux', 'numbers': [1, 4, 7]}
        >>> patch = JsonPatch.from_diff(src, dst)
        >>> new = patch.apply(src)
        >>> new == dst
        True
        c3s½||krdSt|tƒrSt|tƒrSxˆˆ|||ƒD]}|VqAWnft|tƒr–t|tƒr–xEˆ|||ƒD]}|Vq„Wn#idd6dj|ƒd6|d6VdS(Nureplaceuopu/upathuvalue(RR
R	tjoin(tpathtvalueRBt	operation(tcompare_dicttcompare_list(s-/usr/lib/python2.7/site-packages/jsonpatch.pytcompare_valuessc3sÏxz|D]r}||krBidd6dj||gƒd6Vqn||g}x'ˆ|||||ƒD]}|VqjWqWxK|D]C}||kr„idd6dj||gƒd6||d6Vq„q„WdS(Nuremoveuopu/upathuadduvalue(RG(RHR'R(tkeytcurrentRJ(RM(s-/usr/lib/python2.7/site-packages/jsonpatch.pyRK#s
#
!

c3s5t|ƒt|ƒ}}xZtt||ƒƒD]C}|t|ƒg}x'ˆ|||||ƒD]}|VqcWq/W||krÙx¬t||ƒD]@}|t|ƒg}idd6dj|ƒd6||d6Vq’WnX||kr1xItt||ƒƒD]/}idd6dj|t|ƒgƒd6VqûWndS(Nuadduopu/upathuvalueuremove(RtrangetmintstrRGtreversed(RHR'R(tlsrctldsttidxRORJ(RM(s-/usr/lib/python2.7/site-packages/jsonpatch.pyRL/s!
.u(R	(RER'R(((RKRLRMs-/usr/lib/python2.7/site-packages/jsonpatch.pyR&scCstj|jƒS(u!Returns patch set as JSON string.(RtdumpsR#(R1((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR3?scCst|j|jƒS(N(R?t_get_operationR#(R1((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR;CscCs?|stj|ƒ}nx |jD]}|j|ƒ}q"W|S(u/Applies the patch to given object.

        :param obj: Document object.
        :type obj: dict

        :param in_place: Tweaks way how patch would be applied - directly to
                         specified `obj` or to his copy.
        :type in_place: bool

        :return: Modified `obj`.
        (tcopytdeepcopyR;R!(R1tobjR$RJ((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR!Gs

cCs|d|krtdƒ‚n|d}t|tƒsCtdƒ‚n||jkretd|ƒ‚n|j|}||ƒS(Nuopu&Operation does not contain 'op' memberuOperation must be a stringuUnknown operation '%s'(RRRR0(R1RJtopRE((s-/usr/lib/python2.7/site-packages/jsonpatch.pyRX\s

(RRRR2R4R6t__nonzero__R8R<RCtclassmethodR R&R3tpropertyR;R=R!RX(((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR£s-						=	tPatchOperationcBs2eZdZd„Zd„Zd„Zd„ZRS(u'A single operation inside a JSON Patch.cCs/|d|_tj|jƒ|_||_dS(Nupath(tlocationtjsonpointertJsonPointertpointerRJ(R1RJ((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR2ps
cCstdƒ‚dS(uAAbstract method that applies patch operation to specified object.u!should implement patch operation.N(tNotImplementedError(R1R[((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR!uscCstt|jjƒƒƒS(N(R9t	frozensetRJR(R1((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR<zscCs#t|tƒstS|j|jkS(N(RR`R=RJ(R1RB((s-/usr/lib/python2.7/site-packages/jsonpatch.pyRC~s(RRRR2R!R<RC(((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR`ms
			R*cBseZdZd„ZRS(u/Removes an object property or an array element.cCsO|jj|ƒ\}}y||=Wn%tk
rJ}tt|ƒƒ‚nX|S(N(Rdtto_lastt
IndexErrorRRR(R1R[tsubobjtparttex((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR!ˆs(RRRR!(((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR*…sR+cBseZdZd„ZRS(u,Adds an object property or an array element.cCsû|jd}|jj|ƒ\}}t|tƒs[t|tƒs[tdttƒƒƒ‚t|tƒrÆ|dkr†|j	|ƒq÷|t
|ƒks¤|dkr³tdƒ‚q÷|j||ƒn1t|tƒr÷|dkrê|}q÷|||<n|S(Nuvalueuinvalid document type %su-iucan't insert outside of list(RJRdRgRR	R
tAssertionErrorttypeR"R
RRtinserttNone(R1R[RIRiRj((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR!•s
!	
(RRRR!(((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR+’sR,cBseZdZd„ZRS(u=Replaces an object property or an array element by new value.cCsé|jd}|jj|ƒ\}}t|tƒs[t|tƒs[tdttƒƒƒ‚|dkrk|St|tƒrª|t
|ƒks˜|dkrÛtdƒ‚qÛn1t|tƒrÛ||krÛtd|ƒ‚qÛn|||<|S(Nuvalueuinvalid document type %siucan't replace outside of listu&can't replace non-existant object '%s'(RJRdRgRR	R
RlRmR"RoRR(R1R[RIRiRj((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR!·s
!
(RRRR!(((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR,´sR-cBseZdZd„ZRS(u=Moves an object property or an array element to new location.cCs±tj|jdƒ}|j|ƒ\}}||}|jj|ƒrVtdƒ‚ntidd6|jdd6ƒj|ƒ}t	idd6|j
d6|d6ƒj|ƒ}|S(Nufromu(Cannot move values into its own childrenuremoveuopupathuadduvalue(RbRcRJRgRdtcontainsRR*R!R+Ra(R1R[tfrom_ptrRiRjRI((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR!Ós
*-(RRRR!(((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR-ÐsR.cBseZdZd„ZRS(u!Test value by specified location.cCsÈyF|jj|ƒ\}}|dkr0|}n|jj||ƒ}Wn%tk
rm}tt|ƒƒ‚nXd|jkrÄ|jd}||krÄtd||t|ƒt|ƒfƒ‚qÄn|S(Nuvalueu4%s is not equal to tested value %s (types %s and %s)(	RdRgRotwalktJsonPointerExceptionRRRRJRm(R1R[RiRjtvalRkRI((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR!ãs	
.(RRRR!(((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR.àsR/cBseZdZd„ZRS(uA Copies an object property or an array element to a new location cCsotj|jdƒ}|j|ƒ\}}tj||ƒ}tidd6|jd6|d6ƒj|ƒ}|S(Nufromuadduopupathuvalue(	RbRcRJRgRYRZR+RaR!(R1R[RqRiRjRI((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR!ùs
-(RRRR!(((s-/usr/lib/python2.7/site-packages/jsonpatch.pyR/ös(ii(%t
__future__Rt
__author__t__version__t__website__t__license__RYtsysR@RRRbtversion_infotbytesRRRRst	ExceptionRRRlRRRRR=R%R)tobjectRR`R*R+R,R-R.R/(((s-/usr/lib/python2.7/site-packages/jsonpatch.pyt<module>!s:			"	Ê
"