From fcd1719b67f8d9fc1a17e250dc375e9df3377507 Mon Sep 17 00:00:00 2001 From: maszyk99 Date: Wed, 13 Mar 2024 10:47:19 +0100 Subject: [PATCH 1/2] Refactor json encoder to modern standards, stop handling PyPy 2.5 --- splunklib/searchcommands/internals.py | 37 +++++++++------------------ 1 file changed, 12 insertions(+), 25 deletions(-) diff --git a/splunklib/searchcommands/internals.py b/splunklib/searchcommands/internals.py index 962d8c8b..b145df5d 100644 --- a/splunklib/searchcommands/internals.py +++ b/splunklib/searchcommands/internals.py @@ -25,7 +25,7 @@ from collections import deque, namedtuple from collections import OrderedDict from itertools import chain -from json import JSONDecoder, JSONEncoder +from json import JSONDecoder, JSONEncoder, dumps from json.encoder import encode_basestring_ascii as json_encode_string @@ -662,32 +662,19 @@ def _write_record(self, record): if self.pending_record_count >= self._maxresultrows: self.flush(partial=True) - try: - # noinspection PyUnresolvedReferences - from _json import make_encoder - except ImportError: - # We may be running under PyPy 2.5 which does not include the _json module - _iterencode_json = JSONEncoder(separators=(',', ':')).iterencode - else: - from json.encoder import encode_basestring_ascii - - @staticmethod - def _default(o): - raise TypeError(repr(o) + ' is not JSON serializable') - - _iterencode_json = make_encoder( - {}, # markers (for detecting circular references) - _default, # object_encoder - encode_basestring_ascii, # string_encoder - None, # indent - ':', ',', # separators - False, # sort_keys - False, # skip_keys - True # allow_nan + @staticmethod + def _iterencode_json(obj, indent_level=0): + def _default(): + raise TypeError(repr(obj) + ' is not JSON serializable') + + return dumps( + obj, + separators=(',', ':'), + default=_default, + ensure_ascii=True, + indent=indent_level ) - del make_encoder - class RecordWriterV1(RecordWriter): From e4e67ecf2ecb2e9460cd5aa688aa5f3fcf73c17d Mon Sep 17 00:00:00 2001 From: maszyk99 Date: Wed, 13 Mar 2024 11:15:01 +0100 Subject: [PATCH 2/2] Add separate variable --- splunklib/searchcommands/internals.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/splunklib/searchcommands/internals.py b/splunklib/searchcommands/internals.py index b145df5d..30eeed02 100644 --- a/splunklib/searchcommands/internals.py +++ b/splunklib/searchcommands/internals.py @@ -664,8 +664,8 @@ def _write_record(self, record): @staticmethod def _iterencode_json(obj, indent_level=0): - def _default(): - raise TypeError(repr(obj) + ' is not JSON serializable') + def _default(serialized_obj): + raise TypeError(repr(serialized_obj) + ' is not JSON serializable') return dumps( obj,