__init__.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import json
  2. import os
  3. import sys
  4. # pylint: disable=wrong-import-position,wrong-import-order
  5. import eventlet.tpool
  6. eventlet.tpool.set_num_threads(2)
  7. from munch import munchify
  8. from pathlib import Path
  9. from flask import Flask
  10. from flask_migrate import Migrate
  11. from flask_sqlalchemy import SQLAlchemy
  12. from sqlalchemy import event
  13. from sqlalchemy import pool
  14. from sqlalchemy.engine import Engine
  15. print('=== Loading settings ===')
  16. with open('settings.json') as file:
  17. settings = munchify(json.load(file))
  18. # create projects folder
  19. if not os.path.exists(settings.projects_folder):
  20. os.mkdir(settings.projects_folder)
  21. DB_FILE = Path.cwd() / settings.database
  22. app = Flask(__name__)
  23. app.config["SQLALCHEMY_DATABASE_URI"] = f"sqlite:///{DB_FILE}"
  24. app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
  25. # pylint: disable=unused-argument
  26. @event.listens_for(Engine, "connect")
  27. def set_sqlite_pragma(dbapi_connection, connection_record):
  28. """ enables foreign keys on every established connection """
  29. cursor = dbapi_connection.cursor()
  30. cursor.execute("PRAGMA foreign_keys=ON")
  31. cursor.close()
  32. db = SQLAlchemy(app, engine_options=dict(
  33. poolclass=pool.SingletonThreadPool,
  34. connect_args=dict(
  35. check_same_thread=False
  36. )
  37. )
  38. )
  39. migrate = Migrate(app, db)