Skip to content

Commit

Permalink
Merge pull request #78 from loco0321/master
Browse files Browse the repository at this point in the history
correctios
  • Loading branch information
valdergallo committed Mar 8, 2016
2 parents d0b0760 + 813acde commit 799935d
Showing 1 changed file with 21 additions and 9 deletions.
30 changes: 21 additions & 9 deletions data_importer/importers/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from data_importer.core.base import DATA_IMPORTER_EXCEL_DECODER
from data_importer.core.base import DATA_IMPORTER_DECODER

ALPHABETIC = 'ABCDEFGHIJKLNM0PKRSTUVWXYZ'
ALPHABETIC = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
FACTOR = 26

DELAY = 1
Expand Down Expand Up @@ -44,8 +44,8 @@ def __init__(self, source=None, *args, **kwargs):
self._reader = None
self._excluded = False
self._readed = False

self.start_fields()
self.original_fields = None
if source:
self.source = source
self.set_reader()
Expand Down Expand Up @@ -186,8 +186,17 @@ def process_row(self, row, values):
"""
Read clean functions from importer and return tupla with row number, field and value
"""

if isinstance(self.fields, dict):
values_encoded = [self.to_unicode(values[i]) for i in self.fields.values()]
values_encoded = []
for key, value in self.fields.items():
try:
values_encoded.append(values[value])
except IndexError as e:
index = self.original_fields.get(key)
if isinstance(index, str):
index = '"{}"'.format(index)
raise IndexError(e.message + '. Index with error: [ "{0}" : {1} ]'.format(key, index))
else:
values_encoded = [self.to_unicode(i) for i in values]
try:
Expand Down Expand Up @@ -323,6 +332,7 @@ def _read_file(self):
reader = self._reader.read()
else:
reader = self._reader
self.original_fields = self.fields
if isinstance(self.fields, dict):
self.fields = self.get_dict_fields(self.fields)
for row, values in enumerate(reader, 1):
Expand Down Expand Up @@ -378,7 +388,7 @@ def convert_letter_to_number(letter):
try:
return ALPHABETIC.index(letter.upper())
except ValueError as ve:
raise ValueError(ve.message + 'on ALPHABETIC = {}'.format(ALPHABETIC))
raise ValueError(ve.message + '[{0}] on ALPHABETIC = {1}'.format(letter.upper(), ALPHABETIC))

@staticmethod
def convert_list_number_to_decimal_integer(list_number):
Expand All @@ -388,11 +398,13 @@ def convert_list_number_to_decimal_integer(list_number):
final_number += (number + DELAY) * (FACTOR ** exp)
return final_number - DELAY

def convert_alphabetic_column_to_number(self, alphabetic_column):
number_list = map(self.convert_letter_to_number, list(alphabetic_column))
return self.convert_list_number_to_decimal_integer(number_list)
@staticmethod
def convert_alphabetic_column_to_number(alphabetic_column):
number_list = map(BaseImporter.convert_letter_to_number, list(alphabetic_column))
return BaseImporter.convert_list_number_to_decimal_integer(number_list)

def get_dict_fields(self, dict_fields):
@staticmethod
def get_dict_fields(dict_fields):
dict_field_out = {}
for field_name, column in dict_fields.items():
try:
Expand All @@ -402,7 +414,7 @@ def get_dict_fields(self, dict_fields):
raise ValueError(
'You can\'t mix letters and numbers in the same column. you pass: {}'.format(column))
if str == type(column):
dict_field_out[field_name] = self.convert_alphabetic_column_to_number(column)
dict_field_out[field_name] = BaseImporter.convert_alphabetic_column_to_number(column)
elif int == type(column):
dict_field_out[field_name] = column
else:
Expand Down

0 comments on commit 799935d

Please sign in to comment.