From a3d2a6533cb6aee29c48c8e1e08e4981c0c8829b Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Fri, 3 Jul 2020 19:39:41 +0200 Subject: [PATCH] Output both .txt and .html variants. --- enhance_table.py | 154 ++++++++++++++++++++++++++++++----------------- update.sh | 3 +- 2 files changed, 102 insertions(+), 55 deletions(-) diff --git a/enhance_table.py b/enhance_table.py index 774b333..02a7ac9 100755 --- a/enhance_table.py +++ b/enhance_table.py @@ -17,12 +17,15 @@ district_pops = { 'sum': 3754418, } -# Read infections table file lines. +# Read infections table path and output type. import sys -if len(sys.argv) != 2: - print('Expecting infections table file path as only argument.') +if len(sys.argv) != 3: + print('Expecting infections table file path and output type as only arguments.') exit(1) infections_table = sys.argv[1] +output_type = sys.argv[2] + +# Read infections table file lines. f = open(infections_table, 'r') lines = f.readlines() f.close() @@ -106,8 +109,50 @@ for i in range(len(sorted_dates)): db[district][date]['week_average'] = week_sum / 7 db[district][date]['week_incidence'] = (week_sum / district_pop) * 100000 -# Explain what this is. -intro = """Table of Berlin's Corona infection number development by districts. +# Optimized for web browser viewing. +if output_type == 'html': + print('') + print('') + print('') + print('') + print('') + for district in sorted_districts: + print('' % district) + print('') + sorted_dates.reverse() + for date in sorted_dates: + print('') + print('' % date) + for district in sorted_districts: + district_data = db[district][date] + week_sum = week_avg = week_inc = '' + new_infections = district_data['new_infections'] + if 'week_sum' in district_data: + week_sum = '%s' % district_data['week_sum'] + if 'week_average' in district_data: + week_avg = '%.1f' % district_data['week_average'] + if 'week_incidence' in district_data: + week_inc = '%.1f' % district_data['week_incidence'] + print('') + print('') + print('
date%s
%s') + print('') + print('' % new_infections) + print('' % week_sum) + print('' % week_avg) + print('' % week_inc) + print('
new%s
wsum%s
wavg%s
winc%s
') + print('
') + print('') + +# Optimized for in-terminal curl. +elif output_type == 'txt': + + # Explain what this is. + intro = \ +"""Table of Berlin's Corona infection number development by districts. Updated daily around 9pm. Abbrevations/explanations: @@ -131,54 +176,55 @@ winc: incidence (x per 100k inhabitants) of new infections for last 7 days Source code: https://plomlompom.com/repos/?p=berlin-corona-table """ -print(intro) - -# Output table of enhanced daily infection data, newest on top, separated into -# 7-day units. -sorted_dates.reverse() -weekday_count = 0 -for date in sorted_dates: - - # Week table header. - if weekday_count == 0: - print(' '*11, ' '.join(sorted_districts[:-1]), - sorted_districts[-1], 'wsum', ' wavg', 'winc') - week_start_date = date + print(intro) - # Day data line. - new_infections = [] - for district in sorted_districts: - new_infections += [db[district][date]['new_infections']] - week_sum = week_avg = week_inc = '' - sum_district = sorted_districts[-1] - sum_district_data = db[sum_district][date] - if 'week_sum' in sum_district_data: - week_sum = '%4s' % sum_district_data['week_sum'] - if 'week_average' in sum_district_data: - week_avg = '%5.1f' % sum_district_data['week_average'] - if 'week_incidence' in sum_district_data: - week_inc = '%4.1f' % sum_district_data['week_incidence'] - print(date, ' '.join(['%3s' % infections for infections in new_infections]), - week_sum, week_avg, week_inc) - - # Maintain 7-day cycle. - weekday_count += 1 - if weekday_count != 7: - continue + # Output table of enhanced daily infection data, newest on top, + # separated into 7-day units. + sorted_dates.reverse() weekday_count = 0 - - # After each 7 days, print summary for individual districts. - weekly_sums = [] - weekly_avgs = [] - weekly_incs = [] - for district in sorted_districts[:-1]: - weekly_sums += [db[district][week_start_date]['week_sum']] - weekly_avgs += [db[district][week_start_date]['week_average']] - weekly_incs += [db[district][week_start_date]['week_incidence']] - print() - print('district stats for week from %s to %s:' % (date, week_start_date)) - print(' '*7, ' '.join(sorted_districts[:-1])) - print('wsum', ' '.join(['%5.1f' % wsum for wsum in weekly_sums])) - print('wavg', ' '.join(['%5.1f' % wavg for wavg in weekly_avgs])) - print('winc', ' '.join(['%5.1f' % winc for winc in weekly_incs])) - print() + sum_district = sorted_districts[-1] + for date in sorted_dates: + + # Week table header. + if weekday_count == 0: + print(' '*11, ' '.join(sorted_districts[:-1]), + sorted_districts[-1], 'wsum', ' wavg', 'winc') + week_start_date = date + + # Day data line. + new_infections = [] + for district in sorted_districts: + new_infections += [db[district][date]['new_infections']] + week_sum = week_avg = week_inc = '' + sum_district_data = db[sum_district][date] + if 'week_sum' in sum_district_data: + week_sum = '%4s' % sum_district_data['week_sum'] + if 'week_average' in sum_district_data: + week_avg = '%5.1f' % sum_district_data['week_average'] + if 'week_incidence' in sum_district_data: + week_inc = '%4.1f' % sum_district_data['week_incidence'] + print(date, ' '.join(['%3s' % infections + for infections in new_infections]), + week_sum, week_avg, week_inc) + + # Maintain 7-day cycle. + weekday_count += 1 + if weekday_count != 7: + continue + weekday_count = 0 + + # After each 7 days, print summary for individual districts. + weekly_sums = [] + weekly_avgs = [] + weekly_incs = [] + for district in sorted_districts[:-1]: + weekly_sums += [db[district][week_start_date]['week_sum']] + weekly_avgs += [db[district][week_start_date]['week_average']] + weekly_incs += [db[district][week_start_date]['week_incidence']] + print() + print('district stats for week from %s to %s:' % (date, week_start_date)) + print(' '*7, ' '.join(sorted_districts[:-1])) + print('wsum', ' '.join(['%5.1f' % wsum for wsum in weekly_sums])) + print('wavg', ' '.join(['%5.1f' % wavg for wavg in weekly_avgs])) + print('winc', ' '.join(['%5.1f' % winc for winc in weekly_incs])) + print() diff --git a/update.sh b/update.sh index 2513827..27a9dd1 100755 --- a/update.sh +++ b/update.sh @@ -18,4 +18,5 @@ curl "${CSV_URL}" \ 'END { printf "\n" }' "${filename}" >> "${table_path}" # Write enhanced table output to directory served by web server. -./enhance_table.py "${table_path}" > /var/www/html/berlin_corona.txt +./enhance_table.py "${table_path}" txt > /var/www/html/berlin_corona.txt +./enhance_table.py "${table_path}" html > /var/www/html/berlin_corona.html -- 2.30.2