Fixing to handle N/A entries, extra column. Adding exceptions for query to top n for countries.

This commit is contained in:
Alex Huddleston 2020-04-15 17:17:24 -05:00
parent 05ee017260
commit f587c6ca4c
3 changed files with 27 additions and 16 deletions

View file

@ -7,8 +7,8 @@ Base = declarative_base()
class covidData(Base): class covidData(Base):
__tablename__ = 'data' __tablename__ = 'data'
selection = Column(String(32), primary_key=True) selection = Column(String(32))
selection_original = Column(String(32)) selection_original = Column(String(32), primary_key=True)
total_cases = Column(Integer) total_cases = Column(Integer)
new_cases = Column(Integer) new_cases = Column(Integer)
total_deaths = Column(Integer) total_deaths = Column(Integer)

View file

@ -4,19 +4,25 @@ from lib.covidData import covidData
def set_data_dict(selection, import_data): 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( formatted_import_data = [d.strip().replace(
',', '').replace('+', '') for d in import_data] ',', '').replace('+', '') for d in import_data]
output_dict = { output_dict = {
'selection': selection.upper(), 'selection': selection.upper().strip().replace('\n', ''),
'selection_original': selection 'selection_original': selection.strip().replace('\n', '')
} }
for i in range(2, len(columns)): for i in range(1, len(columns)):
if(formatted_import_data[i - 1] and not formatted_import_data[i - 1] == ''): if(formatted_import_data[i] and not formatted_import_data[i] == ''):
if(i == len(columns) - 1): if(i >= len(columns) - 2):
output_dict[columns[i]] = formatted_import_data[i - 1] output_dict[columns[i]] = formatted_import_data[i]
else: 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 return output_dict
@ -27,7 +33,7 @@ def get_data_dict(query_data):
'selection_original': query_data.selection_original 'selection_original': query_data.selection_original
} }
for i in range(2, len(columns)): for i in range(2, len(columns)):
if(i == len(columns) - 1): if(i >= len(columns) - 2):
output_dict[columns[i]] = query_data.__getattribute__( output_dict[columns[i]] = query_data.__getattribute__(
columns[i]) columns[i])
else: else:
@ -57,6 +63,10 @@ def get_data(session, selection):
def get_top_n_rows(session, num): def get_top_n_rows(session, num):
print(f'Getting top {num} rows.') 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() covidData.total_cases.desc()).limit(num).all()
return [get_data_dict(n) for n in top_n_rows] return [get_data_dict(n) for n in top_n_rows]

View file

@ -12,6 +12,8 @@ sa_data_url = 'https://www.sanantonio.gov/health/news/alerts/coronavirus'
def format_parse_int(num): def format_parse_int(num):
if(num < 0):
return 'N/A'
output = '' output = ''
count = 0 count = 0
while not num == 0: while not num == 0:
@ -65,14 +67,13 @@ def get_covid_data(selection):
def get_top_data(number): def get_top_data(number):
session = create_session(Base) 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() session.close()
output = '' output = ''
count = 0 count = 0
for row in top_n_rows: for row in top_n_rows:
if(count > 1): output += f'# {count + 1}\n{row["selection_original"]}: {format_parse_int(row["total_cases"])}'
output += f'# {count - 1}\n{row["selection_original"]}: {format_parse_int(row["total_cases"])}' if(not count == number):
if(not count == number + 1):
output += '\n' output += '\n'
count += 1 count += 1
return output return output