From 77d8cb4ded97b208bde9c74a9305362dd9f405b3 Mon Sep 17 00:00:00 2001
From: florian <f.spreckelsen@inidscale.com>
Date: Tue, 25 Aug 2020 14:03:40 +0200
Subject: [PATCH] FIX: Compare datetime treats timezones and milliseconds

---
 src/caosadvancedtools/cfood.py | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/src/caosadvancedtools/cfood.py b/src/caosadvancedtools/cfood.py
index c4c4e121..c6926e42 100644
--- a/src/caosadvancedtools/cfood.py
+++ b/src/caosadvancedtools/cfood.py
@@ -594,7 +594,31 @@ def assure_has_property(entity, name, value, to_be_updated=None,
 
         if isinstance(value, datetime):
 
-            if datetime.fromisoformat(el.value) == value:
+            try:
+                compare_time = datetime.fromisoformat(el.value)
+            except ValueError:
+                # special case of wrong iso format
+                # time zone
+                tmp = el.value.split("+")
+                if len(tmp) == 2:
+                    tz_str = '+' + tmp[1][:2] + ':' + tmp[1][2:]
+                else:
+                    tz_str = ""
+                tmp = tmp[0]
+                # milli- and micrseconds
+                tmp = tmp.split(".")
+                if len(tmp) == 2:
+                    if len(tmp[1]) < 6:
+                        ms = '.' + tmp[1] + '0'*(6-len(tmp[1]))
+                    else:
+                        raise ValueError(
+                            "invalid millisecond format in {}".format(el.value))
+                else:
+                    ms = ""
+                tmp = tmp[0]  + ms + tz_str
+                compare_time = datetime.fromisoformat(tmp)
+                
+            if  compare_time == value:
                 contained = True
 
                 break
-- 
GitLab