From 2b138494f51dd9dc9760ff82ea7f4a1b07c15810 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Fri, 24 Jul 2020 11:34:19 +0200
Subject: [PATCH] REVEIW: changed name and signature of XLS_Importer

---
 .gitignore                              |  2 ++
 src/caosadvancedtools/table_importer.py | 39 +++++++++++++------------
 unittests/test_table_importer.py        |  8 ++---
 3 files changed, 26 insertions(+), 23 deletions(-)

diff --git a/.gitignore b/.gitignore
index 30f02d1c..62c90a0b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,5 @@ __pycache__
 *cache.db
 *.egg-info
 .docker/cert
+version.py
+.eggs/
diff --git a/src/caosadvancedtools/table_importer.py b/src/caosadvancedtools/table_importer.py
index 17119d0c..c4ef3104 100755
--- a/src/caosadvancedtools/table_importer.py
+++ b/src/caosadvancedtools/table_importer.py
@@ -47,9 +47,9 @@ def yes_no_converter(val):
             "Field should be 'Yes' or 'No', but is '{}'.".format(val))
 
 
-class XLS_Importer(object):
+class XLSImporter(object):
 
-    def __init__(self, converters, obligatory_columns=None, unique_columns=None):
+    def __init__(self, converters, obligatory_columns=None, unique_keys=None):
         """
 
         converters: dict with column names as keys and converter functions as
@@ -65,7 +65,7 @@ class XLS_Importer(object):
         self.sup = Suppressable(logger=logger)
         self.required_columns = list(converters.keys())
         self.obligatory_columns = [] if obligatory_columns is None else obligatory_columns
-        self.unique_columns = [] if unique_columns is None else unique_columns
+        self.unique_keys = [] if unique_keys is None else unique_keys
         self.converters = converters
 
     def read_xls(self, filename):
@@ -80,7 +80,7 @@ class XLS_Importer(object):
         self.check_columns(df, filename=filename)
         df = self.check_missing(df, filename=filename)
 
-        if len(self.unique_columns) > 0:
+        if len(self.unique_keys) > 0:
             df = self.check_unique(df, filename=filename)
 
         return df
@@ -96,22 +96,23 @@ class XLS_Importer(object):
         df = df.copy()
         uniques = []
 
-        subtable = df[list(self.unique_columns)]
-        for index, row in subtable.iterrows():
-            element = tuple(row)
-            if element in uniques:
-                errmssg = (
-                    "The {}. row contains the values '{}'.\nThis value "
-                    "combination should be unique, but was used in a previous "
-                    "row in\n").format(index+1, element)
-                errmssg += "{}.".format(filename) if filename else "the file."
-                errmssg += "\nThis row will be ignored!"
+        for unique_columns in self.unique_keys:
+            subtable = df[list(unique_columns)]
+            for index, row in subtable.iterrows():
+                element = tuple(row)
+                if element in uniques:
+                    errmssg = (
+                        "The {}. row contains the values '{}'.\nThis value "
+                        "combination should be unique, but was used in a previous "
+                        "row in\n").format(index+1, element)
+                    errmssg += "{}.".format(filename) if filename else "the file."
+                    errmssg += "\nThis row will be ignored!"
 
-                self.sup.warning(errmssg, identifier=filename,
-                                 category="inconsistency")
-                df = df.drop(index)
-            else:
-                uniques.append(element)
+                    self.sup.warning(errmssg, identifier=filename,
+                                     category="inconsistency")
+                    df = df.drop(index)
+                else:
+                    uniques.append(element)
 
         return df
 
diff --git a/unittests/test_table_importer.py b/unittests/test_table_importer.py
index 49debb43..13057b09 100644
--- a/unittests/test_table_importer.py
+++ b/unittests/test_table_importer.py
@@ -22,7 +22,7 @@ from tempfile import NamedTemporaryFile
 
 import numpy as np
 import pandas as pd
-from caosadvancedtools.table_importer import (XLS_Importer, name_converter,
+from caosadvancedtools.table_importer import (XLSImporter, name_converter,
                                               yes_no_converter)
 
 
@@ -44,11 +44,11 @@ class ConverterTest(unittest.TestCase):
         self.assertRaises(ValueError, name_converter, "Max Mustermann")
 
 
-class XLS_ImporterTest(unittest.TestCase):
+class XLSImporterTest(unittest.TestCase):
     def setUp(self):
-        self.importer = XLS_Importer(
+        self.importer = XLSImporter(
             converters={'a': str, 'b': int, 'c': float, 'd': yes_no_converter},
-            obligatory_columns=['a', 'b'], unique_columns=['a', 'b'])
+            obligatory_columns=['a', 'b'], unique_keys=[('a', 'b')])
         self.valid_df = pd.DataFrame(
             [['a', 1, 2.0, 'yes']], columns=['a', 'b', 'c', 'd'])
 
-- 
GitLab