tally_sheet: no duplicates
- In add_row method, added new code to forbid adding entries that have already
been added.
- Also in sprint_report method, added support for empty tally sheet.
Change-Id: I2c64430099bf5f5d34abfbfbd153bdd135bf2ed0
Signed-off-by: Michael Walsh <micwalsh@us.ibm.com>
diff --git a/lib/tally_sheet.py b/lib/tally_sheet.py
index 76a2673..322fac6 100755
--- a/lib/tally_sheet.py
+++ b/lib/tally_sheet.py
@@ -146,6 +146,11 @@
used.
"""
+ if row_key in self.__table:
+ # If we allow this, the row values get re-initialized.
+ message = "An entry for \"" + row_key + "\" already exists in"
+ message += " tally sheet."
+ raise ValueError(message)
if init_fields_dict is None:
init_fields_dict = self.__init_fields_dict
try:
@@ -268,19 +273,22 @@
dash_format_string = '{0:-<' + str(key_width) + '}'
field_num = 0
- first_rec = next(iter(self.__table.items()))
- for row_key, value in first_rec[1].items():
- field_num += 1
- if isinstance(value, int):
- align = ':>'
- else:
- align = ':<'
- format_string += ' {' + str(field_num) + align +\
- str(len(row_key)) + '}'
- dash_format_string += ' {' + str(field_num) + ':->' +\
- str(len(row_key)) + '}'
- report_width += 1 + len(row_key)
- col_names.append(row_key.title())
+ try:
+ first_rec = next(iter(self.__table.items()))
+ for row_key, value in first_rec[1].items():
+ field_num += 1
+ if isinstance(value, int):
+ align = ':>'
+ else:
+ align = ':<'
+ format_string += ' {' + str(field_num) + align +\
+ str(len(row_key)) + '}'
+ dash_format_string += ' {' + str(field_num) + ':->' +\
+ str(len(row_key)) + '}'
+ report_width += 1 + len(row_key)
+ col_names.append(row_key.title())
+ except StopIteration:
+ pass
num_fields = field_num + 1
totals_line_fmt = '{0:=<' + str(report_width) + '}'