utility set of handling dict
Project description
features
deepmerge
deepequal
walker
diff
deepmerge
from dictknife import deepmerge
d0 = {
"a": {
"x": 1
},
"b": {
"y": 10
},
}
d1 = {
"a": {
"x": 1
},
"b": {
"z": 10
},
"c": 100
}
actual = deepmerge(d0, d1)
expected = {
"a": {
"x": 1
},
"b": {
"y": 10,
"z": 10
},
"c": 100
}
assert actual == expected
walker
using LooseDictWalkingIterator example.
import json
import pprint
from dictknife import LooseDictWalkingIterator
# from: https://github.com/BigstickCarpet/json-schema-ref-parser
d = json.loads("""
{
"definitions": {
"person": {
"$ref": "schemas/people/Bruce-Wayne.json"
},
"place": {
"$ref": "schemas/places.yaml#/definitions/Gotham-City"
},
"thing": {
"$ref": "http://wayne-enterprises.com/things/batmobile"
},
"color": {
"$ref": "#/definitions/thing/properties/colors/black-as-the-night"
}
}
}
""")
refs = []
iterator = LooseDictWalkingIterator(["$ref"])
for path, sd in iterator.iterate(d):
refs.append((path[:], sd["$ref"]))
pprint.pprint(refs)
output
[(['definitions', 'color', '$ref'],
'#/definitions/thing/properties/colors/black-as-the-night'),
(['definitions', 'place', '$ref'],
'schemas/places.yaml#/definitions/Gotham-City'),
(['definitions', 'thing', '$ref'],
'http://wayne-enterprises.com/things/batmobile'),
(['definitions', 'person', '$ref'], 'schemas/people/Bruce-Wayne.json')]
todo: description about chains and operator and context,…
command
install dictknife via pip install dictknife[command] .
concat
transform
diff
TODO: gentle introduction
concat
$ dicknife concat a.yaml b.yaml c.json
transform
$ dicknife transform --function misc/transform.py:lift --src src/01transform/properties.yaml --config '{"name": "person"}'
# or
$ dictknife transform --code 'lambda d,**kwargs: {"definitions": {"person": d}}' --src src/01transform/properties.yaml
diff
$ dictknife diff a.yaml b.yaml
$ dictknife diff --sort-keys a.yaml b.yaml
--- src/02diff/left.yaml
+++ src/02diff/right.json
@@ -1,13 +1,12 @@
{
- "Person": {
+ "person": {
"properties": {
- "Name": {
+ "name": {
"type": "string",
- "description": "someone's name"
+ "description": "Someone's name"
},
- "Age": {
- "type": "integer",
- "description": "age"
+ "age": {
+ "type": "integer"
}
}
}
0.4.7
loading via envvar with white list
jsonknife deref with –unwrap,–wrap option and –ref supports ‘<unwrap>@<wrap>’ expression
jsonknife bundle generating ordered output
0.4.5
dictknife concat with list JSON
omitting deprecated commands (extract, lift)
0.4.4
adjusting commands options
changing yaml’s multine line string format
0.4.3
raw format
0.4.2
deepmerge with override option
toml support
jsonknife cut command
0.4.1
some commands have format option
some fixes
0.3
command extras pip install dictknife[command]
adding dictknife-concat command
adding dictknife-transform command
adding dictknife-diff command
0.2
external iterator is recommened. (using LooseDictWalkingIterator instead of LooseDictWalker)
0.1
yaml/json load extras (pip install dictknife[load])
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for dictknife-0.4.7-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 31b964dd9d3998e3f63e448baaa1c911ea1b3432b973e84db268205bf60e8dea |
|
MD5 | 89e0307edffb836e1f9ac0bf582b3ca8 |
|
BLAKE2b-256 | 3b5d91d7066fecfb906d467ca74cd14845bd7582b10bdd301a52fd9a504fa738 |