__init__.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import json
  2. import sys
  3. import os
  4. # pylint: disable=wrong-import-position,wrong-import-order
  5. import eventlet.tpool
  6. eventlet.tpool.set_num_threads(2)
  7. from pathlib import Path
  8. from munch import munchify
  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.engine import Engine
  14. print('- Loading settings')
  15. with open('settings.json') as file:
  16. settings = munchify(json.load(file))
  17. # create projects folder
  18. if not os.path.exists(settings.projects_folder):
  19. os.mkdir(settings.projects_folder)
  20. app = Flask(__name__)
  21. if "unittest" in sys.modules:
  22. # creates an in-memory DB
  23. DB_FILE = ""
  24. else:
  25. DB_FILE = Path.cwd() / settings.database
  26. app.config["SQLALCHEMY_DATABASE_URI"] = f"sqlite:///{DB_FILE}"
  27. app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
  28. # pylint: disable=unused-argument
  29. @event.listens_for(Engine, "connect")
  30. def set_sqlite_pragma(dbapi_connection, connection_record):
  31. """ enables foreign keys on every established connection """
  32. cursor = dbapi_connection.cursor()
  33. cursor.execute("PRAGMA foreign_keys=ON")
  34. cursor.close()
  35. db = SQLAlchemy(app)
  36. migrate = Migrate(app, db)