Count the number of rows in the BOM file

This commit is contained in:
Oliver Walters 2019-06-27 23:09:06 +10:00
parent 9813205419
commit c4944268f3

View File

@ -61,13 +61,21 @@ class BomUploadManager:
def __init__(self, bom_file, starting_row=2): def __init__(self, bom_file, starting_row=2):
""" Initialize the BomUpload class with a user-uploaded file object """ """ Initialize the BomUpload class with a user-uploaded file object """
self.starting_row = starting_row try:
print("Starting on row", starting_row) start = int(starting_row) - 1
if start < 0:
start = 0
self.starting_row = start
except ValueError:
self.starting_row = 1
self.process(bom_file) self.process(bom_file)
def process(self, bom_file): def process(self, bom_file):
""" Process a BOM file """ """ Process a BOM file """
self.data = None
ext = os.path.splitext(bom_file.name)[-1].lower() ext = os.path.splitext(bom_file.name)[-1].lower()
if ext in ['.csv', '.tsv', ]: if ext in ['.csv', '.tsv', ]:
@ -88,21 +96,30 @@ class BomUploadManager:
self.header_map = {} self.header_map = {}
for header in self.REQUIRED_HEADERS: for header in self.REQUIRED_HEADERS:
match = self.get_header(header) match = self.extract_header(header)
if match is None: if match is None:
raise ValidationError({'bom_file': _("Missing required field '{f}'".format(f=header))}) raise ValidationError({'bom_file': _("Missing required field '{f}'".format(f=header))})
else: else:
self.header_map[header] = match self.header_map[header] = match
for header in self.USEFUL_HEADERS: for header in self.USEFUL_HEADERS:
match = self.get_header(header) match = self.extract_header(header)
self.header_map[header] = match self.header_map[header] = match
# Now we have mapped data to each header
for k,v in self.header_map.items(): for k,v in self.header_map.items():
print(k, '->', v) print(k, '->', v)
def get_header(self, header_name, threshold=80): def get_header(self, header_name):
""" Returns the matching header name for the internal name """
if header_name in self.header_map.keys():
return self.header_map[header_name]
else:
return None
def extract_header(self, header_name, threshold=80):
""" Retrieve a matching column header from the uploaded file. """ Retrieve a matching column header from the uploaded file.
If there is not an exact match, try to match one that is close. If there is not an exact match, try to match one that is close.
""" """
@ -136,3 +153,23 @@ class BomUploadManager:
return matches[0]['header'] return matches[0]['header']
return None return None
def row_count(self):
""" Return the number of rows in the file.
Ignored the top rows as indicated by 'starting row'
"""
if self.data is None:
return 0
return len(self.data) - self.starting_row
def get_row(self, index):
""" Retrieve a dict object representing the data row at a particular offset """
index += self.starting_row
if self.data is None or index >= len(self.data):
return None
return self.data.dict[index]