33from flask import Flask
44from flask_limiter import Limiter
55from flask_limiter .util import get_remote_address
6+ from flask_migrate import Migrate
7+ from flask_sqlalchemy import SQLAlchemy
68from flask_wtf .csrf import CSRFProtect # type: ignore[import]
79from govuk_frontend_wtf .main import WTFormsHelpers # type: ignore[import]
810from jinja2 import ChoiceLoader , PackageLoader , PrefixLoader
1113from config import Config
1214
1315# Initialize Flask extensions. These are initialized here for easier access.
14- csrf = CSRFProtect ()
15- limiter = Limiter (get_remote_address , default_limits = ["2 per second" , "60 per minute" ])
16+ csrf : CSRFProtect = CSRFProtect ()
17+ db : SQLAlchemy = SQLAlchemy ()
18+ limiter : Limiter = Limiter (get_remote_address , default_limits = ["2 per second" , "60 per minute" ])
19+ migrate : Migrate = Migrate ()
1620
1721
1822def create_app (config_class : Type [Config ] = Config ) -> Flask :
@@ -24,7 +28,7 @@ def create_app(config_class: Type[Config] = Config) -> Flask:
2428 Returns:
2529 A configured Flask application instance.
2630 """
27- app : Flask = Flask (__name__ )
31+ app : Flask = Flask (__name__ ) # type: ignore[assignment]
2832 app .config .from_object (config_class )
2933 app .jinja_env .globals ["govukRebrand" ] = True
3034 app .jinja_env .lstrip_blocks = True
@@ -48,7 +52,9 @@ def create_app(config_class: Type[Config] = Config) -> Flask:
4852
4953 # Initialize Flask extensions
5054 csrf .init_app (app )
55+ db .init_app (app )
5156 limiter .init_app (app )
57+ migrate .init_app (app , db )
5258 WTFormsHelpers (app )
5359
5460 # Register blueprints. These define different sections of the application.
@@ -57,3 +63,6 @@ def create_app(config_class: Type[Config] = Config) -> Flask:
5763 app .register_blueprint (main_bp )
5864
5965 return app
66+
67+
68+ from app import models # noqa: E402,F401
0 commit comments