Passed
Push — master ( 622bd5...daf764 )
by Mingyu
57s
created

{{cookiecutter.project_slug}}.app.create_app()   A

Complexity

Conditions 2

Size

Total Lines 18
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 12
dl 0
loc 18
rs 9.8
c 0
b 0
f 0
cc 2
nop 1
1
from flask import Flask
2
from werkzeug.exceptions import HTTPException
3
4
from app.misc.log import log
5
6
7
def register_extensions(flask_app: Flask):
8
    from app import extensions
9
10
    extensions.cors.init_app(flask_app)
11
12
13
def register_views(flask_app: Flask):
14
    from app.views import route
15
16
    route(flask_app)
17
18
19
def register_hooks(flask_app: Flask):
20
    from app.hooks.error import broad_exception_handler, http_exception_handler
21
    from app.hooks.request_context import after_request
22
23
    flask_app.after_request(after_request)
24
    flask_app.register_error_handler(HTTPException, http_exception_handler)
25
    flask_app.register_error_handler(Exception, broad_exception_handler)
26
27
28
def create_app(*config_cls) -> Flask:
29
    log(
30
        message="Flask application initialized with {}".format(
31
            ", ".join([config.__name__ for config in config_cls])
32
        ),
33
        keyword="INFO",
34
    )
35
36
    flask_app = Flask(__name__)
37
38
    for config in config_cls:
39
        flask_app.config.from_object(config)
40
41
    register_extensions(flask_app)
42
    register_views(flask_app)
43
    register_hooks(flask_app)
44
45
    return flask_app
46