Skip to content
forked from astzweig/cocof-py

A comment preserving (config) file editing CLI tool

License

Notifications You must be signed in to change notification settings

jayvdb/cocof-py

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cocof

Build Status PyPI version

Cocof, short for consistent config file, is a python module that allows the modification of different key-value config files on the comand line.

Most importantly: For YAML and TOML it It will keep line breaks and comments the same. So the file will look more or less like the original (depending on the operations on it of course).

Currently supported formats are TOML, YAML, JSON and PLIST.

Install

$ pip install cocof

Usage

$ cocof --help
Usage: cocof [OPTIONS] FILEPATH JSONPATCH

  Cocof runs the provided 'jsonpatch' modifications on the configuration
  file given with the 'filepath' argument. Use the '--format' option to tell
  the file format. If not given cocof will try to guess the file format
  based on the file extension. Use '-' as filepath for stdin, in which case
  the output goes to stdout and you must provide the format of the data via
  the '--format' option.

Options:
  -f, --format [toml|yaml|json|plist]
                                  The format of the file. Obligatory if
                                  filepath is '-' (stdin).
  --help                          Show this message and exit.

Cocof takes a file path and a JSON patch string as arguments. It then modifies the datastructure given by the file's content accordingly and writies it back to the same file (in-place editing). You can also tell cocof to read from stdin, in which case it will output it's result to stdout. TOML, YAML and JSON expect their content to be utf-8 encoded. PLIST expects either an utf-8 encoded xml content or binary content.

Examples

# example.toml
title = "Example"

[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00 # Inline comment

[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]

Using {"op": "add", "path": "/subtitle", "value": "Sub"} as modification yields:

$ cocof ./example.toml '[{"op": "add", "path": "/subtitle", "value": "Sub"}]'`
$ cat ./example.toml
# example.toml
title = "Example"
subtitle = "Sub"

[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00 # Inline comment

[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]

About

A comment preserving (config) file editing CLI tool

Resources

License

Security policy

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 100.0%