Convert JSON patch into pymongo
Project description
jsonpatch2pymongo
Introduction
- This is a port of jsonpatch to mongodb and jsonpatch to mongodb - golang into python language.
- Anyone who want to apply differences between 2 JSON data into mongodb using pymongo's update_many() function will be beneficial from this.
How to use
First, you need to get patch list generated by jsonpatch package.
>>> src = {'foo': 'bar', 'numbers': [1, 3, 4, 8]}
>>> dst = {'baz': 'qux', 'numbers': [1, 4, 7]}
>>> patch = jsonpatch.JsonPatch.from_diff(src, dst)
# or equivalently
>>> patch = jsonpatch.make_patch(src, dst)
>>> patch.patch
[{'op': 'remove', 'path': '/foo'}, {'op': 'add', 'path': '/baz', 'value': 'qux'}, {'op': 'remove', 'path': '/numbers/1'}, {'op': 'add', 'path': '/numbers/2', 'value': 7}, {'op': 'remove', 'path': '/numbers/3'}]
Once patch(list of each patch) is available, you can pass it to this function
>>> update = jsonpatch2pymongo(patch.patch)
>>> update
{'$set': {'baz': 'qux'}, '$unset': {'foo': 1, 'numbers.1': 1, 'numbers.3': 1}, '$push': {'numbers': {'$each': [7], '$position': 2}}}
And finally, you can pass update
into pymongo's update or update_many function
db.collection.update_many(filter, update)
Testcases
- Install pytest package and run
python -m pytest -v
under root directory. - Then pytest will automatically run test_main.py which includes various test cases ported from the original javascript test cases.
Code style
black -l 100
Setup pre-commit hook
- Plugins specified in
.pre-commit-config.yml
will be used before you commit changes. - How to enable pre-commit hook
pip install pre-commit
pre-commit install
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
Close
Hashes for jsonpatch2pymongo-0.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 22411ea15d5d15b1242c7383840d596869897709ba891714f0ac8adb6b56a21e |
|
MD5 | 3fa6489c8afe0443f333d6676a63c8da |
|
BLAKE2b-256 | 1d3aeb9b70283d020d971dc7b1c5d0efa25d3f926b14301d6efc862ebcff0f5f |