diff --git a/requirements/dev.in b/requirements/dev.in index 6687c805f515684e01842e8330dc77e46b30afc3..cd5777362d3611f9486336ea2fb97cc707b1ae47 100644 --- a/requirements/dev.in +++ b/requirements/dev.in @@ -6,7 +6,6 @@ Flask-SQLAlchemy>=2.4.4 Flask-Cors>=3.0.10 Flask-BS4>=4.5.3.0,<5.0.0.0 flask-resources==0.6.0 -Flask-PluginKit>=3.6.0 Flask-ResponseBuilder>=2.0.12 Flask-Babel>=2 Flask-Admin>=1.5.7 @@ -15,16 +14,9 @@ Flask-Monitoring>=1.1.2 flask-healthz>=0.0.2 Flask-Caching>=1.9.0 Flask-DB>=0.3.0 -flask-pwa>=0.1.0 Flask-Moment>=0.11.0 -Flask-CKEditor>=0.4.4.1 -flask-checkr>=0.1.2 flask-whooshalchemy3>=0.2.0 -flask-was>=0.1.0 -Flask-GraphQL>=2.0.1 -flask-hintful>=0.0.7 Flask-PluginKit>=3.6.0 -Flask-ResponseBuilder>=2.0.12 flask-filealchemy>=0.6.1 SQLAlchemy>=1.3.23 celery[redis]>=5.0.5 diff --git a/src/covid19/blueprints/admin/templates/admin/fragments/fragment_admin_navtabs.html b/src/covid19/blueprints/admin/templates/admin/fragments/fragment_admin_navtabs.html index 4ddf5d8c22edaf5980ae48aa0f3d1928a7cdb1f5..bf4fa0aa24d539440726681a78d837c6eb28d5f6 100644 --- a/src/covid19/blueprints/admin/templates/admin/fragments/fragment_admin_navtabs.html +++ b/src/covid19/blueprints/admin/templates/admin/fragments/fragment_admin_navtabs.html @@ -16,6 +16,14 @@ <a class="nav-link" href="{{ url_for( 'app_admin.url_admin_index') }}">flask admin</a> </li> + <li class="nav-item"> + <a class="nav-link" + href="/dashboard">dashboard</a> + </li> + <li class="nav-item"> + <a class="nav-link" + href="/redisboard">redisboard</a> + </li> </ul> </nav> </div> diff --git a/src/covid19/blueprints/application/application_model.py b/src/covid19/blueprints/application/application_model.py index 13a96bc94fbbf52959f2509210f06870cba565ca..ac2014b7c79710bd9c3a12023cb7314a935c3d6e 100644 --- a/src/covid19/blueprints/application/application_model.py +++ b/src/covid19/blueprints/application/application_model.py @@ -2,6 +2,7 @@ from sqlalchemy import and_, func from datetime import date, datetime, time from database import db, ITEMS_PER_PAGE from sqlalchemy.orm import joinedload +from whoosh.analysis import StemmingAnalyzer class ApplicationDateReported(db.Model): @@ -228,6 +229,8 @@ class RkiDateReported(ApplicationDateReported): __table_args__ = ( db.UniqueConstraint('date_reported', 'datum', name="uix_rki_date_reported"), ) + __searchable__ = ['date_reported', 'year_week', 'year', 'datum'] # indexed fields + __analyzer__ = StemmingAnalyzer() id = db.Column(db.Integer, primary_key=True) date_reported = db.Column(db.String(255), nullable=False) diff --git a/src/covid19/blueprints/application/application_views.py b/src/covid19/blueprints/application/application_views.py index 2aed03ed1a734850d6d43f4d96fb046a7251c6d4..2c9ebe61c32c0f7aaf909a69b02d6eabf5458e3b 100644 --- a/src/covid19/blueprints/application/application_views.py +++ b/src/covid19/blueprints/application/application_views.py @@ -1,5 +1,6 @@ from flask import render_template, redirect, url_for, Blueprint from flask_admin.contrib.sqla import ModelView +from flask_healthz import healthz from database import app, admin, db from covid19.blueprints.application.application_model_transient import ApplicationPage @@ -30,6 +31,7 @@ app.register_blueprint(app_rki_landkreise, url_prefix='/rki/landkreise') app.register_blueprint(app_rki_vaccination, url_prefix='/rki/vaccination') app.register_blueprint(app_who, url_prefix='/who') app.register_blueprint(app_owid, url_prefix='/owid') +app.register_blueprint(healthz, url_prefix="/healthz") ############################################################################################ # diff --git a/src/covid19/blueprints/ecdc/ecdc_model.py b/src/covid19/blueprints/ecdc/ecdc_model.py index cdc2075051812ec3063b27c64c295ae901c436db..ea76e6829e52bd63debed6858c69631b8a31fa8e 100644 --- a/src/covid19/blueprints/ecdc/ecdc_model.py +++ b/src/covid19/blueprints/ecdc/ecdc_model.py @@ -1,4 +1,5 @@ from sqlalchemy import and_ +from whoosh.analysis import StemmingAnalyzer from datetime import date from database import db, ITEMS_PER_PAGE from covid19.blueprints.application.application_model import ApplicationDateReported, ApplicationRegion @@ -10,6 +11,8 @@ class EcdcDateReported(ApplicationDateReported): __table_args__ = ( db.UniqueConstraint('date_reported', 'datum', name="uix_ecdc_date_reported"), ) + __searchable__ = ['date_reported', 'year_week', 'year', 'datum'] # indexed fields + __analyzer__ = StemmingAnalyzer() id = db.Column(db.Integer, primary_key=True) date_reported = db.Column(db.String(255), nullable=False, unique=True) diff --git a/src/covid19/blueprints/owid/owid_model.py b/src/covid19/blueprints/owid/owid_model.py index 047603f331e53566fc3788b4d3dd9b1b9468a84d..a9e5b2e5c7d58fafdb190fd7fa6ac0e3f15404bd 100644 --- a/src/covid19/blueprints/owid/owid_model.py +++ b/src/covid19/blueprints/owid/owid_model.py @@ -1,4 +1,5 @@ from sqlalchemy import and_, func +from whoosh.analysis import StemmingAnalyzer from datetime import date from database import db, ITEMS_PER_PAGE from sqlalchemy.orm import joinedload @@ -11,6 +12,8 @@ class OwidDateReported(ApplicationDateReported): __table_args__ = ( db.UniqueConstraint('date_reported', 'datum', name="uix_owid_date_reported"), ) + __searchable__ = ['year', 'year_week', 'date_reported'] # indexed fields + __analyzer__ = StemmingAnalyzer() id = db.Column(db.Integer, primary_key=True) date_reported = db.Column(db.String(255), nullable=False, unique=True) @@ -46,6 +49,8 @@ class OwidDateReported(ApplicationDateReported): class OwidData(db.Model): __tablename__ = 'owid_data' + __searchable__ = ['continent', 'location', 'iso_code'] # indexed fields + __analyzer__ = StemmingAnalyzer() id = db.Column(db.Integer, primary_key=True) date_reported_id = db.Column(db.Integer, diff --git a/src/covid19/blueprints/rki_bundeslaender/rki_bundeslaender_model.py b/src/covid19/blueprints/rki_bundeslaender/rki_bundeslaender_model.py index 2c1eec6c295556ab3060008a791382727eebe4da..152fa2df07518478627767a3d7c7109b16934a4d 100644 --- a/src/covid19/blueprints/rki_bundeslaender/rki_bundeslaender_model.py +++ b/src/covid19/blueprints/rki_bundeslaender/rki_bundeslaender_model.py @@ -1,8 +1,12 @@ +from whoosh.analysis import StemmingAnalyzer + from database import db, ITEMS_PER_PAGE class RkiBundeslaender(db.Model): __tablename__ = 'rki_bundeslaender' + __searchable__ = ['county'] # indexed fields + __analyzer__ = StemmingAnalyzer() id = db.Column(db.Integer, primary_key=True) object_id_1 = db.Column(db.Integer, nullable=False) diff --git a/src/covid19/blueprints/rki_landkreise/rki_landkreise_model.py b/src/covid19/blueprints/rki_landkreise/rki_landkreise_model.py index 8c2d1016a65079092a935cd55b7f5afeb6863b2d..748d59f3229c8ddef023dc8f0e78ae5a370bb326 100644 --- a/src/covid19/blueprints/rki_landkreise/rki_landkreise_model.py +++ b/src/covid19/blueprints/rki_landkreise/rki_landkreise_model.py @@ -2,11 +2,15 @@ from sqlalchemy import and_ from datetime import date from sqlalchemy.orm import joinedload +from whoosh.analysis import StemmingAnalyzer + from database import db, ITEMS_PER_PAGE class RkiLandkreise(db.Model): __tablename__ = 'rki_landkreise' + __searchable__ = ['county'] # indexed fields + __analyzer__ = StemmingAnalyzer() id = db.Column(db.Integer, primary_key=True) diff --git a/src/covid19/blueprints/rki_vaccination/rki_vaccination_model.py b/src/covid19/blueprints/rki_vaccination/rki_vaccination_model.py index 111af443bb1ddf65120991a49b58bb04e0867305..b371ac2ed9167ec9946229c4a245798690036c7d 100644 --- a/src/covid19/blueprints/rki_vaccination/rki_vaccination_model.py +++ b/src/covid19/blueprints/rki_vaccination/rki_vaccination_model.py @@ -1,5 +1,7 @@ from datetime import date +from whoosh.analysis import StemmingAnalyzer + from database import db, ITEMS_PER_PAGE from covid19.blueprints.application.application_model import ApplicationDateReported @@ -12,6 +14,8 @@ class RkiVaccinationDateReported(ApplicationDateReported): __table_args__ = ( db.UniqueConstraint('date_reported', 'datum', name="uix_rki_vaccination_date_reported"), ) + __searchable__ = ['year', 'date_reported', 'year_week'] # indexed fields + __analyzer__ = StemmingAnalyzer() id = db.Column(db.Integer, primary_key=True) date_reported = db.Column(db.String(255), nullable=False, unique=True) diff --git a/src/covid19/blueprints/who/who_model.py b/src/covid19/blueprints/who/who_model.py index 0b633c2f90845363b8790e5f004165e7d78bae4e..8ba53bcd8a229d57ebbb39aeaa7f6b75c9425583 100644 --- a/src/covid19/blueprints/who/who_model.py +++ b/src/covid19/blueprints/who/who_model.py @@ -1,5 +1,8 @@ from sqlalchemy import and_, func from datetime import date + +from whoosh.analysis import StemmingAnalyzer + from database import db, ITEMS_PER_PAGE from sqlalchemy.orm import joinedload from covid19.blueprints.application.application_model import ApplicationDateReported, ApplicationRegion @@ -11,6 +14,8 @@ class WhoDateReported(ApplicationDateReported): __table_args__ = ( db.UniqueConstraint('date_reported', 'datum', name="uix_who_date_reported"), ) + __searchable__ = ['year', 'date_reported', 'year_week'] # indexed fields + __analyzer__ = StemmingAnalyzer() id = db.Column(db.Integer, primary_key=True) date_reported = db.Column(db.String(255), nullable=False, unique=True) @@ -50,6 +55,8 @@ class WhoRegion(ApplicationRegion): __table_args__ = ( db.UniqueConstraint('region', name="uix_who_region"), ) + __searchable__ = ['region'] # indexed fields + __analyzer__ = StemmingAnalyzer() id = db.Column(db.Integer, primary_key=True) region = db.Column(db.String(255), nullable=False, unique=True) @@ -60,6 +67,8 @@ class WhoCountry(db.Model): __table_args__ = ( db.UniqueConstraint('country_code', 'country', name="uix_who_country"), ) + __searchable__ = ['country_code','country'] # indexed fields + __analyzer__ = StemmingAnalyzer() id = db.Column(db.Integer, primary_key=True) country_code = db.Column(db.String(255), unique=True, nullable=False) diff --git a/src/database.py b/src/database.py index bb75f6f69246484e17204e14969b721c44ff21c3..5eeb7e43b821d211308e8bc1fbdafe715553d1d7 100644 --- a/src/database.py +++ b/src/database.py @@ -1,5 +1,7 @@ import logging from flask import Flask, logging +import flask_monitoringdashboard as dashboard +from flask_redisboard import RedisBoardExtension from flask_cors import CORS from flask_bs4 import Bootstrap from flask_sqlalchemy import SQLAlchemy @@ -8,9 +10,11 @@ from flask_admin import Admin from celery import Celery from celery.utils.log import LoggingProxy +board = RedisBoardExtension() def create_app(): my_app = Flask('covid19') + dashboard.bind(my_app) CORS(my_app) Bootstrap(my_app) my_app.config.from_object("config") @@ -22,6 +26,7 @@ def create_app(): my_app.config['SQLALCHEMY_DATABASE_URI'] = db_url my_app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # silence the deprecation warning my_app.config['FLASK_ADMIN_SWATCH'] = 'superhero' + board.init_app(my_app) return my_app