From cf3abd97c0b5a8c1f450386ea10100bae48a685c Mon Sep 17 00:00:00 2001
From: Ivan Usov <ivan.usov@psi.ch>
Date: Wed, 29 Jul 2020 13:48:12 +0200
Subject: [PATCH] Delete elements on attr value of None or ""

---
 pyzebra/anatric.py | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/pyzebra/anatric.py b/pyzebra/anatric.py
index 5e2ce50..7d221a6 100644
--- a/pyzebra/anatric.py
+++ b/pyzebra/anatric.py
@@ -35,7 +35,7 @@ class AnatricConfig:
         self._alg_elems = dict()
         for alg in ALGORITHMS:
             self._alg_elems[alg] = ET.Element("Algorithm", attrib={"implementation": alg})
-            self._alg_elems[alg].text = "\n "
+            self._alg_elems[alg].text = "\n"
             self._alg_elems[alg].tail = "\n\n"
 
         self._alg_elems[self.algorithm] = self._tree.find("Algorithm")
@@ -50,7 +50,8 @@ class AnatricConfig:
         return elem.attrib[attr]
 
     def _set_attr(self, name, tag, attr, value):
-        if value is None:
+        if value == "" or value is None:
+            self._del_attr(name, tag)
             return
 
         tree_elem = self._tree.find(name)
@@ -62,6 +63,12 @@ class AnatricConfig:
         else:
             elem.attrib[attr] = value
 
+    def _del_attr(self, name, tag):
+        tree_elem = self._tree.find(name)
+        param_elem = tree_elem.find(tag)
+        if param_elem is not None:
+            tree_elem.remove(param_elem)
+
     @property
     def logfile(self):
         return self._tree.find("logfile").attrib["file"]
@@ -220,7 +227,8 @@ class AnatricConfig:
         return param_elem.attrib[attr]
 
     def _set_alg_attr(self, alg, tag, attr, value):
-        if value is None:
+        if value == "" or value is None:
+            self._del_alg_attr(alg, tag)
             return
 
         alg_elem = self._alg_elems[alg]
@@ -232,6 +240,12 @@ class AnatricConfig:
         else:
             param_elem.attrib[attr] = value
 
+    def _del_alg_attr(self, alg, tag):
+        alg_elem = self._alg_elems[alg]
+        param_elem = alg_elem.find(tag)
+        if param_elem is not None:
+            alg_elem.remove(param_elem)
+
     # --- adaptivemaxcog
     @property
     def threshold(self):