diff --git a/backend/metagenedb/utils/dict_operations.py b/backend/metagenedb/utils/dict_operations.py index f8cf801dcce05ace1743442cb459fa65d2569124..5fab8601326843e3abcd9c2e0f24e22cd80eaa9f 100644 --- a/backend/metagenedb/utils/dict_operations.py +++ b/backend/metagenedb/utils/dict_operations.py @@ -4,7 +4,7 @@ logging.basicConfig(level=logging.INFO) _LOGGER = logging.getLogger(__name__) -def extract_dict(source_dict, keys): +def extract_dict(source_dict, keys, keep_original_source=False): """ Extract a dict from a given dict based on a given set of keys """ @@ -12,7 +12,8 @@ def extract_dict(source_dict, keys): for key in keys: try: extracted_dict[key] = source_dict[key] - del source_dict[key] + if not keep_original_source: + del source_dict[key] except KeyError: _LOGGER.warning(f"[{key}] is not found in the source dict, extraction skipped for this key.") return extracted_dict diff --git a/backend/metagenedb/utils/test_dict_operations.py b/backend/metagenedb/utils/test_dict_operations.py index 7de1f3fa04026f637d899b1ebbbb80a42a823cad..155156b2fdda66a4ec443c5a727178a157bda70c 100644 --- a/backend/metagenedb/utils/test_dict_operations.py +++ b/backend/metagenedb/utils/test_dict_operations.py @@ -22,3 +22,12 @@ class TestExtractDict(TestCase): test_extract_dict = extract_dict(source_dict, extract_keys) self.assertDictEqual(source_dict, expected_source_dict) self.assertDictEqual(test_extract_dict, expected_extract_dict) + + def test_extract_dict_original_source(self): + source_dict = {'a': 1, 'b': 2} + extract_keys = ['b'] + expected_source_dict = {'a': 1, 'b': 2} + expected_extract_dict = {'b': 2} + test_extract_dict = extract_dict(source_dict, extract_keys, keep_original_source=True) + self.assertDictEqual(source_dict, expected_source_dict) + self.assertDictEqual(test_extract_dict, expected_extract_dict)