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