pythonflask-socketiopython-socketio

Flask-RESTful with Flask-SocketIO


I have problem to implement my Flask-RESTful application with Flask-SocketIO. Any ideas how to configure both? Here is my code:

from decouple import config
from flask import Flask
from flask_cors import CORS
from flask_migrate import Migrate
from flask_restful import Api

from db import db
from resources.routes import routes


class DevApplicationConfiguration:
    DEBUG = True
    TESTING = True
    SQLALCHEMY_DATABASE_URI = (
        f"postgresql://{config('DB_USER')}:{config('DB_PASSWORD')}"
        f"@{config('DB_HOST')}/{config('DB_NAME')}"
    )


def create_app(config="config.DevApplicationConfiguration"):
    app = Flask(__name__)
    app.config.from_object(DevApplicationConfiguration)
    migrate = Migrate(app, db)
    CORS(app)
    api = Api(app)
    [api.add_resource(*r) for r in routes]
    return app


Solution

  • Actually in that day I can see that my brain got stackoverflow.. After revisiting of the code, I was able to implement Flask-RESTful and Flask-SocketIO together. Here is the code:

    main.py

    from config import create_app
    from db import db
    from flask import request
    
    
    app, socketio = create_app()
    app.config["INITIALIZED"] = False 
    
    db.init_app(app)
    
    @socketio.on('user_id')
    def user_id(data):
        print(f"User {data} have been connected")
        print(request.sid)
    
    
    @app.before_request
    def init_request():
        if not app.config["INITIALIZED"]:
            db.create_all()
            app.config['INITIALIZED'] = True
    
    
    if __name__ == "__main__":
        socketio.run(app)
    

    config.py:

    from decouple import config
    from flask import Flask
    from flask_cors import CORS
    from flask_migrate import Migrate
    from flask_restful import Api
    from flask_socketio import SocketIO
    
    from db import db
    from resources.routes import routes
    
    
    class DevApplicationConfiguration:
        DEBUG = True
        TESTING = True
        SQLALCHEMY_DATABASE_URI = (
            f"postgresql://{config('DB_USER')}:{config('DB_PASSWORD')}"
            f"@{config('DB_HOST')}/{config('DB_NAME')}"
        )
        SECRET_KEY = "secret!"
    
    
    def create_app(config="config.DevApplicationConfiguration"):
        app = Flask(__name__)
        app.config.from_object(DevApplicationConfiguration)
        migrate = Migrate(app, db)
        CORS(app)
        api = Api(app)
        [api.add_resource(*r) for r in routes]
        socketioapp = SocketIO(app, cors_allowed_origins='*')
        return app, socketioapp