Coverage for src/__init__.py : 92%
Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from flask import Flask
2from jwt import ExpiredSignatureError
4from src.addons import db, ma, migrate, cors, bcrypt, jwt, flask_uuid, socketio
5from src.utils import err_resp
6import settings
9def create_app(config=None):
10 """
11 Create application
12 """
13 #: Flask application
14 app = Flask(__name__)
15 if config is None:
16 app.config.from_object(settings)
17 else:
18 app.config.from_object(config)
20 # Registers flask extensions
21 db.init_app(app)
22 ma.init_app(app)
23 jwt.init_app(app)
24 bcrypt.init_app(app)
25 cors.init_app(app, resources={r"*": {"origins": "*"}})
26 migrate.init_app(app, db=db)
27 flask_uuid.init_app(app)
28 socketio.init_app(app, cors_allowed_origins="*")
30 # JWT overrided method
31 from .model import RevokedTokenModel
33 @jwt.token_in_blacklist_loader
34 def check_if_token_is_revoked(decrypted_token):
35 return RevokedTokenModel.is_revoked(decrypted_token['jti'])
37 @jwt.user_identity_loader
38 def user_identity_lookup(user):
39 return user.uuid
41 @jwt.user_claims_loader
42 def add_claims_to_access_token(user):
43 return {'permissions': [p.permission for role in user.role for p in role.permission]}
45 @jwt.expired_token_loader
46 def custom_expired_token_loader_callback():
47 return err_resp('The token has expired', 401)
49 @app.errorhandler(ExpiredSignatureError)
50 def handle_expired_token(e):
51 return err_resp('The token has expired', 401)
53 # Register blueprints
54 from .resources import api_bp
56 app.register_blueprint(api_bp, url_prefix="/api")
58 # Register websocket
59 from .resources.ws import SandboxResource
61 socketio.on_namespace(SandboxResource("/recommend"))
63 return app, socketio