Skip to main content

Convert JSON patch into pymongo

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jsonpatch2pymongo-0.1.3.tar.gz (4.6 kB view hashes)

Uploaded Source

Built Distribution

jsonpatch2pymongo-0.1.3-py3-none-any.whl (4.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page