Newer
Older
from flask import render_template, redirect, url_for, flash, Blueprint
from sqlalchemy.exc import OperationalError
from celery import states
from celery.utils.log import get_task_logger
from flask_admin.contrib.sqla import ModelView
from database import app, admin, db
from covid19.blueprints.application.application_services import owid_service
from covid19.blueprints.application.application_workers import celery
from covid19.blueprints.owid.owid_model import OwidDateReported, OwidData
from covid19.blueprints.owid.owid_model_import import OwidImport
from covid19.blueprints.application.application_model_transient import ApplicationPage
app_owid = Blueprint('owid', __name__, template_folder='templates', url_prefix='/owid ')
admin.add_view(ModelView(OwidImport, db.session, category="OWID"))
admin.add_view(ModelView(OwidDateReported, db.session, category="OWID"))
admin.add_view(ModelView(OwidData, db.session, category="OWID"))
# def task_owid_download_only(self):
# def task_owid_import_only(self):
# def task_owid_update_dimension_tables_only(self):
# def task_owid_update_fact_table_incremental_only(self):
# def task_owid_update_fact_table_initial_only(self):
# def task_owid_update_fact_table_initial_only(self):
# def task_owid_update_star_schema_incremental(self):
# def task_owid_update_star_schema_initial(self):
# ---------------------------------------------------------------------------------------------------------------
# Url Routes Frontend
# ---------------------------------------------------------------------------------------------------------------
@app_owid.route('/info')
def url_owid_info():
return render_template(
'owid/owid_info.html',
page_info=page_info)
@app_owid.route('/tasks')
def url_owid_tasks():
return render_template(
'owid/owid_tasks.html',
page_info=page_info)
@app_owid.route('/test/page/<int:page>')
@app_owid.route('/test')
def url_owid_test(page=1):
page_info = ApplicationPage('OWID', "Test")
try:
page_data = None
return render_template(
'owid/owid_test.html',
page_data=page_data,
page_info=page_info)
@app_owid.route('/imported/page/<int:page>')
@app_owid.route('/imported')
def url_owid_imported(page=1):
page_info = ApplicationPage('OWID', "Last Import")
try:
page_data = OwidImport.get_all_as_page(page)
except OperationalError:
flash("No data in the database.")
page_data = None
return render_template(
'owid/owid_imported.html',
page_data=page_data,
page_info=page_info)
@app_owid.route('/date_reported/all/page/<int:page>')
@app_owid.route('/date_reported/all')
def url_owid_date_reported_all(page: int = 1):
page_info = ApplicationPage('OWID', "Date Reported", "All")
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
try:
page_data = OwidDateReported.get_all_as_page(page)
except OperationalError:
flash("No regions in the database.")
page_data = None
return render_template(
'owid/date_reported/owid_date_reported_all.html',
page_data=page_data,
page_info=page_info)
@app_owid.route('/date_reported/<int:date_reported_id>/page/<int:page>')
@app_owid.route('/date_reported/<int:date_reported_id>')
def url_owid_date_reported(date_reported_id: int, page: int = 1):
date_reported = OwidDateReported.get_by_id(date_reported_id)
page_info = ApplicationPage(
"Date Reported: " + date_reported.date_reported,
'WHO',
"data of all reported countries for WHO date reported " + date_reported.date_reported + " "
)
try:
page_data = OwidData.get_data_for_day(date_reported, page)
except OperationalError:
flash("No data in the database.")
page_data = None
return render_template(
'owid/date_reported/owid_date_reported_one.html',
owid_date_reported=date_reported,
page_data=page_data,
page_info=page_info)
@app_owid.route('/date_reported/<int:date_reported_id>/cases_new/page/<int:page>')
@app_owid.route('/date_reported/<int:date_reported_id>/cases_new')
def url_owid_date_reported_cases_new(date_reported_id: int, page: int = 1):
date_reported = OwidDateReported.get_by_id(date_reported_id)
page_info = ApplicationPage(
"Date Reported: " + date_reported.date_reported,
'WHO',
"data of all reported countries for WHO date reported " + date_reported.date_reported + " "
)
try:
page_data = OwidData.get_data_for_day_order_by_cases_new(date_reported, page)
except OperationalError:
flash("No data in the database.")
page_data = None
return render_template(
'owid/date_reported/owid_date_reported_one_cases_new.html',
owid_date_reported=date_reported,
page_data=page_data,
page_info=page_info)
@app_owid.route('/date_reported/<int:date_reported_id>/cases_cumulative/page/<int:page>')
@app_owid.route('/date_reported/<int:date_reported_id>/cases_cumulative')
def url_owid_date_reported_cases_cumulative(date_reported_id: int, page: int = 1):
date_reported = OwidDateReported.get_by_id(date_reported_id)
page_info = ApplicationPage(
"Date Reported: " + date_reported.date_reported,
'WHO',
"data of all reported countries for WHO date reported " + date_reported.date_reported + " "
)
try:
page_data = OwidData.get_data_for_day_order_by_cases_cumulative(date_reported, page)
except OperationalError:
flash("No data in the database.")
page_data = None
return render_template(
'owid/date_reported/owid_date_reported_one_cases_cumulative.html',
owid_date_reported=date_reported,
page_data=page_data,
page_info=page_info)
@app_owid.route('/date_reported/<int:date_reported_id>/deaths_new/page/<int:page>')
@app_owid.route('/date_reported/<int:date_reported_id>/deaths_new')
def url_owid_date_reported_deaths_new(date_reported_id: int, page: int = 1):
date_reported = OwidDateReported.get_by_id(date_reported_id)
page_info = ApplicationPage(
"Date Reported: " + date_reported.date_reported,
'WHO',
"data of all reported countries for WHO date reported " + date_reported.date_reported + " "
)
try:
page_data = OwidData.get_data_for_day_order_by_deaths_new(date_reported, page)
except OperationalError:
flash("No data in the database.")
page_data = None
return render_template(
'owid/date_reported/owid_date_reported_one_deaths_new.html',
owid_date_reported=date_reported,
page_data=page_data,
page_info=page_info)
@app_owid.route('/date_reported/<int:date_reported_id>/deaths_cumulative/page/<int:page>')
@app_owid.route('/date_reported/<int:date_reported_id>/deaths_cumulative')
def url_owid_date_reported_deaths_cumulative(date_reported_id: int, page: int = 1):
date_reported = OwidDateReported.get_by_id(date_reported_id)
page_info = ApplicationPage(
"Date Reported: " + date_reported.date_reported,
'WHO',
"data of all reported countries for WHO date reported " + date_reported.date_reported + " "
)
try:
page_data = OwidData.get_data_for_day_order_by_deaths_cumulative(date_reported, page)
except OperationalError:
flash("No data in the database.")
page_data = None
return render_template(
'owid/date_reported/owid_date_reported_one_deaths_cumulative.html',
owid_date_reported=date_reported,
page_data=page_data,
page_info=page_info)
# ----------------------------------------------------------------------------------------------------------------
# Celery TASKS
# ----------------------------------------------------------------------------------------------------------------
@celery.task(bind=True)
def task_owid_download_only(self):
logger = get_task_logger(__name__)
self.update_state(state=states.STARTED)
logger.info("------------------------------------------------------------")
logger.info(" Received: task_owid_download_only [OK] ")
logger.info("------------------------------------------------------------")
self.update_state(state=states.SUCCESS)
result = "OK (task_owid_download_only)"
return result
@celery.task(bind=True)
def task_owid_import_only(self):
logger = get_task_logger(__name__)
self.update_state(state=states.STARTED)
logger.info("------------------------------------------------------------")
logger.info(" Received: task_owid_import_only [OK] ")
logger.info("------------------------------------------------------------")
self.update_state(state=states.SUCCESS)
result = "OK (task_owid_import_only)"
return result
@celery.task(bind=True)
def task_owid_update_dimension_tables_only(self):
logger = get_task_logger(__name__)
self.update_state(state=states.STARTED)
logger.info("------------------------------------------------------------")
logger.info(" Received: task_owid_update_dimension_tables_only [OK] ")
logger.info("------------------------------------------------------------")
self.update_state(state=states.SUCCESS)
result = "OK (task_owid_update_dimension_tables_only)"
return result
@celery.task(bind=True)
def task_owid_update_fact_table_incremental_only(self):
logger = get_task_logger(__name__)
self.update_state(state=states.STARTED)
logger.info("------------------------------------------------------------")
logger.info(" Received: task_owid_update_fact_table_incremental_only [OK] ")
logger.info("------------------------------------------------------------")
owid_service.run_update_fact_table_incremental_only()
self.update_state(state=states.SUCCESS)
result = "OK (task_owid_update_dimension_tables_only)"
return result
@celery.task(bind=True)
def task_owid_update_fact_table_initial_only(self):
logger = get_task_logger(__name__)
self.update_state(state=states.STARTED)
logger.info("------------------------------------------------------------")
logger.info(" Received: task_owid_update_fact_table_initial_only [OK] ")
logger.info("------------------------------------------------------------")
self.update_state(state=states.SUCCESS)
result = "OK (task_owid_update_fact_table_initial_only)"
return result
@celery.task(bind=True)
def task_owid_update_star_schema_incremental(self):
logger = get_task_logger(__name__)
self.update_state(state=states.STARTED)
logger.info("------------------------------------------------------------")
logger.info(" Received: task_owid_update_star_schema_incremental [OK] ")
logger.info("------------------------------------------------------------")
self.update_state(state=states.SUCCESS)
result = "OK (task_owid_update_star_schema_incremental)"
return result
@celery.task(bind=True)
def task_owid_update_star_schema_initial(self):
logger = get_task_logger(__name__)
self.update_state(state=states.STARTED)
logger.info("------------------------------------------------------------")
logger.info(" Received: task_owid_update_star_schema_initial [OK] ")
logger.info("------------------------------------------------------------")
self.update_state(state=states.SUCCESS)
result = "OK (task_owid_update_star_schema_incremental)"
return result
# ----------------------------------------------------------------------------------------------------------------
# URL Routes for Celery TASKS
# ----------------------------------------------------------------------------------------------------------------
app.logger.info("url_owid_task_download_only [start]")
owid_service.run_download_only()
flash("owid_service.run_download_only ok")
app.logger.info("url_owid_task_download_only [done]")
flash(message="long running background task started", category="warning")
@app_owid.route('/task/update/dimension-tables/only')
def url_task_owid_update_dimension_tables_only():
app.logger.info("url_task_owid_update_dimension_tables_only [start]")
task_owid_update_dimension_tables_only.apply_async()
flash("task_owid_update_dimension_tables_only started")
flash(message="long running background task started", category="warning")
app.logger.info("url_task_owid_update_dimension_tables_only [done]")
@app_owid.route('/task/update/fact-table/incremental/only')
def url_task_owid_update_fact_table_incremental_only():
app.logger.info("url_task_owid_update_fact_table_incremental_only [start]")
task_owid_update_fact_table_incremental_only.apply_async()
flash("task_owid_update_fact_table_incremental_only started")
flash(message="long running background task started", category="warning")
app.logger.info("url_task_owid_update_fact_table_incremental_only [done]")
@app_owid.route('/task/update/fact-table/initial/only')
def url_task_owid_update_fact_table_initial_only():
app.logger.info("url_task_owid_update_fact_table_initial_only [start]")
task_owid_update_fact_table_initial_only.apply_async()
flash("task_owid_update_fact_table_initial_only started")
flash(message="long running background task started", category="warning")
app.logger.info("url_owid_task_update_full [start]")
owid_service.run_download_only()
flash("owid_service.service_download.download_file ok")
task_owid_update_star_schema_initial.apply_async()
flash(message="long running background task started", category="warning")
@app_owid.route('/task/update/star_schema/incremental')
def url_task_owid_update_star_schema_incremental():
app.logger.info("url_task_owid_update_star_schema_incremental [start]")
owid_service.run_download_only()
flash("owid_service.service_download.download_file ok")
task_owid_update_star_schema_incremental.apply_async()
flash("task_owid_run_update_full started")
flash(message="long running background task started", category="warning")
app.logger.info("url_task_owid_update_star_schema_incremental [done]")