From adc79fd6ffc41e073884bb44895dd920ff326eeb Mon Sep 17 00:00:00 2001 From: Arham Chopra Date: Wed, 10 Apr 2024 19:22:33 -0400 Subject: [PATCH] Parse None natively in to_json method Signed-off-by: Arham Chopra --- cpp/csp/python/PyStructToJson.cpp | 6 +++++- csp/tests/impl/test_struct.py | 21 +++++++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/cpp/csp/python/PyStructToJson.cpp b/cpp/csp/python/PyStructToJson.cpp index b7e10ef7a..1894ecf24 100644 --- a/cpp/csp/python/PyStructToJson.cpp +++ b/cpp/csp/python/PyStructToJson.cpp @@ -285,7 +285,11 @@ rapidjson::Value pyDictToJson( PyObject * py_dict, rapidjson::Document& doc, PyO rapidjson::Value pyObjectToJson( PyObject * value, rapidjson::Document& doc, PyObject * callable, bool is_recursing ) { - if( PyBool_Check( value ) ) + if( value == Py_None ) + { + return rapidjson::Value(); + } + else if( PyBool_Check( value ) ) { return rapidjson::Value( fromPython( value ) ); } diff --git a/csp/tests/impl/test_struct.py b/csp/tests/impl/test_struct.py index c588478f0..b5e634a9d 100644 --- a/csp/tests/impl/test_struct.py +++ b/csp/tests/impl/test_struct.py @@ -1451,8 +1451,13 @@ class MyStruct(csp.Struct): result_dict = {"i": 456, "l_any": [[1, None], [None, None]]} self.assertEqual(json.loads(test_struct.to_json()), result_dict) - l_any = [[1, 2], "hello", [4, 3.2, [6, [7], (8, True, 10.5, (11, [float("nan"), False]))]]] - l_any_result = [[1, 2], "hello", [4, 3.2, [6, [7], [8, True, 10.5, [11, [None, False]]]]]] + l_any = [[None], None, [1, 2, None]] + test_struct = MyStruct(i=456, l_any=l_any) + result_dict = {"i": 456, "l_any": l_any} + self.assertEqual(json.loads(test_struct.to_json()), result_dict) + + l_any = [[1, 2], "hello", [4, 3.2, [6, [7], (None, True, 10.5, (11, [float("nan"), None, False]))]]] + l_any_result = [[1, 2], "hello", [4, 3.2, [6, [7], [None, True, 10.5, [11, [None, None, False]]]]]] test_struct = MyStruct(i=456, l_any=l_any) result_dict = {"i": 456, "l_any": l_any_result} self.assertEqual(json.loads(test_struct.to_json()), result_dict) @@ -1511,8 +1516,16 @@ class MyStruct(csp.Struct): result_dict = json.loads(test_struct.to_json()) self.assertEqual({k: datetime.fromisoformat(d) for k, d in result_dict["d_any"].items()}, d_dt) - d_any = {"b1": {1: "k1", "d2": {4: 5.5}}, "b2": {"d3": {}, "d4": {"d5": {"d6": {"d7": {}}}}}} - d_any_res = {"b1": {"1": "k1", "d2": {"4": 5.5}}, "b2": {"d3": {}, "d4": {"d5": {"d6": {"d7": {}}}}}} + d_any = { + "b1": {1: "k1", "d2": {4: 5.5}}, + "b2": {"d3": {}, "d4": {"d5": {"d6": {"d7": {}}}}, "d8": None}, + "b3": None, + } + d_any_res = { + "b1": {"1": "k1", "d2": {"4": 5.5}}, + "b2": {"d3": {}, "d4": {"d5": {"d6": {"d7": {}}}}, "d8": None}, + "b3": None, + } test_struct = MyStruct(i=456, d_any=d_any) result_dict = {"i": 456, "d_any": d_any_res} self.assertEqual(json.loads(test_struct.to_json()), result_dict)