jsonpatch2pymongo

Convert JSON patch into pymongo


License
MIT
Install
pip install jsonpatch2pymongo==0.1.0

Documentation

Code style: black

jsonpatch2pymongo

Introduction

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