Patch#
Patch configuration documents.
Follows the description in RFC 6902: JSON Patch.
Operation assign has been added as a simplified replace,
dropping the requirement that
the target location must exist for the operation to be successful.
It also allows appending to an array with key -.
Operation merge has been added to merge an object into an object or extend an array with an array. When merging objects, existing keys will be replaced.
A shorthand notation is also supported,
using an array (list) instead of an object (dict) per operation.
A shorthand list consists of
a shorthand op (
+-@<$?=&),a path and
a from or value field if relevant, depending on the operation.
Operation |
Shorthand |
Third element |
|---|---|---|
add |
|
value |
remove |
|
- |
replace |
|
value |
move |
|
from |
copy |
|
from |
test |
|
value |
assign |
|
value |
merge |
|
value |
Operations are applied in order of appearance.
Toplevel patching is not supported for in-place patching.
[
{ "op": "test", "path": "/a/b/c", "value": "foo" },
{ "op": "remove", "path": "/a/b/c" },
{ "op": "add", "path": "/a/b/c", "value": [ "foo", "bar" ] },
{ "op": "replace", "path": "/a/b/c", "value": 42 },
{ "op": "move", "from": "/a/b/c", "path": "/a/b/d" },
{ "op": "copy", "from": "/a/b/d", "path": "/a/b/e" }
]
[
[ "?", "/a/b/c", "foo" ],
[ "-", "/a/b/c" ],
[ "+", "/a/b/c", [ "foo", "bar" ] ],
[ "@", "/a/b/c", 42 ],
[ "<", "/a/b/d", "/a/b/c" ],
[ "$", "/a/b/e", "/a/b/d" ]
]
Patch#
- class rconf.patch.PatchOperation#
Patch operations.
Follows the definitions in RFC 6902 section 4. Operation assign is added for convenience.
Operation merge has been added to merge an object into an object or extend an array with an array. When merging objects, existing keys will be replaced.
rconf.patch.PatchOperationcan be indexed with a full or shorthand name.
- class rconf.patch.PatchOperationObject#
A single patch operation object.
The operation object is defined in RFC 6902 section 4.
value and from are merged into value.
- __init__(op, path, value=None, *, pointer_type=<class 'rconf.pointer.JSONPointer'>, **kwargs)#
Build a
rconf.patch.PatchOperationObject.- Parameters:
- Return type:
None
valuewill be interpreted as an operation’s from for move and copy (PatchOperation.MOVEandPatchOperation.COPY). If missing, it will look for an explicit from field in kwargs.
- apply(doc)#
Apply the
PatchOperationObject.- Parameters:
doc (rconf.Value) – The document to patch.
- Raises:
rconf.patch.PatchErrorfor errors while patching,rconf.patch.PatchTestErrorfor failing tests.- Return type:
- class rconf.patch.Patch#
-
- __init__(diff=None, pointer_type=<class 'rconf.pointer.JSONPointer'>)#
Build a
rconf.patch.Patch.The
diffconsists of a list of Patch Operation Objects, represented as- Parameters:
diff (list[PatchOperationObject | dict[str, rconf.Value] | list[rconf.Value]] | None) –
pointer_type (type[rconf.pointer.Pointer]) –
- Return type:
None
- add(op, path, value=None, **kwargs)#
Add a single operation object.
valuewill be interpreted as an operation’s from for move and copy (PatchOperation.MOVEandPatchOperation.COPY).
- apply(doc, *, in_place=False)#
Apply the
Patchtodocand return the patchedValue.- Parameters:
doc (rconf.Value) – The document to patch.
in_place (bool) – Apply the changes to
docinstead of a copy.
- Raises:
rconf.patch.PatchErrorfor invalid patches,rconf.patch.PatchTestErrorfor failing tests.- Return type:
Exceptions#
- class rconf.patch.PatchError#
A generic Patch exception.
- __new__(**kwargs)#
- __init__(*args, **kwargs)#
- class rconf.patch.PatchTestError#
Raised if a patch document test fails.
- __new__(**kwargs)#
- __init__(*args, **kwargs)#
- class rconf.patch.PatchValueError#
Raised if a patch document is not valid.
- __new__(**kwargs)#
- __init__(*args, **kwargs)#
- class rconf.patch.PatchLookupError#
Raised if a path in a patch can’t be resolved.
- __new__(**kwargs)#
- __init__(*args, **kwargs)#