1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import json
- import os
- import sys
- # pylint: disable=wrong-import-position,wrong-import-order
- import eventlet.tpool
- eventlet.tpool.set_num_threads(2)
- from munch import munchify
- from pathlib import Path
- from flask import Flask
- from flask_htpasswd import HtPasswdAuth
- from flask_migrate import Migrate
- from flask_sqlalchemy import SQLAlchemy
- from sqlalchemy import event
- from sqlalchemy import pool
- from sqlalchemy.engine import Engine
- from pycs.util.JSONEncoder import JSONEncoder
- settings_file = os.environ.get("PYCS_SETTINGS", "settings.json")
- print(f'=== Loading settings from "{settings_file}" ===')
- with open(settings_file, encoding='utf8') as file:
- settings = munchify(json.load(file))
- # create projects folder
- if not os.path.exists(settings.projects_folder):
- os.mkdir(settings.projects_folder) # pragma: no-cover
- DB_FILE = Path.cwd() / settings.database
- app = Flask(__name__)
- app.config["SQLALCHEMY_DATABASE_URI"] = f"sqlite:///{DB_FILE}"
- app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
- # Protect via http basic authentication
- app.config['FLASK_HTPASSWD_PATH'] = '.htpasswd'
- if not os.path.isfile(app.config['FLASK_HTPASSWD_PATH']):
- raise FileNotFoundError("You need to specify a .htpasswd-file."
- f"The following file could not be located: {app.config['FLASK_HTPASSWD_PATH']}!")
- app.config['FLASK_SECRET'] = 'Hey Hey Kids, secure me!'
- htpasswd = HtPasswdAuth(app)
- # set json encoder so database objects are serialized correctly
- app.json_encoder = JSONEncoder
- # pylint: disable=unused-argument
- @event.listens_for(Engine, "connect")
- def set_sqlite_pragma(dbapi_connection, connection_record):
- """ enables foreign keys on every established connection """
- cursor = dbapi_connection.cursor()
- cursor.execute("PRAGMA foreign_keys=ON")
- cursor.close()
- db = SQLAlchemy(app, engine_options=dict(
- poolclass=pool.SingletonThreadPool,
- connect_args=dict(
- check_same_thread=False
- )
- )
- )
- migrate = Migrate(app, db)
|