71 lines
2.5 KiB
Python
71 lines
2.5 KiB
Python
#!/usr/bin/python3
|
|
|
|
from lib.covidData import covidData
|
|
|
|
|
|
def set_data_dict(selection, import_data):
|
|
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().strip().replace('\n', ''),
|
|
'selection_original': selection.strip().replace('\n', '')
|
|
}
|
|
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:
|
|
try:
|
|
output_dict[columns[i]] = int(formatted_import_data[i])
|
|
except:
|
|
output_dict[columns[i]] = -1
|
|
else:
|
|
output_dict[columns[i]] = -1
|
|
return output_dict
|
|
|
|
|
|
def get_data_dict(query_data):
|
|
columns = [i for i in covidData.__dict__.keys() if i[:1] != '_']
|
|
output_dict = {
|
|
'selection': query_data.selection,
|
|
'selection_original': query_data.selection_original
|
|
}
|
|
for i in range(2, len(columns)):
|
|
if(i >= len(columns) - 2):
|
|
output_dict[columns[i]] = query_data.__getattribute__(
|
|
columns[i])
|
|
else:
|
|
output_dict[columns[i]] = int(
|
|
query_data.__getattribute__(columns[i]))
|
|
return output_dict
|
|
|
|
|
|
def set_data(session, selection, import_data):
|
|
new_data = covidData()
|
|
formatted_data_dict = set_data_dict(selection, import_data)
|
|
try:
|
|
for key in formatted_data_dict:
|
|
new_data.__setattr__(key, formatted_data_dict[key])
|
|
except Exception as e:
|
|
print(e)
|
|
session.merge(new_data)
|
|
session.commit()
|
|
|
|
|
|
def get_data(session, selection):
|
|
print('Formatting data.')
|
|
all_data_query = session.query(covidData).filter(
|
|
covidData.selection == selection).all()
|
|
return get_data_dict(all_data_query[0])
|
|
|
|
|
|
def get_top_n_rows(session, num):
|
|
print(f'Getting top {num} rows.')
|
|
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]
|