#!//usr/bin/env python3
-import sys
-if len(sys.argv) != 2:
- print('Expecting infections table file path as only argument.')
- exit(1)
-infections_table = sys.argv[1]
-
# District population numbers as per Wikipedia.
district_pops = {
'CW': 342332,
'sum': 3754418,
}
+# Read infections table file lines.
+import sys
+if len(sys.argv) != 2:
+ print('Expecting infections table file path as only argument.')
+ exit(1)
+infections_table = sys.argv[1]
f = open(infections_table, 'r')
lines = f.readlines()
f.close()
+# Basic input validation.
+import datetime
+header_elements = lines[0].split()
+if set(header_elements) != district_pops.keys() or \
+ len(header_elements) != len(district_pops.keys()):
+ raise Exception('infections table: invalid header')
+line_count = 0
+for line in lines[1:]:
+ line_count += 1
+ fields = line.split()
+ if len(header_elements) != len(fields) - 1:
+ raise Exception('infections table: too many elements on line %s',
+ line_count)
+ try:
+ datetime.date.fromisoformat(fields[0])
+ except ValueError:
+ raise Exception('infections table: bad ISO date on line %s',
+ line_count)
+ for field in fields[1:]:
+ try:
+ int(field)
+ except ValueError:
+ raise Exception('infections table: bad value on line %s',
+ line_count)
+
# Parse first table file line for the names and order of districts.
db = {}
sorted_districts = []