documenting and testing

This commit is contained in:
Martin Diehl 2021-03-31 10:59:21 +02:00
parent eebb050a64
commit e9c65dee73
2 changed files with 57 additions and 17 deletions

View File

@ -399,34 +399,52 @@ def DREAM3D_cell_data_group(fname):
return cell_data_group return cell_data_group
def dict_strip(a_dict):
def dict_strip(d):
"""
Remove recursively empty dictionaries.
Parameters
----------
d : dict
dictionary.
"""
# https://stackoverflow.com/questions/48151953 # https://stackoverflow.com/questions/48151953
new_dict = {} new = {}
for k, v in a_dict.items(): for k,v in d.items():
if isinstance(v, dict): if isinstance(v, dict):
v = dict_strip(v) v = dict_strip(v)
if not isinstance(v,dict) or v != {}: if not isinstance(v,dict) or v != {}:
new_dict[k] = v new[k] = v
return new_dict return new
def dict_compress(a_dict): def dict_compress(d):
# https://stackoverflow.com/questions/48151953 """
if isinstance(a_dict,dict) and len(a_dict) == 1: Remove recursively dictionaries with one entry.
key = list(a_dict.keys())[0]
entry = a_dict[key] Parameters
----------
d : dict
dictionary.
"""
if isinstance(d,dict) and len(d) == 1:
key = list(d.keys())[0]
entry = d[key]
if isinstance(entry,dict): if isinstance(entry,dict):
new_dict = dict_compress(entry.copy()) new = dict_compress(entry.copy())
else: else:
new_dict = entry new = entry
else: else:
new_dict = {} new = {}
for k, v in a_dict.items(): for k,v in d.items():
if isinstance(v, dict): if isinstance(v, dict):
v = dict_compress(v) v = dict_compress(v)
if not isinstance(v,dict) or v != {}: if not isinstance(v,dict) or v == {}:
new_dict[k] = v new[k] = v
return new_dict return new

View File

@ -136,3 +136,25 @@ class TestUtil:
else: else:
with pytest.raises(ValueError): with pytest.raises(ValueError):
util.DREAM3D_cell_data_group(tmp_path/'cell_data_group.dream3d') util.DREAM3D_cell_data_group(tmp_path/'cell_data_group.dream3d')
@pytest.mark.parametrize('full,reduced',[({}, {}),
({'A':{}}, {}),
({'A':{'B':{}}}, {}),
({'A':{'B':'C'}},)*2,
({'A':{'B':{},'C':'D'}}, {'A':{'C':'D'}})])
def test_strip(self,full,reduced):
assert util.dict_strip(full) == reduced
@pytest.mark.parametrize('full,reduced',[({}, {}),
({'A':{}}, {}),
({'A':'F'}, 'F'),
({'A':{'B':{}}}, {}),
({'A':{'B':'C'}}, 'C'),
({'A':1,'B':2},)*2,
({'A':{'B':'C','D':'E'}}, {'B':'C','D':'E'}),
({'B':'C','D':'E'},)*2,
({'A':{'B':{},'C':'D'}}, {'B':{},'C':'D'})])
def test_compress(self,full,reduced):
assert util.dict_compress(full) == reduced