From a3d1b08d2b717f8c81b513eadd604adcc3593191 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <henrik@trineo.org>
Date: Mon, 8 Nov 2021 18:51:09 +0100
Subject: [PATCH] MAINT: enhance output when table cannot be parsed

---
 src/caosadvancedtools/table_importer.py | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/src/caosadvancedtools/table_importer.py b/src/caosadvancedtools/table_importer.py
index 7b4414b7..fee39ced 100755
--- a/src/caosadvancedtools/table_importer.py
+++ b/src/caosadvancedtools/table_importer.py
@@ -51,7 +51,7 @@ def assure_name_format(name):
     name = str(name)
 
     if len(name.split(",")) != 2:
-        raise ValueError("Name field should be 'LastName, FirstName'."
+        raise ValueError("The field value should be 'LastName, FirstName'. "
                          "The supplied value was '{}'.".format(name))
 
     return name
@@ -303,14 +303,20 @@ class TableImporter(object):
         """
 
         for key, datatype in self.datatypes.items():
-            for idx, val in df.loc[pd.notnull(df.loc[:, key]), key].iteritems():
+            for idx, val in df.loc[
+                    pd.notnull(df.loc[:, key]), key].iteritems():
+
                 if not isinstance(val, datatype):
-                    raise DataInconsistencyError(
-                        "In row no. {rn} and column {c} of file '{fi}' the "
+                    msg = (
+                        "In row no. {rn} and column '{c}' of file '{fi}' the "
                         "datatype was {was} but it should be "
                         "{expected}".format(rn=idx, c=key, fi=filename,
-                                            was=type(val), expected=datatype)
+                                            was=str(type(val)).strip("<>"),
+                                            expected=str(datatype).strip("<>"))
                     )
+                    logger.warning(msg, extra={'identifier': filename,
+                                               'category': "inconsistency"})
+                    raise DataInconsistencyError(msg)
 
     def check_missing(self, df, filename=None):
         """
@@ -394,7 +400,7 @@ class XLSImporter(TableImporter):
             df = xls_file.parse(converters=self.converters, **kwargs)
         except Exception as e:
             logger.warning(
-                "Cannot parse {}.".format(filename),
+                "Cannot parse {}.\n{}".format(filename, e),
                 extra={'identifier': str(filename),
                        'category': "inconsistency"})
             raise DataInconsistencyError(*e.args)
@@ -411,7 +417,7 @@ class CSVImporter(TableImporter):
                              **kwargs)
         except ValueError as ve:
             logger.warning(
-                "Cannot parse {}.".format(filename),
+                "Cannot parse {}.\n{}".format(filename, ve),
                 extra={'identifier': str(filename),
                        'category': "inconsistency"})
             raise DataInconsistencyError(*ve.args)
@@ -428,7 +434,7 @@ class TSVImporter(TableImporter):
                              **kwargs)
         except ValueError as ve:
             logger.warning(
-                "Cannot parse {}.".format(filename),
+                "Cannot parse {}.\n{}".format(filename, ve),
                 extra={'identifier': str(filename),
                        'category': "inconsistency"})
             raise DataInconsistencyError(*ve.args)
-- 
GitLab