jsonpatch2pymongo 0.1.3

Creator: railscoder56

Last updated:

Add to Cart

Description:

jsonpatch2pymongo 0.1.3

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

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.