From 4325b173090d4380ae4bf94dc03fbace3a9e6552 Mon Sep 17 00:00:00 2001
From: davebshow <davebshow@gmail.com>
Date: Tue, 19 Jul 2016 14:46:17 -0400
Subject: [PATCH] warn on invalid datatype database response

---
 goblin/abc.py        |  5 +++++
 goblin/properties.py | 22 ++++++++++++----------
 2 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/goblin/abc.py b/goblin/abc.py
index 31dba6d..f57becc 100644
--- a/goblin/abc.py
+++ b/goblin/abc.py
@@ -41,6 +41,11 @@ class DataType(abc.ABC):
     @abc.abstractmethod
     def to_ogm(self, val):
         """Convert property value to a Python compatible format"""
+        try:
+            self.validate(val)
+        except exception.ValidationError:
+            logger.warning(
+                "DB val {} Fails OGM validation for {}".format(val, self))
         return val
 
 
diff --git a/goblin/properties.py b/goblin/properties.py
index 74e9b7d..a5e77e2 100644
--- a/goblin/properties.py
+++ b/goblin/properties.py
@@ -87,7 +87,7 @@ class String(abc.DataType):
                 return str(val)
             except ValueError as e:
                 raise exception.ValidationError(
-                    '{} is not a valid string'.format(val)) from e
+                    'Not a valid string: {}'.format(val)) from e
 
     def to_db(self, val=None):
         return super().to_db(val=val)
@@ -105,7 +105,7 @@ class Integer(abc.DataType):
                 return int(val)
             except ValueError as e:
                 raise exception.ValidationError(
-                    '{} is not a valid integer'.format(val)) from e
+                    'Not a valid integer: {}'.format(val)) from e
 
     def to_db(self, val=None):
         return super().to_db(val=val)
@@ -119,14 +119,15 @@ class Float(abc.DataType):
         try:
             val = float(val)
         except ValueError:
-            raise exception.ValidationError("Not a valid float: {}".format(val))
+            raise exception.ValidationError(
+                "Not a valid float: {}".format(val)) from e
         return val
 
-    def to_db(self, val):
-        return val
+    def to_db(self, val=None):
+        return super().to_db(val=val)
 
     def to_ogm(self, val):
-        return float(val)
+        return super().to_ogm(val)
 
 
 class Bool(abc.DataType):
@@ -134,11 +135,12 @@ class Bool(abc.DataType):
         try:
             val = bool(val)
         except ValueError:
-            raise exception.ValidationError("Not a valid bool: {}".format(val))
+            raise exception.ValidationError(
+                "Not a valid boolean: {val}".format(val)) from e
         return val
 
-    def to_db(self, val):
-        return bool(val)
+    def to_db(self, val=None):
+        return super().to_db(val=val)
 
     def to_ogm(self, val):
-        return bool(val)
+        return super().to_ogm(val)
-- 
GitLab