Skip to content
Snippets Groups Projects
Commit 968f623f authored by James Johnson's avatar James Johnson
Browse files

Made recursive key remover more generic

parent 0f06470c
No related branches found
No related tags found
1 merge request!152Removed __traits_version__ from json files
...@@ -14,7 +14,7 @@ from force_bdss.tests.dummy_classes.factory_registry_plugin import \ ...@@ -14,7 +14,7 @@ from force_bdss.tests.dummy_classes.factory_registry_plugin import \
DummyFactoryRegistryPlugin DummyFactoryRegistryPlugin
from force_bdss.io.workflow_writer import WorkflowWriter, traits_to_dict,\ from force_bdss.io.workflow_writer import WorkflowWriter, traits_to_dict,\
pop_traits_version pop_recursive
from force_bdss.core.workflow import Workflow from force_bdss.core.workflow import Workflow
...@@ -89,13 +89,17 @@ class TestWorkflowWriter(unittest.TestCase): ...@@ -89,13 +89,17 @@ class TestWorkflowWriter(unittest.TestCase):
self.assertEqual(traits_to_dict(mock_traits), {"foo": "bar"}) self.assertEqual(traits_to_dict(mock_traits), {"foo": "bar"})
def test_pop_traits_version(self): def test_pop_recursive(self):
test_dictionary = {'Entry1': {'Entry1-1': 4, '__traits_version__': 67}, test_dictionary = {'K1': {'K1': 'V1', 'K2': 'V2', 'K3': 'V3'},
'Entry2': [3, 'a', {'Entry2-1': 5, 'K2': ['V1', 'V2', {'K1': 'V1', 'K2': 'V2',
'__traits_version__': 9001}], 'K3': 'V3'}],
'__traits_version__': 13} 'K3': 'V3',
result_dictionary = {'Entry1': {'Entry1-1': 4, }, 'K4': ('V1', {'K3': 'V3'},)}
'Entry2': [3, 'a', {'Entry2-1': 5, }], }
traitless_dictionary = pop_traits_version(test_dictionary) result_dictionary = {'K1': {'K1': 'V1', 'K2': 'V2', },
self.assertEqual(traitless_dictionary, result_dictionary) 'K2': ['V1', 'V2', {'K1': 'V1', 'K2': 'V2', }],
'K4': ('V1', {},)}
test_result_dictionary = pop_recursive(test_dictionary, )
self.assertEqual(test_result_dictionary, result_dictionary)
...@@ -95,28 +95,28 @@ def traits_to_dict(traits_obj): ...@@ -95,28 +95,28 @@ def traits_to_dict(traits_obj):
state = traits_obj.__getstate__() state = traits_obj.__getstate__()
state = pop_traits_version(state) state = pop_recursive(state,'__traits_version__')
return state return state
def pop_traits_version(dictionary): def pop_recursive(dictionary,remove_key):
"""Recursively remove the __traits_version__ attribute """Recursively remove a named key from dictionary and any contained
from dictionary.""" dictionaries."""
try: try:
dictionary.pop("__traits_version__") dictionary.pop(remove_key)
except KeyError: except KeyError:
pass pass
for key in dictionary: for key in dictionary:
# If we have a dict, remove the traits version # If remove_key is in the dict, remove it
if isinstance(dictionary[key], dict): if isinstance(dictionary[key], dict):
pop_traits_version(dictionary[key]) pop_recursive(dictionary[key], remove_key)
# If we have a non-dict which contains a dict, remove traits from # If we have a non-dict iterable which contains a dict,
# that as well # call pop.(remove_key) from that as well
elif isinstance(dictionary[key], Iterable): elif isinstance(dictionary[key], Iterable):
for element in dictionary[key]: for element in dictionary[key]:
if isinstance(element, dict): if isinstance(element, dict):
pop_traits_version(element) pop_recursive(element, remove_key)
return dictionary return dictionary
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment