Support multi column results with using mongo query runner (#6558)

* Support multi column results with using mongo query runner

* format

Signed-off-by: del-zhenwu <lizhenxiang@pjlab.org.cn>

* Update test_mongodb.py

update unit test case: nested dict for mongodb runner

* Update test_mongodb.py

* fix formatting

---------

Signed-off-by: del-zhenwu <lizhenxiang@pjlab.org.cn>
Co-authored-by: del-zhenwu <dele.zhenwu@gmail.com>
Co-authored-by: del-zhenwu <lizhenxiang@pjlab.org.cn>
This commit is contained in:
Guido Petri
2023-10-28 20:13:17 -05:00
committed by GitHub
parent a5b01bf8ee
commit 39e4ea155c
2 changed files with 23 additions and 27 deletions

View File

@@ -93,6 +93,18 @@ def _get_column_by_name(columns, column_name):
return None return None
def _parse_dict(dic):
res = {}
for key, value in dic.items():
if isinstance(value, dict):
for tmp_key, tmp_value in _parse_dict(value).items():
new_key = "{}.{}".format(key, tmp_key)
res[new_key] = tmp_value
else:
res[key] = value
return res
def parse_results(results): def parse_results(results):
rows = [] rows = []
columns = [] columns = []
@@ -100,32 +112,15 @@ def parse_results(results):
for row in results: for row in results:
parsed_row = {} parsed_row = {}
for key in row: parsed_row = _parse_dict(row)
if isinstance(row[key], dict): for column_name, value in parsed_row.items():
for inner_key in row[key]: columns.append(
column_name = "{}.{}".format(key, inner_key) {
if _get_column_by_name(columns, column_name) is None: "name": column_name,
columns.append( "friendly_name": column_name,
{ "type": TYPES_MAP.get(type(value), TYPE_STRING),
"name": column_name, }
"friendly_name": column_name, )
"type": TYPES_MAP.get(type(row[key][inner_key]), TYPE_STRING),
}
)
parsed_row[column_name] = row[key][inner_key]
else:
if _get_column_by_name(columns, key) is None:
columns.append(
{
"name": key,
"friendly_name": key,
"type": TYPES_MAP.get(type(row[key]), TYPE_STRING),
}
)
parsed_row[key] = row[key]
rows.append(parsed_row) rows.append(parsed_row)

View File

@@ -141,7 +141,7 @@ class TestMongoResults(TestCase):
"column": 2, "column": 2,
"column2": "test", "column2": "test",
"column3": "hello", "column3": "hello",
"nested": {"a": 2, "b": "str2", "c": "c"}, "nested": {"a": 2, "b": "str2", "c": "c", "d": {"e": 3}},
}, },
] ]
@@ -157,6 +157,7 @@ class TestMongoResults(TestCase):
"nested.a": 2, "nested.a": 2,
"nested.b": "str2", "nested.b": "str2",
"nested.c": "c", "nested.c": "c",
"nested.d.e": 3,
}, },
) )