Metadata-Version: 2.0
Name: jsonconfigparser
Version: 0.1.1
Summary: Quick and easy editting of JSON files.
Home-page: https://github.com/justanr/JSONConfigParser
Author: Alec Nikolas Reiter
Author-email: alecreiter@gmail.com
License: MIT
Keywords: CLI json config
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Topic :: Text Processing
Classifier: Programming Language :: Python :: 3.4
Classifier: Operating System :: POSIX :: Linux
Classifier: Natural Language :: English
Requires-Dist: decorator (==3.4.0)
Requires-Dist: jsonpath-rw (==1.3.0)
Requires-Dist: ply (==3.4)
Requires-Dist: six (==1.8.0)

#JSONConfigParser
A JSON config editor built on top of [jsonpath-rw.](https://github.com/kennknowles/python-jsonpath-rw/).

##Installation

Simple as `pip install --user jsonconfigparser`

##Use
Right now there is an example of building a CLI utility in the examples directory.

It can also be used programmatically as well by importing the `JSONConfigParser` class and the commands modules.

###CLI App

This is built with argparse. Using it is as simple as:

    jsonconf path/to/conf.json view -p $

That command will view the entire JSON file. Other actions include:

| command  | description                                                                                                                           |                                                                                                                                                                                                                                |
|----------|---------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| addfile  | Concatenates a second JSON file onto the current. Warning: This will overwrite any shared keys.                                       | `jsonconf conf.json addfile -o path/to/other.json`                                                                                                                                                                         |
| addfield | Adds a key and value to a specified JSONPath                                                                                          | `jsonconf conf.json addfield -p $.name -v jsonconfigparser`                                                                                                                                                                |
| append   | Appends a value to the specified JSONPath. Optionally, converts the field to another type. Optionally, apply to every found endpoint. | `jsonconf conf.json append -p $.things.[0] -v "Star bellied sneeches"`  `jsonconf conf.json append -p $.products.hats -v "23.44" -t float`  `jsonconf conf.json append -p $.products.[*].descript -v "A thing" -m` |
| delete   | Deletes an item from the specific JSONPath.                                                                                           | `jsonconf conf.json delete $.products.hats`                                                                                                                                                                                |
| edit     | Reset the value at the endpoint of the JSONPath                                                                                       | `jsonconf conf.json edit -p $.products.hats.descript -v "A really cool hat."`                                                                                                                                              |
| shell    | Drop into the interactive prompt.                                                                                                     | `jsonconf conf.json shell`   |

Arguments:

| flags        | description                                                                                                                                                                              |
|--------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| -p/--path    | The path flag the only acceptable value is a JSONPath string                                                                                                                             |
| -o/--other   | The other file flag, used with addfile to concatenate files together                                                                                                                     |
| -v/--value   | The value flag, used with any action that requires a value                                                                                                                               |
| -m/--multi   | The multi boolean flag. Currently only used with append action. Defaults to false, if True append will add the value to every path found                                                 |
| -c/--convert | The conversion flag. Currently only used with append. Defaults to False. If passed, a value must be provided of `int`, `float`, `list`, `dict`, `bool`,`str` or some combination of them |

###Interactive Shell Prompt

This is built with readlines. To enter it, simply run `jsonconf path/to/conf.json shell`

Executing commands is exactly the same as on the command line, except the shell can't be reinstantiated inside itself.

To exit, two consecutive keyboard interrupts are needed. If a command is run between them, then the exit flag is reset.

There is also an extra method available in the shell `write` which saves the current state of the file.

##Todo:
There are several things that I want to do, small and big:

* Apply the multiflag where needed.
* Clean up the whole package up and turn what I can into classes/objects.
* Ability to write to a different file for CLI and Shell.


