def test_delayed_init(self):
        app = Flask(__name__)
        socketio = SocketIO(allow_upgrades=False, json=flask_json)

        @socketio.on('connect')
        def on_connect():
            send({'connected': 'foo'}, json=True)

        socketio.init_app(app, cookie='foo')
        self.assertFalse(socketio.server.eio.allow_upgrades)
        self.assertEqual(socketio.server.eio.cookie, 'foo')

        client = socketio.test_client(app)
        received = client.get_received()
        self.assertEqual(len(received), 1)
        self.assertEqual(received[0]['args'], {'connected': 'foo'})
Exemple #2
0
def _init_socketio(app, context):
    from flask_socketio import SocketIO
    socketio = SocketIO(app, async_mode='threading')
    sio = socketio.server

    @sio.on('connect', namespace='/exec')
    def connect(sid, environ):
        pass

    @sio.on('query', namespace='/exec')
    def query(sid, data):
        exec_id = data
        sio.enter_room(sid, str(exec_id), namespace='/exec')
        sio.emit('reply', exec_id, namespace='/exec')

    socketio.init_app(app)
Exemple #3
0
    def test_delayed_init(self):
        app = Flask(__name__)
        socketio = SocketIO(allow_upgrades=False, json=flask_json)

        @socketio.on('connect')
        def on_connect():
            send({'connected': 'foo'}, json=True)

        socketio.init_app(app, cookie='foo')
        self.assertFalse(socketio.server.eio.allow_upgrades)
        self.assertEqual(socketio.server.eio.cookie, 'foo')

        client = socketio.test_client(app)
        received = client.get_received()
        self.assertEqual(len(received), 1)
        self.assertEqual(received[0]['args'], {'connected': 'foo'})
Exemple #4
0
class HttpServer:
    # prepare may be rewrite it
    config = {
        'SECRET_KEY': 'someWOrkSD20KMS9330)&#',
        'coco': None,
        'LOGIN_URL': '/login'
    }
    init_kwargs = dict(
        async_mode="eventlet",
        # async_mode="threading",
        # ping_timeout=20,
        # ping_interval=10,
        # engineio_logger=True,
        # logger=True
    )

    def __init__(self):
        config = {k: v for k, v in current_app.config.items()}
        config.update(self.config)
        self.flask_app = Flask(__name__, template_folder='dist')
        self.flask_app.config.update(config)
        self.socket_io = SocketIO()
        self.register_routes()
        self.register_error_handler()

    def register_routes(self):
        self.socket_io.on_namespace(ProxyNamespace('/ssh'))

    @staticmethod
    def on_error_default(e):
        logger.exception(e)

    def register_error_handler(self):
        self.socket_io.on_error_default(self.on_error_default)

    def run(self):
        host = self.flask_app.config["BIND_HOST"]
        port = self.flask_app.config["HTTPD_PORT"]
        print('Starting websocket server at {}:{}'.format(host, port))
        self.socket_io.init_app(self.flask_app, **self.init_kwargs)
        self.socket_io.run(self.flask_app, port=port, host=host, debug=False)

    def shutdown(self):
        self.socket_io.stop()
        pass
def create_app(test_config=None):
    # config an instance of Flask
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_mapping(
        SECRET_KEY='dev',
        # database
        DATABASE=os.path.join(app.instance_path, 'ispeech.sqlite'),
    )

    if test_config is None:
        app.config.from_pyfile('config.py', silent=True)
    else:
        app.config.from_mapping(test_config)

    socketio = SocketIO(app)

    # ensure the instance folder exists
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass
    """
    @app.route('/')
    def index():
        return 'Index Page'
    """
    @app.route('/hello', methods=['GET', 'POST'])
    def hello():
        return "Hello, World!"

    # database
    from . import db
    db.init_app(app)

    # apply the blueprints to the app
    from . import auth, ispeech
    app.register_blueprint(auth.bp)
    app.register_blueprint(ispeech.bp)
    #app.register_blueprint(audio.bp)

    app.add_url_rule('/', endpoint='index')

    socketio.init_app(app)

    return app
Exemple #6
0
def create_app(environment='development'):
    f = Factory(environment)
    f.set_flask()
    f.set_db()
    f.set_migration()
    # f.set_api()

    from .models.base import Example

    app = f.flask
    
    if app.config['TESTING']:  # pragma: no cover
        # Setup app for testing
        @app.before_first_request
        def initialize_app():
            pass

    @app.after_request
    def after_request(response):
        response.headers.add('Access-Control-Allow-Origin', '*')
        response.headers.add('Access-Control-Allow-Headers',
                             'Content-Type,Authorization')
        response.headers.add('Access-Control-Allow-Methods',
                             'GET,PUT,POST,DELETE')

        return response

    app.wsgi_app = ProxyFix(app.wsgi_app)

    @app.cli.command()
    @click.argument('command')
    def setup(command):
        pass
    
    socketio = SocketIO(async_mode=async_mode, cors_allowed_origins='*', logger=True, engineio_logger=True, allow_upgrades=False)
    socketio.init_app(app)

    from .views import sample_page
    from . import auth, events
    
    app.register_blueprint(sample_page, url_prefix='/')
    app.register_blueprint(events.bp, url_prefix='/ws')

    return app, socketio
Exemple #7
0
def create_app(debug=False):

    global __socketio
    __socketio = SocketIO(async_mode="gevent")
    """Create an application."""
    app = Flask(__name__)
    global __app
    __app = app

    app.debug = debug

    from .routes import data_routes
    app.register_blueprint(data_routes)

    __socketio.init_app(app)

    __start_twitterstream_thread()

    return app
Exemple #8
0
def create_app(config_name):
    f_config = config_dict[config_name]
    app = Flask(__name__,
                template_folder=f_config.STATIC_FOLDER,
                static_url_path='',
                static_folder=f_config.STATIC_FOLDER)
    app.config.from_object(f_config)
    CORS(app, resources={r"*": {"origins": "*"}})

    socket = SocketIO(app)
    socket.init_app(app, cors_allowed_origins="*")

    api = Api(app)
    api.add_resource(Main, '/')

    socket.on_event('request_start', communicate_with_guider)
    socket.on_event('request_stop', disconnect_with_guider)

    return app, socket
Exemple #9
0
def create_app(name):
    app = Flask(
        name,
        template_folder=settings["TEMPLATE_FOLDER"],
        static_folder=settings["STATIC_FOLDER"],
        static_url_path=settings["STATIC_URL_PATH"],
    )
    app.config["DEBUG"] = settings["FLASK_DEBUG"]
    app.config["ENV"] = settings["FLASK_ENV"]
    app.config["SECRET_KEY"] = settings["SECRET_KEY"]

    socketio = SocketIO()
    socketio.init_app(app)
    socketio.on_event("chat", handle_message)

    app = add_routes(app)
    socketio = add_socketio_handlers(socketio)

    return app, socketio
Exemple #10
0
def create_app(redis_url):
    socketio = SocketIO(logger=True)

    app = Flask(__name__)
    app.config["SECRET_KEY"] = config.SECRET_KEY

    @app.route("/")
    def index():
        return jsonify({"name": "%s Event stream" % config.APP_NAME})

    @socketio.on("connect", namespace="/events")
    def connected():
        app.logger.info("New websocket client connected")

    @socketio.on_error("/events")
    def on_error(error):
        app.logger.error(error)

    socketio.init_app(app, message_queue=redis_url, async_mode="gevent")
    return (app, socketio)
Exemple #11
0
def create_app(config_name):
    f_config = config_dict[config_name]
    app = Flask(__name__,
                template_folder=f_config.STATIC_FOLDER,
                static_url_path='',
                static_folder=f_config.STATIC_FOLDER)
    CORS(app,
         resources={
             r"/dataset/*": {
                 "origin": "*"
             },
             r"/devices/*": {
                 "origin": "*"
             },
             r"/slack/*": {
                 "origin": "*"
             },
         })
    app.config.from_object(f_config)
    app.config['MONGODB_SETTINGS'] = config_database

    socket = SocketIO(app)
    socket.init_app(app, cors_allowed_origins="*")

    try:
        db.init_app(app)
    except Exception as e:
        print('Failed to connect MongoDB', e)

    api = Api(app)

    api.add_resource(Main, '/', '/<path:path>')
    api.add_resource(Dataset, '/dataset')
    api.add_resource(Devices, '/devices')
    api.add_resource(Slack, '/slack/')

    socket.on_event('get_dashboard_data', get_dashboard_data)
    socket.on_event('get_data_by_command', get_data_by_command)
    socket.on_event('stop_command_run', stop_command_run)
    socket.on_event('health_check', health_check)
    return app, socket
Exemple #12
0
def main(config_name):
    if getattr(sys, 'frozen', False):
        template_folder = os.path.join(sys._MEIPASS, 'templates')
        static_folder = os.path.join(sys._MEIPASS, 'static')
        app = Flask(__name__,
                    template_folder=template_folder,
                    static_folder=static_folder,
                    static_url_path='')
    else:
        app = Flask(__name__)
    app.config.from_object(config[config_name])
    socketio = SocketIO(app)
    socketio.init_app(app)

    @app.route('/')
    def index():
        return render_template('index.html')

    socketio.on_namespace(MainNamespace('/data'))

    return socketio, app
Exemple #13
0
def create_app(config_name):
    f_config = config_dict[config_name]
    app = Flask(__name__,
                template_folder=f_config.STATIC_FOLDER,
                static_url_path='',
                static_folder=f_config.STATIC_FOLDER)
    app.config.from_object(f_config)
    app.config['MONGODB_SETTINGS'] = config_database

    socket = SocketIO(app)
    socket.init_app(app, cors_allowed_origins="*")
    # TODO: exception handling for mongo-engine
    db.init_app(app)

    api = Api(app)

    api.add_resource(Main, '/', '/<path:path>')
    api.add_resource(Slack, '/slack/')

    socket.on_event('request_start', communicate_with_guider)
    socket.on_event('request_stop', disconnect_with_guider)
    return app, socket
Exemple #14
0
def define_webserver(player_q):
    import eventlet

    # Monkey_Patch eventlet to support threads
    eventlet.monkey_patch()

    from flask import Flask, render_template, session, request
    from flask_socketio import SocketIO

    # Create Flask_SocketIO App
    app = Flask(__name__, static_folder='web', static_url_path='')
    app.config['SECRET_KEY'] = 'secret!'
    sio = SocketIO(app, async_mode='eventlet')
    sio.init_app(app, cors_allowed_origins="*")

    @app.route('/')
    def root():
        print('Serving angular frontend...')
        return send_from_directory(app.static_folder, 'index.html')

    #@app.route('/<path:path>')
    #def send_static(path):
    #    return send_from_directory(app.static_folder, path)

    @sio.on('connect')
    def onconnect_event():
        print('Web Player instance connected!')

    @sio.on('disconnect')
    def onconnect_event():
        print('Web Player instance disconnected!')

    # Custom event
    @sio.on('radio')
    def handle_radio(data, methods=['GET', 'POST']):
        #print('Radio received: ' + str(data))
        player_q.put(data)

    return [app, sio]
Exemple #15
0
class HttpServer:
    # prepare may be rewrite it
    settings = {'cookie_secret': '', 'app': None, 'login_url': '/login'}

    def __init__(self, app):
        self.app = app
        # self.settings['cookie_secret'] = self.app.config['SECRET_KEY']
        # self.settings['app'] = self.app

        self.flask = Flask(__name__, template_folder='dist')
        self.flask.config['SECRET_KEY'] = self.app.config['SECRET_KEY']
        self.socketio = SocketIO()

    def run(self):
        host = self.app.config["BIND_HOST"]
        port = self.app.config["HTTPD_PORT"]
        print('Starting websocket server at {}:{}'.format(host, port))
        self.socketio.on_namespace(SSHws('/ssh').app(self.app))
        self.socketio.init_app(self.flask, async_mode="threading")
        self.socketio.run(self.flask, port=port, host=host)

    def shutdown(self):
        pass
Exemple #16
0
application.url_map.strict_slashes = True
configure_app(application)

db = SQLAlchemy(application)
db.init_app(application)

cache = Cache(config={'CACHE_TYPE': 'simple'})
cache.init_app(application)

ma = Marshmallow(application)

socketio = SocketIO(engineio_logger=True)

if application.config['ACTIVE_MQ_URL'] is not None:
    socketio.init_app(application,
                      async_mode='eventlet',
                      message_queue=application.config['ACTIVE_MQ_URL'],
                      path='/api/v1/socket.io')
else:
    socketio.init_app(application, path='/api/v1/socket.io')

# Set socket logging to errors only to reduce log spam
logging.getLogger('socketio').setLevel(logging.ERROR)
logging.getLogger('engineio').setLevel(logging.ERROR)

if application.config['CORS_ALLOWED_ORIGINS'] is not None:
    CORS(application,
         supports_credentials=True,
         origins=application.config['CORS_ALLOWED_ORIGINS'])

api = Api(application, prefix='/api/v1', doc='/api/v1/')
Exemple #17
0
# set the absolute path to the static folder
app.static_folder = app.static_url_path

# Setup Session
app.config['SESSION_TYPE'] = 'redis'
app.config['SECRET_KEY'] = 'mysecretrediskey'
app.config['SESSION_REDIS'] = redis.Redis(host='redis',
                                          port=6379,
                                          password='******')
sess = Session()
sess.init_app(app)

# Setup SocketIO
socketio = SocketIO(app)
socketio.init_app(app,
                  async_mode=async_mode,
                  message_queue='redis://:waddup@redis:6379/')


@app.before_first_request
def start_worker():
    def run_job():
        c = consumer
        c.listen_for_commands()

    worker = threading.Thread(target=run_job)
    worker.setDaemon(True)
    worker.start()


def start_reporting(sess_key=None, sid=None):
Exemple #18
0
from config import Config
from flask_restx import Api

app = Flask(__name__)
app.config.from_object(Config)

sess = Session()

db = SQLAlchemy(app)
db.init_app(app)

sess.init_app(app)
from flask_socketio import SocketIO
socketio = SocketIO()
socketio.init_app(app, manage_session=False)

DB_URL = os.environ.get("SQLALCHEMY_DATABASE_URI")
# if database_exists(DB_URL):
#     print('DELETING DATABASE.')
#     drop_database(DB_URL)
if not database_exists(DB_URL):
    print('CREATING DATABASE')
    create_database(DB_URL)

from application.models import User

print("CREATING TABLES")
db.create_all()

from application import routes
Exemple #19
0
REGEXCID = re.compile(REGEXCIDSTRING, flags=re.ASCII)
REGEXMGS = re.compile(REGEXMGSSTRING)
REGEXPID = re.compile(REGEXPIDSTRING)

LOGIN_MANAGER = LoginManager()
LOGIN_MANAGER.login_view = "login"
LOGIN_MANAGER.init_app(APP)

SCHEDULER = APScheduler()
SCHEDULER.init_app(APP)
SCHEDULER.start()

ASYNC_MODE = 'eventlet'
THREAD_LOCK = Lock()
SOCKETIO = SocketIO(async_mode=ASYNC_MODE)
SOCKETIO.init_app(APP)


class Task:
    def __init__(self):
        self.task_id = 0
        self.task_index = 0
        self.task_queue = deque([])
        self.pushlog_finished = False
        self.background_thread = None


class User(UserMixin):
    def __init__(self, user_id, username, password):
        self.id = user_id
        self.username = username
Exemple #20
0
import eventlet
import redis
from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_login import LoginManager
from flask_socketio import SocketIO

# Greenify all standard libs
eventlet.monkey_patch()

# Define extensions
db = SQLAlchemy()
migrate = Migrate()
login_manager = LoginManager()
socketio = SocketIO()

# Create app
app = Flask(__name__)
app.config.from_object(Config)
# config extensions
db.init_app(app)
migrate.init_app(app, db)
login_manager.init_app(app)
socketio.init_app(app, message_queue='redis://127.0.0.1:6379/0', async_mode="eventlet")

login_manager.login_view = 'app.login'

from app import routes, models
    """ Handle generic SocketIOEventError. """

    if isinstance(error, SocketIOEventError):
        LOGGER.warning(f"Error encountered during {request.event}: {error!r}")
        emit(error.event, error.response)
    else:
        error_id = uuid4()
        LOGGER.exception(
            f"An unexpected {error!r} has ocurred during {request.event}. Error id: {error_id}!"
        )
        emit("error", {"reason": "An unexpected error ocurred", "id": str(error_id)})
        disconnect()
        raise error


LOGGER = logging.getLogger("socketio")
log_config = CONFIG.get("logging.socketio")
handler = RotatingFileHandler(**log_config["handler"])
handler.setFormatter(FORMATTER)
LOGGER.setLevel(log_config["level"])
LOGGER.addHandler(handler)
socketio.init_app(app, json=flask.json, logger=LOGGER)


# Set up events
from .login import *
from .player_input import *
from .data_requests import *

from .game_loop import main_loop
Exemple #22
0
                             'http://localhost:8000/players/api/games/')
    generator = getattr(map_generator, settings['GENERATOR'])(settings)
    player_manager = AvatarManager()
    game_state = generator.get_game_state(player_manager)
    turn_manager = ConcurrentTurnManager(game_state=game_state,
                                         end_turn_callback=send_world_update,
                                         completion_url=api_url + 'complete/')
    WorkerManagerClass = WORKER_MANAGERS[os.environ.get(
        'WORKER_MANAGER', 'local')]
    worker_manager = WorkerManagerClass(game_state=game_state,
                                        users_url=api_url,
                                        port=port)
    worker_manager.start()
    turn_manager.start()


if __name__ == '__main__':
    logging.basicConfig(level=logging.INFO)

    socketio.init_app(app,
                      resource=os.environ.get('SOCKETIO_RESOURCE',
                                              'socket.io'))
    run_game(int(sys.argv[2]))
    socketio.run(
        app,
        debug=False,
        host=sys.argv[1],
        port=int(sys.argv[2]),
        use_reloader=False,
    )
Exemple #23
0
from coco.config import config
from coco.httpd.ws import ProxyNamespace, ElfinderNamespace

logger = get_logger(__file__)

app = Flask(__name__, template_folder='templates', static_folder='static')
app.config.update(config)
socket_io = SocketIO()
socket_io.on_namespace(ProxyNamespace('/ssh'))
socket_io.on_namespace(ElfinderNamespace('/elfinder'))

if os.environ.get('USE_EVENTLET', '1') == '1':
    init_kwargs = {'async_mode': 'eventlet'}
else:
    init_kwargs = {'async_mode': 'threading'}
socket_io.init_app(app, **init_kwargs),
socket_io.on_error_default(lambda x: logger.exception(x))


class HttpServer:
    @staticmethod
    def run():
        host = config["BIND_HOST"]
        port = config["HTTPD_PORT"]
        print('Starting websocket server at {}:{}'.format(host, port))
        socket_io.run(app, port=port, host=host, debug=False)

    @staticmethod
    def shutdown():
        socket_io.stop()
        pass
Exemple #24
0
t0 = time.time()

template_dir = os.path.join(os.path.dirname(__file__), "templates")
server = Flask(__name__,  static_url_path='', template_folder=template_dir)

server.debug = False
server.config['SESSION_TYPE'] = "redis"
server.config['SESSION_KEY_PREFIX'] = "mxcube:session:"
server.config['SECRET_KEY'] = "nosecretfornow"
server.register_error_handler(Exception, exception_handler)

_session = Session()
_session.init_app(server)

socketio = SocketIO(manage_session=False)
socketio.init_app(server)

# the following test prevents Flask from initializing twice
# (because of the Reloader)

if not server.debug or os.environ.get("WERKZEUG_RUN_MAIN") == "true":
    mxcube.init(hwr, cmdline_options.hwr_directory,
                cmdline_options.allow_remote,
                cmdline_options.ra_timeout,
                cmdline_options.video_device,
                cmdline_options.log_file)

    from core import loginutils

    # Make the valid_login_only decorator available on server object
    server.restrict = loginutils.valid_login_only
Exemple #25
0
import print_helper

import exe

# Set this variable to "threading", "eventlet" or "gevent" to test the
# different async modes, or leave it set to None for the application to choose
# the best option based on installed packages.
async_mode = "eventlet"
# async_mode = "threading"

app = Flask(__name__)
application = app
# app.config['SECRET_KEY'] = 'secret!'
# socketio = SocketIO(app, async_mode=async_mode)
socketio = SocketIO(app)
socketio.init_app(app, async_mode=async_mode, log_output=True, message_queue='redis://*****:*****@app.route('/')
def index():
    return render_template('index.html', async_mode=socketio.async_mode)

@app.route('/execution/run/<id>')
def run(id):
    print("in execution request")
    # json_data.p()
    socketio.emit('result_event', {"msg":"start..."}, namespace='/execution')
Exemple #26
0
import simplejson
from apscheduler.schedulers.background import BackgroundScheduler
from flask import Flask, json, render_template, request, Response
from flask_cors import CORS
from flask_socketio import emit, join_room, SocketIO
from jsonschema import validate, ValidationError

from src.clues.clue_manager import ClueSetType
from src.game.game import Game, InvalidState

# Initialize the application
app = Flask(__name__)
app.debug = True
app.config["SECRET_KEY"] = "secret!"  # noqa: S105
socketio = SocketIO(app)
socketio.init_app(app, cors_allowed_origins="*")

# Setup logging
if not os.path.isdir("logs"):
    os.makedirs("logs")
logger = logging.getLogger(__name__)
logger.setLevel("DEBUG")
handler = logging.FileHandler("logs/app.log")
shell_handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(
    logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s"))
logger.addHandler(handler)
logger.addHandler(shell_handler)

# Initialize CORS
CORS(app)
Exemple #27
0
def run_game():
    global worker_manager

    print("Running game...")
    my_map = map_generator.generate_map(10, 10, 0.1)
    player_manager = AvatarManager()
    game_state = GameState(my_map, player_manager)
    turn_manager = ConcurrentTurnManager(game_state=game_state, end_turn_callback=send_world_update)
    WorkerManagerClass = WORKER_MANAGERS[os.environ.get('WORKER_MANAGER', 'local')]
    worker_manager = WorkerManagerClass(
        game_state=game_state,
        users_url=os.environ.get('GAME_API_URL', 'http://localhost:8000/players/api/games/')
    )
    worker_manager.start()
    turn_manager.start()


if __name__ == '__main__':
    logging.basicConfig(level=logging.INFO)

    socketio.init_app(app, resource=os.environ.get('SOCKETIO_RESOURCE', 'socket.io'))
    run_game()
    socketio.run(
        app,
        debug=False,
        host=sys.argv[1],
        port=int(sys.argv[2]),
        use_reloader=False,
    )
Exemple #28
0
from flask_login import LoginManager
from flask_socketio import SocketIO
from flask_cors import CORS
from flask_mongoengine import MongoEngine
from delhivery.models import DelhiveryUser
from api.utils import get_notifications_for_dashboard
from app.settings import MONGODB_SETTINGS
import app.main_sockets as main_sockets
app = Flask(__name__)
app.secret_key = 'delhiverySECRET'
app.config['TEMPLATES_AUTO_RELOAD'] = True
app.config['MONGODB_SETTINGS'] = MONGODB_SETTINGS
app.config['WTF_CSRF_SECRET_KEY']="SECRETCSRFKEY"
CORS(app)
socketio = SocketIO(manage_session=False)
socketio.init_app(app,message_queue='redis://')
login_manager = LoginManager(app)
db = MongoEngine(app)
socketio.on_event('connect',main_sockets.connect)
socketio.on_event('create_room',main_sockets.create_room)
socketio.on_event('disconnect',main_sockets.disconnect)
socketio.on_event('send_message',main_sockets.send_message)
socketio.on_event('typing',main_sockets.typing_message)
socketio.on_event('no_longer_typing',main_sockets.no_longer_typing)
def notify_user(person_id):
    notifications = get_notifications_for_dashboard(person_id)
    socketio.emit('received_friend_request',notifications,room=person_id)


def refresh_online_friends(user_id):
    socketio.emit('refresh_online_friends',room = user_id)
Exemple #29
0
def create_app(redis_url):
    socketio = SocketIO(logger=True,
                        cors_allowed_origins=[],
                        cors_credentials=False)

    app = Flask(__name__)
    app.config.from_object(config)

    # Application events (feed)

    @app.route("/", methods=["GET", "POST"])
    def index():
        return jsonify({"name": "%s Event stream" % config.APP_NAME})

    @socketio.on("connect", namespace="/events")
    def connected():
        try:
            verify_jwt_in_request()
            app.logger.info("New websocket client connected")
        except Exception:
            app.logger.info("New websocket client failed to connect")
            disconnect()
            return False

    @socketio.on("disconnect", namespace="/events")
    def disconnected():
        try:
            verify_jwt_in_request()
        except Exception:
            pass
        user_id = get_jwt_identity()
        for room_id in rooms_data:
            _leave_room(room_id, user_id)
        app.logger.info("Websocket client disconnected")

    @socketio.on_error("/events")
    def on_error(error):
        app.logger.error(error)

    # Review rooms (real-time)

    @app.route("/rooms", methods=["GET", "POST"])
    @jwt_required
    def rooms():
        return jsonify({"name": "%s Review rooms" % config.APP_NAME})

    @socketio.on("preview-room:open-playlist", namespace="/events")
    @jwt_required
    def on_open_playlist(data):
        """
        when a person opens the playlist page he immediately enters the
        websocket room. This way he can see in live which people are in the
        review room. The user still has to explicitly enter the review room
        to actually be in sync with the other users
        """
        room_id = data["playlist_id"]
        room = rooms_data.get(room_id, _get_empty_room())
        rooms_data[room_id] = room
        join_room(room_id)
        emit("preview-room:room-people-updated", room, room=room_id)

    def _update_room_playing_status(data, room):
        room["is_playing"] = data.get("is_playing", False)
        room["is_repeating"] = data.get("is_repeating", False)
        room["current_entity_index"] = data["current_entity_index"]
        if "current_frame_number" in data:
            room["current_frame_number"] = data["current_frame_number"]
        if "comparing" in data:
            room["comparing"] = data["comparing"]
        return room

    @socketio.on("preview-room:sync-newcomer", namespace="/events")
    @jwt_required
    def on_sync_newcomer(data):
        """
        once a new person joins the room, all the people in the room are
        alerted (see `on_join` and the emitted
        preview-room:room-people-updated) we then listen for their replies,
        telling the newcomer where they are in the playlist
        """
        on_playing_status_updated(data, only_newcomer=True)

    @socketio.on("preview-room:join", namespace="/events")
    @jwt_required
    def on_join(data):
        """
        When a person joins the review room, we notify all its members that a
        new person is added to the room.
        All the members will then send back the current status of the playlist,
        so that the newcomer will be in sync
        """
        user_id = get_jwt_identity()
        room_id = data["playlist_id"]
        room = rooms_data.get(room_id, _get_empty_room())
        room["people"] = list(set(room["people"] + [user_id]))
        rooms_data[room_id] = room
        emit("preview-room:room-people-updated", room, room=room_id)

    @socketio.on("preview-room:leave", namespace="/events")
    @jwt_required
    def on_leave(data):
        user_id = get_jwt_identity()
        room_id = data["playlist_id"]
        _leave_room(room_id, user_id)

    @socketio.on("preview-room:update-playing-status", namespace="/events")
    @jwt_required
    def on_playing_status_updated(data, only_newcomer=False):
        room_id = data["playlist_id"]
        room = rooms_data.get(room_id, _get_empty_room())
        rooms_data[room_id] = _update_room_playing_status(data, room)
        event_data = {"only_newcomer": only_newcomer, **rooms_data[room_id]}
        emit("preview-room:room-updated", event_data, room=room_id)

    socketio.init_app(app, message_queue=redis_url, async_mode="gevent")
    return (app, socketio)
Exemple #30
0
    os.path.abspath("/home/shashi/Desktop/Anveshan_FYP/SE/Anveshan_Crawler"))
sys.path.append(
    os.path.abspath("/home/shashi/Desktop/Anveshan_FYP/SE/Anveshan"))

from constants import MONGODB_LINK
app = Flask(__name__)
app.secret_key = "secret"
app.config["MONGOALCHEMY_DATABASE"] = "AnveshanUser"
app.config.update({
    'SESSION_COOKIE_SECURE': True,
    'REMEMBER_COOKIE_SECURE': True
})
#cors

cors = CORS(app, origin="*")

login_manager = LoginManager(app)
anveshan_user_db = MongoAlchemy(app)

#socketio
#socketio = SocketIO(app, cors_allowed_origins="*",)
socketio = SocketIO()
app.config['SESSION_TYPE'] = 'filesystem'
socketio.init_app(app, cors_allowed_origins="*", message_queue="redis://")

from routes import routes, socket_routes

if __name__ == "__main__":
    socketio.run(app, host="0.0.0.0", port=5001)
    #app.run()
Exemple #31
0
def setup_app(
    config: str = 'mongo.config.Config',
    env: Optional[str] = None,
):
    '''
    setup flask app from config and pre-configured env
    '''
    # Reserve a "empty" school
    try:
        engine.School(abbr='', name='無').save()
    except NotUniqueError:
        pass
    # Create a flask app
    app = Flask(__name__)

    # Register error handler
    @app.errorhandler(SandboxNotFound)
    def on_sandbox_not_found(_):
        return HTTPError('There are no sandbox available', 503)

    app.url_map.strict_slashes = False
    app.json_encoder = PyShareJSONEncoder
    # Override flask's config by core config
    # Note: Although the config is overridden, `ENV` and `DEBUG` should
    #   still set by env var (according to official document)
    # Ref: https://flask.palletsprojects.com/en/2.0.x/config/#environment-and-debug-features
    for k in ('TESTING', 'ENV', 'DEBUG'):
        app.config[k] = config_lib.config[k]
    # Register flask blueprint
    api2name = [
        (auth_api, '/auth'),
        (problem_api, '/problem'),
        (test_api, '/test'),
        (user_api, '/user'),
        (comment_api, '/comment'),
        (submission_api, '/submission'),
        (tag_api, '/tag'),
        (course_api, '/course'),
        (attachment_api, '/attachment'),
        (notif_api, '/notif'),
        (sandbox_api, '/sandbox'),
        (school_api, '/school'),
        (task_api, '/task'),
        (requirement_api, '/requirement'),
    ]
    for api, name in api2name:
        app.register_blueprint(api, url_prefix=name)
    if config_lib.config.get('DEBUG') == True:
        logger().warning(
            'Load dummy resource API, don\'t'
            ' use this under production mode', )
        from model.dummy import dummy_api
        app.register_blueprint(dummy_api, url_prefix='/dummy')
    # Setup SocketIO server
    socketio = SocketIO(cors_allowed_origins='*')
    socketio.on_namespace(Notifier(Notifier.namespace))
    socketio.init_app(app)
    try:
        init = engine.AppConfig.objects(key='init').get()
    except DoesNotExist:
        init = engine.AppConfig(
            id='init',
            value=True,
        ).save()
    # Setup environment for testing
    if init.value == True:
        logger().info('First run. Start setup process')
        if env is not None:
            setup_env(env)
        sandbox.init()
        init.update(value=False)
    return app
Exemple #32
0
from flask_login import LoginManager
from flask_socketio import SocketIO
from flask_cors import CORS
from flask_mongoengine import MongoEngine
from fakebook.models import FakeBookUser
from api.utils import get_notifications_for_dashboard
from settings import MONGODB_SETTINGS
import main_sockets
app = Flask(__name__)
app.secret_key = 'FAKEBOOKSECRET'
app.config['TEMPLATES_AUTO_RELOAD'] = True
app.config['MONGODB_SETTINGS'] = MONGODB_SETTINGS
app.config['WTF_CSRF_SECRET_KEY']="SECRETCSRFKEY"
CORS(app)
socketio = SocketIO(manage_session=False)
socketio.init_app(app,message_queue='redis://')
login_manager = LoginManager(app)
db = MongoEngine(app)
socketio.on_event('connect',main_sockets.connect)
socketio.on_event('create_room',main_sockets.create_room)
socketio.on_event('disconnect',main_sockets.disconnect)
socketio.on_event('send_message',main_sockets.send_message)
socketio.on_event('typing',main_sockets.typing_message)
socketio.on_event('no_longer_typing',main_sockets.no_longer_typing)
def notify_user(person_id):
    notifications = get_notifications_for_dashboard(person_id)
    socketio.emit('received_friend_request',notifications,room=person_id)

def update_friends_list_for_receiver(user_id):
    socketio.emit('update_people_list',room=user_id)
Exemple #33
0
app = Flask(__name__)
login_manager = LoginManager()
db = SQLAlchemy()
socketio = SocketIO()
oauth = OAuth(app)
redis = Redis()
moment = Moment()

with app.app_context():

    config_name = os.getenv('FLASK_CONFIG') or 'development'
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)

    db.app = app
    db.init_app(app)

    login_manager.init_app(app)
    login_manager.session_protection = 'strong'
    login_manager.login_view = 'login'
    login_manager.login_message = u'请先登陆系统,若遗忘密码,请联系管理员'
    login_manager.login_message_category = 'warning'

    socketio.init_app(app, async_mode=async_mode)
    redis.init_app(app)
    moment.init_app(app)

from .views import *  # noqa
from .models import *  # noqa
Exemple #34
0
    t.daemon = True
    t.start()
    print("Updated gallery", file=sys.stderr)
    filenames, _ = get_rnd_db_entries(N=4)
    URL = "http://127.0.0.1:5000/images/"
    filenames = {i: URL + s for i, s in enumerate(filenames)}
    socket.emit("update", {"img_tl": filenames[0],
                           "img_bl": filenames[1],
                           "img_tr": filenames[2],
                           "img_br": filenames[3],
                           })


# Init flask SocketIO
socket = SocketIO()
socket.init_app(app)


# Client mobile page
@app.route("/")
def client():
    """ Client site, for sending pictures and comments """
    return render_template("client.html", error=request.args.get("error"))


# Passive image gallery
@app.route("/gallery")
def gallery():
    """ Gallery site, for displaying sent pictures and comments """
    # Fetch 5 images from database
    filenames, comments = get_rnd_db_entries(N=5)

import flask
from flask import flash, redirect, render_template, request, session, abort, url_for, send_from_directory, jsonify, stream_with_context
from flask_socketio import SocketIO, join_room, leave_room, emit

THREAD = Thread()

########################################################
# FLASK configuration
flask_config['host'] = "my_FLASK_LiveTerminal.com"

app = flask.Flask(__name__)
app.secret_key = 'dljsaklqk24e21cjn!Ew@@dsa5'
SOCKETIO = SocketIO()
SOCKETIO.init_app(app, async_mode='eventlet', async_handlers=True)

########################################################

########################################################
## HELPERS


# queue push function
def enqueue_output(out, queue):
    try:
        for _line in iter(out.readline, b''):
            queue.put(_line)
    except:
        pass
Exemple #36
0
from flask_socketio import SocketIO
from pingpong.utils import assets
from pingpong.utils import logger

app = Flask(__name__)
app.config.from_pyfile("../config.cfg")

logger.setupLogging(app)

assets.setupAssets(app)

login_manager = LoginManager()
login_manager.init_app(app)

socketio = SocketIO()
socketio.init_app(app)

mail = Mail()
mail.init_app(app)

sess = Session()
sess.init_app(app)

app.url_map.strict_slashes = False

from pingpong.controllers.AdminController import adminController
from pingpong.controllers.ApiController import apiController
from pingpong.controllers.AuthenticationController import authenticationController
from pingpong.controllers.ErrorController import errorController
from pingpong.controllers.IsmController import ismController
from pingpong.controllers.CourtesyController import courtesyController
Exemple #37
0
from flask import Flask, render_template, request, redirect, session, flash
from flask_socketio import SocketIO, send, emit, join_room, leave_room
import json
import time

app = Flask(__name__)
socketio = SocketIO()
socketio.init_app(app)


@app.route('/')
def index():
    return render_template("index.html")


@app.route('/data', methods=['POST'])
def data():
    # print(request.data)
    socketio.emit('hb_data', request.data.decode('utf-8'), broadcast=True)
    return 'success'


if __name__ == '__main__':
    socketio.run(app, host='0.0.0.0', port=80)
Exemple #38
0
server = Flask(__name__, static_url_path="", template_folder=template_dir)

cfg = Config(
    os.path.abspath(
        os.path.join(cmdline_options.hwr_directory,
                     "mxcube-server-config.yml")))

server.config.from_object(cfg.FLASK)
server.register_error_handler(Exception, exception_handler)

_session = Session()
_session.init_app(server)

socketio = SocketIO(manage_session=False,
                    cors_allowed_origins=cfg.FLASK.ALLOWED_CORS_ORIGINS)
socketio.init_app(server)

# the following test prevents Flask from initializing twice
# (because of the Reloader)

if not server.debug or os.environ.get("WERKZEUG_RUN_MAIN") == "true":
    logging.getLogger("MX3.HWR").info("Starting MXCuBE3...")
    atexit.register(kill_processes)

    with open("/tmp/mxcube.pid", "w") as f:
        f.write(str(os.getpid()) + " ")

    from core import loginutils

    # Make the valid_login_only decorator available on server object
    server.restrict = loginutils.valid_login_only