From cf12878b778dbc22b28495d87209822feccb222f Mon Sep 17 00:00:00 2001 From: James Johnson <jjohnson@enthought.com> Date: Wed, 13 Jun 2018 17:48:25 +0100 Subject: [PATCH] Removed traits version from json output --- force_bdss/io/workflow_writer.py | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/force_bdss/io/workflow_writer.py b/force_bdss/io/workflow_writer.py index aadd19d..431343f 100644 --- a/force_bdss/io/workflow_writer.py +++ b/force_bdss/io/workflow_writer.py @@ -1,5 +1,6 @@ import json from traits.api import HasStrictTraits +from collections import Iterable class WorkflowWriter(HasStrictTraits): @@ -91,10 +92,30 @@ class WorkflowWriter(HasStrictTraits): def traits_to_dict(traits_obj): """Converts a traits class into a dict, removing the pesky traits version.""" + + def pop_traits(dictionary): + """Recursively remove the __traits_version__ attribute + from dictionary.""" + try: + dictionary.pop("__traits_version__") + except KeyError: + pass + + for key in dictionary: + # If we have a dict, remove the traits version + if isinstance(dictionary[key], dict): + pop_traits(dictionary[key]) + # If we have a non-dict which contains a dict, remove traits from + # that as well + elif isinstance(dictionary[key], Iterable): + for element in dictionary[key]: + if isinstance(element, dict): + pop_traits(element) + + return dictionary + state = traits_obj.__getstate__() - try: - state.pop("__traits_version__") - except KeyError: - pass + + state = pop_traits(state) return state -- GitLab