From f587c6ca4cdaead7449d14551f8da3b230649eb5 Mon Sep 17 00:00:00 2001 From: Alex Huddleston Date: Wed, 15 Apr 2020 17:17:24 -0500 Subject: [PATCH] Fixing to handle N/A entries, extra column. Adding exceptions for query to top n for countries. --- lib/covidData.py | 4 ++-- lib/covid_data_lib.py | 30 ++++++++++++++++++++---------- lib/parse_data.py | 9 +++++---- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/lib/covidData.py b/lib/covidData.py index 9640cfd..79283a9 100755 --- a/lib/covidData.py +++ b/lib/covidData.py @@ -7,8 +7,8 @@ Base = declarative_base() class covidData(Base): __tablename__ = 'data' - selection = Column(String(32), primary_key=True) - selection_original = Column(String(32)) + selection = Column(String(32)) + selection_original = Column(String(32), primary_key=True) total_cases = Column(Integer) new_cases = Column(Integer) total_deaths = Column(Integer) diff --git a/lib/covid_data_lib.py b/lib/covid_data_lib.py index 684dd4f..3161eb1 100644 --- a/lib/covid_data_lib.py +++ b/lib/covid_data_lib.py @@ -4,19 +4,25 @@ from lib.covidData import covidData def set_data_dict(selection, import_data): - columns = [i for i in covidData.__dict__.keys() if i[:1] != '_'] + columns = [i for i in covidData.__dict__.keys() if i[:1] != '_'][1:] formatted_import_data = [d.strip().replace( ',', '').replace('+', '') for d in import_data] output_dict = { - 'selection': selection.upper(), - 'selection_original': selection + 'selection': selection.upper().strip().replace('\n', ''), + 'selection_original': selection.strip().replace('\n', '') } - for i in range(2, len(columns)): - if(formatted_import_data[i - 1] and not formatted_import_data[i - 1] == ''): - if(i == len(columns) - 1): - output_dict[columns[i]] = formatted_import_data[i - 1] + for i in range(1, len(columns)): + if(formatted_import_data[i] and not formatted_import_data[i] == ''): + if(i >= len(columns) - 2): + output_dict[columns[i]] = formatted_import_data[i] else: - output_dict[columns[i]] = int(formatted_import_data[i - 1]) + try: + output_dict[columns[i]] = int(formatted_import_data[i]) + except: + output_dict[columns[i]] = -1 + else: + output_dict[columns[i]] = -1 + print(output_dict) return output_dict @@ -27,7 +33,7 @@ def get_data_dict(query_data): 'selection_original': query_data.selection_original } for i in range(2, len(columns)): - if(i == len(columns) - 1): + if(i >= len(columns) - 2): output_dict[columns[i]] = query_data.__getattribute__( columns[i]) else: @@ -57,6 +63,10 @@ def get_data(session, selection): def get_top_n_rows(session, num): print(f'Getting top {num} rows.') - top_n_rows = session.query(covidData).order_by( + filter_selections = ['WORLD', 'TOTAL', 'EUROPE', 'NORTH AMERICA', 'ASIA', 'SOUTH AMERICA', 'AFRICA', 'OCEANIA'] + exception_selection = session.query(covidData).filter( + covidData.selection.in_(filter_selections)) + exception_null = session.query(covidData).filter(covidData.total_cases == -1) + top_n_rows = session.query(covidData).except_all(exception_null, exception_selection).order_by( covidData.total_cases.desc()).limit(num).all() return [get_data_dict(n) for n in top_n_rows] diff --git a/lib/parse_data.py b/lib/parse_data.py index ac1dcec..0ac20ef 100755 --- a/lib/parse_data.py +++ b/lib/parse_data.py @@ -12,6 +12,8 @@ sa_data_url = 'https://www.sanantonio.gov/health/news/alerts/coronavirus' def format_parse_int(num): + if(num < 0): + return 'N/A' output = '' count = 0 while not num == 0: @@ -65,14 +67,13 @@ def get_covid_data(selection): def get_top_data(number): session = create_session(Base) - top_n_rows = get_top_n_rows(session, number + 2) + top_n_rows = get_top_n_rows(session, number) session.close() output = '' count = 0 for row in top_n_rows: - if(count > 1): - output += f'# {count - 1}\n{row["selection_original"]}: {format_parse_int(row["total_cases"])}' - if(not count == number + 1): + output += f'# {count + 1}\n{row["selection_original"]}: {format_parse_int(row["total_cases"])}' + if(not count == number): output += '\n' count += 1 return output