Skip to content
Snippets Groups Projects
Verified Commit 2b138494 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

REVEIW: changed name and signature of XLS_Importer

parent 0f46639d
No related branches found
No related tags found
1 merge request!22Release 0.3
...@@ -4,3 +4,5 @@ __pycache__ ...@@ -4,3 +4,5 @@ __pycache__
*cache.db *cache.db
*.egg-info *.egg-info
.docker/cert .docker/cert
version.py
.eggs/
...@@ -47,9 +47,9 @@ def yes_no_converter(val): ...@@ -47,9 +47,9 @@ def yes_no_converter(val):
"Field should be 'Yes' or 'No', but is '{}'.".format(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 converters: dict with column names as keys and converter functions as
...@@ -65,7 +65,7 @@ class XLS_Importer(object): ...@@ -65,7 +65,7 @@ class XLS_Importer(object):
self.sup = Suppressable(logger=logger) self.sup = Suppressable(logger=logger)
self.required_columns = list(converters.keys()) self.required_columns = list(converters.keys())
self.obligatory_columns = [] if obligatory_columns is None else obligatory_columns 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 self.converters = converters
def read_xls(self, filename): def read_xls(self, filename):
...@@ -80,7 +80,7 @@ class XLS_Importer(object): ...@@ -80,7 +80,7 @@ class XLS_Importer(object):
self.check_columns(df, filename=filename) self.check_columns(df, filename=filename)
df = self.check_missing(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) df = self.check_unique(df, filename=filename)
return df return df
...@@ -96,22 +96,23 @@ class XLS_Importer(object): ...@@ -96,22 +96,23 @@ class XLS_Importer(object):
df = df.copy() df = df.copy()
uniques = [] uniques = []
subtable = df[list(self.unique_columns)] for unique_columns in self.unique_keys:
for index, row in subtable.iterrows(): subtable = df[list(unique_columns)]
element = tuple(row) for index, row in subtable.iterrows():
if element in uniques: element = tuple(row)
errmssg = ( if element in uniques:
"The {}. row contains the values '{}'.\nThis value " errmssg = (
"combination should be unique, but was used in a previous " "The {}. row contains the values '{}'.\nThis value "
"row in\n").format(index+1, element) "combination should be unique, but was used in a previous "
errmssg += "{}.".format(filename) if filename else "the file." "row in\n").format(index+1, element)
errmssg += "\nThis row will be ignored!" errmssg += "{}.".format(filename) if filename else "the file."
errmssg += "\nThis row will be ignored!"
self.sup.warning(errmssg, identifier=filename, self.sup.warning(errmssg, identifier=filename,
category="inconsistency") category="inconsistency")
df = df.drop(index) df = df.drop(index)
else: else:
uniques.append(element) uniques.append(element)
return df return df
......
...@@ -22,7 +22,7 @@ from tempfile import NamedTemporaryFile ...@@ -22,7 +22,7 @@ from tempfile import NamedTemporaryFile
import numpy as np import numpy as np
import pandas as pd import pandas as pd
from caosadvancedtools.table_importer import (XLS_Importer, name_converter, from caosadvancedtools.table_importer import (XLSImporter, name_converter,
yes_no_converter) yes_no_converter)
...@@ -44,11 +44,11 @@ class ConverterTest(unittest.TestCase): ...@@ -44,11 +44,11 @@ class ConverterTest(unittest.TestCase):
self.assertRaises(ValueError, name_converter, "Max Mustermann") self.assertRaises(ValueError, name_converter, "Max Mustermann")
class XLS_ImporterTest(unittest.TestCase): class XLSImporterTest(unittest.TestCase):
def setUp(self): def setUp(self):
self.importer = XLS_Importer( self.importer = XLSImporter(
converters={'a': str, 'b': int, 'c': float, 'd': yes_no_converter}, 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( self.valid_df = pd.DataFrame(
[['a', 1, 2.0, 'yes']], columns=['a', 'b', 'c', 'd']) [['a', 1, 2.0, 'yes']], columns=['a', 'b', 'c', 'd'])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment