diff --git a/mvc_flask/__init__.py b/mvc_flask/__init__.py index 3d11a58..fa27c7c 100644 --- a/mvc_flask/__init__.py +++ b/mvc_flask/__init__.py @@ -1,13 +1,11 @@ -from importlib import import_module - from flask import Flask -from flask.blueprints import Blueprint from .middlewares.http.router_middleware import RouterMiddleware as Router from .middlewares.http.method_override_middleware import MethodOverrideMiddleware from .middlewares.http.custom_request_middleware import CustomRequestMiddleware -from .middlewares.hook_middleware import HookMiddleware +from .middlewares.blueprint_middleware import BlueprintMiddleware + from .helpers.html.input_method_helper import InputMethodHelper @@ -25,32 +23,9 @@ def init_app(self, app: Flask = None, path="app"): app.wsgi_app = MethodOverrideMiddleware(app.wsgi_app) # register blueprint - self.register_blueprint(app) + # register_blueprint(app) + BlueprintMiddleware(app, path).register() @app.context_processor def inject_stage_and_region(): return dict(method=InputMethodHelper().input_hidden_method) - - def register_blueprint(self, app: Flask): - # load routes defined from users - import_module(f"{self.path}.routes") - - for route in Router._method_route().items(): - controller = route[0] - blueprint = Blueprint(controller, controller) - - obj = import_module(f"{self.path}.controllers.{controller}_controller") - view_func = getattr(obj, f"{controller.title()}Controller") - instance_of_controller = view_func() - - HookMiddleware().register(instance_of_controller, blueprint) - - for resource in route[1]: - blueprint.add_url_rule( - rule=resource.path, - endpoint=resource.action, - view_func=getattr(instance_of_controller, resource.action), - methods=resource.method, - ) - - app.register_blueprint(blueprint) diff --git a/mvc_flask/middlewares/blueprint_middleware.py b/mvc_flask/middlewares/blueprint_middleware.py new file mode 100644 index 0000000..6ce331f --- /dev/null +++ b/mvc_flask/middlewares/blueprint_middleware.py @@ -0,0 +1,38 @@ +from flask import Flask +from importlib import import_module + +from flask.blueprints import Blueprint + +from .hook_middleware import HookMiddleware + +from .http.router_middleware import RouterMiddleware as Router + + +class BlueprintMiddleware: + def __init__(self, app: Flask, path: str) -> None: + self.app = app + self.path = path + + # load routes defined from users + import_module(f"{self.path}.routes") + + def register(self): + for route in Router._method_route().items(): + controller = route[0] + blueprint = Blueprint(controller, controller) + + obj = import_module(f"{self.path}.controllers.{controller}_controller") + view_func = getattr(obj, f"{controller.title()}Controller") + instance_of_controller = view_func() + + HookMiddleware().register(instance_of_controller, blueprint) + + for resource in route[1]: + blueprint.add_url_rule( + rule=resource.path, + endpoint=resource.action, + view_func=getattr(instance_of_controller, resource.action), + methods=resource.method, + ) + + self.app.register_blueprint(blueprint)