Add json5 renderer (#32635)

* Add JSON5 renderer

* Add documentation RST files for json5 renderer
This commit is contained in:
Erik Johnson 2016-04-16 13:37:42 -05:00 committed by Nicole Thomas
parent 97111bdc9b
commit aa9c458346
3 changed files with 61 additions and 0 deletions

View File

@ -16,6 +16,7 @@ Full list of builtin renderer modules
hjson
jinja
json
json5
mako
msgpack
py

View File

@ -0,0 +1,6 @@
====================
salt.renderers.json5
====================
.. automodule:: salt.renderers.json5
:members:

54
salt/renderers/json5.py Normal file
View File

@ -0,0 +1,54 @@
# -*- coding: utf-8 -*-
'''
JSON5 Renderer for Salt
.. versionadded:: 2016.3.0
JSON5 is an unofficial extension to JSON. See http://json5.org/ for more
information.
This renderer requires the `json5 python bindings`__, installable via pip.
.. __: https://pypi.python.org/pypi/json5
'''
from __future__ import absolute_import
# Import python libs
import logging
try:
import json5 as json
HAS_JSON5 = True
except ImportError:
HAS_JSON5 = False
# Import salt libs
from salt.ext.six import string_types
log = logging.getLogger(__name__)
# Define the module's virtual name
__virtualname__ = 'json5'
def __virtual__():
if not HAS_JSON5:
return (False, 'json5 module not installed')
return __virtualname__
def render(json_data, saltenv='base', sls='', **kws):
'''
Accepts JSON as a string or as a file object and runs it through the JSON
parser.
:rtype: A Python data structure
'''
if not isinstance(json_data, string_types):
json_data = json_data.read()
if json_data.startswith('#!'):
json_data = json_data[(json_data.find('\n') + 1):]
if not json_data.strip():
return {}
return json.loads(json_data)