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.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.3-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 53f7881556af4ddfe3efd470cd1703a31f909bd252b1945dcb18c9018a368f64 |
|
MD5 | 5ec83f36f59e68a098f4655f357fc986 |
|
BLAKE2b-256 | 82301f35e80b5f2c62cefb4819ac1864165b2d224c207c52dc41b1fea104a1c9 |