stefankoegl / python-json-patch

Applying JSON Patches in Python
https://python-json-patch.readthedocs.org/
BSD 3-Clause "New" or "Revised" License
440 stars 96 forks source link

Bug: Remove /array/- raises TypeError #133

Open Ventilateur opened 3 years ago

Ventilateur commented 3 years ago

Version: 1.32 Python version: 3.8

Description Removing array element with dash notation raises an unexpected TypeError. Like so: {'op': 'remove', 'path': '/vals/-'}.
I understand that the dash points to the end of array, but not the last element? Even so, if the syntax is invalid, I think it should raise a JsonPatchException or JsonPointerException.

Step to reproduce

jsonpatch.JsonPatch([
        {'op': 'remove', 'path': '/vals/-'}
    ]).apply({
        'vals': [1, 2, 3]
    })

Stack trace

File "\lib\site-packages\jsonpatch.py", line 669, in apply
    obj = operation.apply(obj)
  File "\lib\site-packages\jsonpatch.py", line 238, in apply
    del subobj[part]
TypeError: list indices must be integers or slices, not str
stefankoegl commented 3 years ago

Thanks for the report. I think your suggestion makes a lot of sense.

Would you be interested in preparing a pull request?

Ventilateur commented 3 years ago

Ok, I will find some time to do it. So according to this section, I think it make sense to raise a JsonPointerException in this case. What do you think?

stefankoegl commented 3 years ago

Agreed - makes sense

Ventilateur commented 3 years ago

FYI I made a PR, can you check please?

stefankoegl commented 3 years ago

Looks good! I’ll merge and include it in the next release. Thanks!