Skip to content

Consider support for yaml (using ruamel.yaml) #136

Open
@cmungall

Description

@cmungall

My use case:

  1. I want to use the awesome jsonpatch on yaml files
  2. I wish to preserve yaml comments

This is actually very easy to do with minimal code using ruamel (which preserves comments, unlike pyyaml):

import sys
from ruamel.yaml import YAML

inp = """\
# example
name:
  # details
  family: Smith   # very common
  given: Alice    # one of the siblings
"""

yaml = YAML()
obj = yaml.load(inp)
patch = JsonPatch([
    {'op': 'add', 'path': '/foo', 'value': {'bar': 'baz'}},
    {'op': 'remove', 'path': '/name/family'}
])
obj = patch.apply(obj)
yaml.dump(obj, sys.stdout)

yields:

# example
name:
  # details
  given: Alice    # one of the siblings
foo:
  bar: baz

which is nice

I would like to put a convenient (if trivial) interface on top of this. I could

  1. Make a new pypi module python-yaml-patch that has this trivial wrapping code, plus CLI bindings
  2. Make a PR on this repo

I suspect (1) would be preferred but thought I would check first. Feel free to close this issue, and I will go ahead with (1), and post a link here when done.

Aside:

I note there is a lib https://github.com/krishicks/yaml-patch from @krishicks but this seems abandoned, and also duplicative. If I go ahead with (1) I wouldn't duplicate any code, just wrap as in the example above

There is also https://github.com/campos-ddc/yaml-patch from @campos-ddc which looks great, but this isn't intended to support the json-patch standard

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions