Mr. Terminix
Mr. Terminix

Reputation: 395

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

Upvotes: 0

Views: 68

Answers (1)

Mr. Terminix
Mr. Terminix

Reputation: 395

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

Upvotes: 0

Related Questions