Skip to content

Instantly share code, notes, and snippets.

@kellyjonbrazil

kellyjonbrazil/jc.py

Created Sep 15, 2020
Embed
What would you like to do?
Saltstack JC Serializer
"""
salt.serializers.jc
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Implements JC serializer.
JC converts the output of many commands and file-types to structured format.
https://github.com/kellyjonbrazil/jc
Requires JC is installed via pip: $ pip3 install jc
Requires Python >= 3.6
"""
import importlib
# Import Salt libs
from salt.serializers import DeserializationError
# Import jc
try:
import jc
available = True
except ImportError:
available = False
__all__ = ["deserialize", "available"]
class NotImplementedError(DeserializationError):
pass
def deserialize(stream_or_string, parser=None):
"""
Deserialize from raw command output into Python data structure.
:param stream_or_string: command output stream or string to deserialize.
:param parser: parser used to serialze the command output
"""
if not available:
raise DeserializationError('You need to install "jc" prior to running the jc deserializer')
if not parser:
raise DeserializationError("You must specify a parser for the jc deserializer. e.g. parser='uptime'")
try:
jc_parser = importlib.import_module('jc.parsers.' + parser)
if not isinstance(stream_or_string, (bytes, str)):
return jc_parser.parse(stream_or_string, quiet=True)
if isinstance(stream_or_string, bytes):
stream_or_string = stream_or_string.decode("utf-8")
return jc_parser.parse(stream_or_string, quiet=True)
except Exception as error:
raise DeserializationError(error)
def serialize(obj, **options):
raise NotImplementedError("JC can only deserialize.")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.