mirror of
https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
synced 2025-07-01 18:30:34 +00:00
Streamline setup process and init code
This commit is contained in:
179
config.py
179
config.py
@ -1,47 +1,54 @@
|
||||
from dotenv import load_dotenv
|
||||
from flask import Flask
|
||||
from logging.handlers import RotatingFileHandler
|
||||
from pathlib import Path
|
||||
from werkzeug.middleware.proxy_fix import ProxyFix
|
||||
import logging
|
||||
import os
|
||||
|
||||
|
||||
basedir = os.path.abspath(os.path.dirname(__file__))
|
||||
load_dotenv(os.path.join(basedir, 'nopaque.env'))
|
||||
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
|
||||
ENV_FILE = os.path.join(BASE_DIR, 'nopaque.env')
|
||||
|
||||
|
||||
if os.path.isfile(ENV_FILE):
|
||||
load_dotenv(ENV_FILE)
|
||||
|
||||
|
||||
class Config:
|
||||
''' APIFairy '''
|
||||
''' Configuration class for the Flask application. '''
|
||||
|
||||
# region APIFairy
|
||||
APIFAIRY_TITLE = 'nopaque'
|
||||
APIFAIRY_VERSION = '0.0.1'
|
||||
APIFAIRY_UI = 'swagger_ui'
|
||||
APIFAIRY_APISPEC_PATH = '/api/apispec.json'
|
||||
APIFAIRY_UI_PATH = '/api'
|
||||
APIFAIRY_UI = 'swagger_ui'
|
||||
APIFAIRY_UI_PATH = '/api/docs'
|
||||
# endregion APIFairy
|
||||
|
||||
''' # Flask # '''
|
||||
APPLICATION_ROOT = os.environ.get('APPLICATION_ROOT', '/')
|
||||
|
||||
# region Flask
|
||||
DEBUG = os.environ.get('FLASK_DEBUG', 'false').lower() == 'true'
|
||||
PREFERRED_URL_SCHEME = os.environ.get('PREFERRED_URL_SCHEME', 'http')
|
||||
SECRET_KEY = os.environ.get('SECRET_KEY', 'hard to guess string')
|
||||
SERVER_NAME = os.environ.get('SERVER_NAME', 'localhost:5000')
|
||||
SESSION_COOKIE_SECURE = \
|
||||
os.environ.get('SESSION_COOKIE_SECURE', 'false').lower() == 'true'
|
||||
SESSION_COOKIE_SECURE = os.environ.get('SESSION_COOKIE_SECURE', 'false').lower() == 'true'
|
||||
# endregion Flask
|
||||
|
||||
''' # Flask-APScheduler # '''
|
||||
JOBS = []
|
||||
|
||||
''' # Flask-Assets '''
|
||||
# region Flask-Assets
|
||||
ASSETS_DEBUG = os.environ.get('ASSETS_DEBUG', 'false').lower() == 'true'
|
||||
# endregion Flask-Assets
|
||||
|
||||
''' # Flask-Hashids '''
|
||||
|
||||
# region Flask-Hashids
|
||||
HASHIDS_MIN_LENGTH = int(os.environ.get('HASHIDS_MIN_LENGTH', '16'))
|
||||
HASHIDS_SALT = os.environ.get('HASHIDS_SALT', 'hard to guess string')
|
||||
# endregion Flask-Hashids
|
||||
|
||||
''' # Flask-Login # '''
|
||||
REMEMBER_COOKIE_SECURE = \
|
||||
os.environ.get('REMEMBER_COOKIE_SECURE', 'false').lower() == 'true'
|
||||
|
||||
''' # Flask-Mail # '''
|
||||
# region Flask-Login
|
||||
REMEMBER_COOKIE_SECURE = os.environ.get('REMEMBER_COOKIE_SECURE', 'false').lower() == 'true'
|
||||
# endregion Flask-Login
|
||||
|
||||
|
||||
# region Flask-Mail
|
||||
MAIL_DEFAULT_SENDER = os.environ.get('MAIL_DEFAULT_SENDER')
|
||||
MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
|
||||
MAIL_SERVER = os.environ.get('MAIL_SERVER')
|
||||
@ -49,125 +56,53 @@ class Config:
|
||||
MAIL_USERNAME = os.environ.get('MAIL_USERNAME')
|
||||
MAIL_USE_SSL = os.environ.get('MAIL_USE_SSL', 'false').lower() == 'true'
|
||||
MAIL_USE_TLS = os.environ.get('MAIL_USE_TLS', 'false').lower() == 'true'
|
||||
# endregion Flask-Mail
|
||||
|
||||
''' # Flask-SQLAlchemy # '''
|
||||
SQLALCHEMY_DATABASE_URI = \
|
||||
os.environ.get('SQLALCHEMY_DATABASE_URI') \
|
||||
or f'sqlite:///{os.path.join(basedir, "data.sqlite")}'
|
||||
|
||||
# region Flask-SQLAlchemy
|
||||
SQLALCHEMY_DATABASE_URI = os.environ.get(
|
||||
'SQLALCHEMY_DATABASE_URI',
|
||||
f'sqlite:///{BASE_DIR}/data.sqlite'
|
||||
)
|
||||
SQLALCHEMY_RECORD_QUERIES = True
|
||||
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
||||
# endregion Flask-SQLAlchemy
|
||||
|
||||
''' # nopaque # '''
|
||||
|
||||
# region nopaque
|
||||
NOPAQUE_ADMIN = os.environ.get('NOPAQUE_ADMIN')
|
||||
NOPAQUE_DATA_DIR = Path(os.environ.get('NOPAQUE_DATA_PATH', '/mnt/nopaque'))
|
||||
NOPAQUE_IS_PRIMARY_INSTANCE = \
|
||||
os.environ.get('NOPAQUE_IS_PRIMARY_INSTANCE', 'true').lower() == 'true'
|
||||
NOPAQUE_IS_PRIMARY_INSTANCE = os.environ.get('NOPAQUE_IS_PRIMARY_INSTANCE', 'true').lower() == 'true'
|
||||
NOPAQUE_MAIL_SUBJECT_PREFIX = '[nopaque]'
|
||||
NOPAQUE_SERVICE_DESK = 'gitlab-ub-incoming+sfb1288inf-nopaque-1324-issue-@jura.uni-bielefeld.de' # noqa
|
||||
NOPAQUE_SOCKETIO_MESSAGE_QUEUE_URI = \
|
||||
os.environ.get('NOPAQUE_SOCKETIO_MESSAGE_QUEUE_URI')
|
||||
|
||||
NOPAQUE_JOB_EXPIRATION_ENABLED = os.environ.get('NOPAQUE_JOB_EXPIRATION_ENABLED', 'true').lower() == 'true'
|
||||
NOPAQUE_JOB_EXPIRATION_TIME = int(os.environ.get('NOPAQUE_JOB_EXPIRATION_TIME', '120'))
|
||||
NOPAQUE_SOCKETIO_MESSAGE_QUEUE_URI = os.environ.get('NOPAQUE_SOCKETIO_MESSAGE_QUEUE_URI')
|
||||
|
||||
NOPAQUE_DOCKER_REGISTRY = 'gitlab.ub.uni-bielefeld.de:4567'
|
||||
NOPAQUE_DOCKER_IMAGE_PREFIX = f'{NOPAQUE_DOCKER_REGISTRY}/sfb1288inf/'
|
||||
NOPAQUE_DOCKER_NETWORK_NAME = \
|
||||
os.environ.get('DOCKER_NETWORK_NAME', 'nopaque')
|
||||
NOPAQUE_DOCKER_REGISTRY_USERNAME = \
|
||||
os.environ.get('NOPAQUE_DOCKER_REGISTRY_USERNAME')
|
||||
NOPAQUE_DOCKER_REGISTRY_PASSWORD = \
|
||||
os.environ.get('NOPAQUE_DOCKER_REGISTRY_PASSWORD')
|
||||
NOPAQUE_DOCKER_NETWORK_NAME = os.environ.get('DOCKER_NETWORK_NAME', 'nopaque')
|
||||
NOPAQUE_DOCKER_REGISTRY_USERNAME = os.environ.get('NOPAQUE_DOCKER_REGISTRY_USERNAME')
|
||||
NOPAQUE_DOCKER_REGISTRY_PASSWORD = os.environ.get('NOPAQUE_DOCKER_REGISTRY_PASSWORD')
|
||||
|
||||
NOPAQUE_LOG_DATE_FORMAT = \
|
||||
os.environ.get('NOPAQUE_LOG_DATE_FORMAT', '%Y-%m-%d %H:%M:%S')
|
||||
NOPAQUE_LOG_DATE_FORMAT = os.environ.get(
|
||||
'NOPAQUE_LOG_DATE_FORMAT',
|
||||
'%Y-%m-%d %H:%M:%S'
|
||||
)
|
||||
NOPAQUE_LOG_FORMAT = os.environ.get(
|
||||
'NOPAQUE_LOG_DATE_FORMAT',
|
||||
'[%(asctime)s] %(levelname)s in '
|
||||
'%(pathname)s (function: %(funcName)s, line: %(lineno)d): %(message)s'
|
||||
'[%(asctime)s] %(levelname)s in %(pathname)s (function: %(funcName)s, line: %(lineno)d): %(message)s'
|
||||
)
|
||||
NOPAQUE_LOG_FILE_ENABLED = \
|
||||
os.environ.get('NOPAQUE_LOG_FILE_ENABLED', 'false').lower() == 'true'
|
||||
NOPAQUE_LOG_FILE_DIR = Path(os.environ.get('NOPAQUE_LOG_FILE_DIR', '/var/log/nopaque'))
|
||||
NOPAQUE_LOG_FILE_LEVEL = \
|
||||
os.environ.get('NOPAQUE_LOG_FILE_LEVEL', None)
|
||||
NOPAQUE_LOG_STDERR_ENABLED = \
|
||||
os.environ.get('NOPAQUE_LOG_STDERR_ENABLED', 'true').lower() == 'true'
|
||||
NOPAQUE_LOG_STDERR_LEVEL = \
|
||||
os.environ.get('NOPAQUE_LOG_STDERR_LEVEL', None)
|
||||
NOPAQUE_LOG_LEVEL = os.environ.get('NOPAQUE_LOG_LEVEL', 'WARNING')
|
||||
|
||||
NOPAQUE_PROXY_FIX_ENABLED = \
|
||||
os.environ.get('NOPAQUE_PROXY_FIX_ENABLED', 'false').lower() == 'true'
|
||||
NOPAQUE_PROXY_FIX_X_FOR = \
|
||||
int(os.environ.get('NOPAQUE_PROXY_FIX_X_FOR', '0'))
|
||||
NOPAQUE_PROXY_FIX_X_HOST = \
|
||||
int(os.environ.get('NOPAQUE_PROXY_FIX_X_HOST', '0'))
|
||||
NOPAQUE_PROXY_FIX_X_PORT = \
|
||||
int(os.environ.get('NOPAQUE_PROXY_FIX_X_PORT', '0'))
|
||||
NOPAQUE_PROXY_FIX_X_PREFIX = \
|
||||
int(os.environ.get('NOPAQUE_PROXY_FIX_X_PREFIX', '0'))
|
||||
NOPAQUE_PROXY_FIX_X_PROTO = \
|
||||
int(os.environ.get('NOPAQUE_PROXY_FIX_X_PROTO', '0'))
|
||||
NOPAQUE_PROXY_FIX_ENABLED = os.environ.get('NOPAQUE_PROXY_FIX_ENABLED', 'false').lower() == 'true'
|
||||
NOPAQUE_PROXY_FIX_X_FOR = int(os.environ.get('NOPAQUE_PROXY_FIX_X_FOR', '0'))
|
||||
NOPAQUE_PROXY_FIX_X_HOST = int(os.environ.get('NOPAQUE_PROXY_FIX_X_HOST', '0'))
|
||||
NOPAQUE_PROXY_FIX_X_PORT = int(os.environ.get('NOPAQUE_PROXY_FIX_X_PORT', '0'))
|
||||
NOPAQUE_PROXY_FIX_X_PREFIX = int(os.environ.get('NOPAQUE_PROXY_FIX_X_PREFIX', '0'))
|
||||
NOPAQUE_PROXY_FIX_X_PROTO = int(os.environ.get('NOPAQUE_PROXY_FIX_X_PROTO', '0'))
|
||||
|
||||
NOPAQUE_TRANSKRIBUS_ENABLED = \
|
||||
os.environ.get('NOPAQUE_TRANSKRIBUS_ENABLED', 'false').lower() == 'true'
|
||||
NOPAQUE_TRANSKRIBUS_ENABLED = os.environ.get('NOPAQUE_TRANSKRIBUS_ENABLED', 'false').lower() == 'true'
|
||||
NOPAQUE_READCOOP_USERNAME = os.environ.get('NOPAQUE_READCOOP_USERNAME')
|
||||
NOPAQUE_READCOOP_PASSWORD = os.environ.get('NOPAQUE_READCOOP_PASSWORD')
|
||||
|
||||
NOPAQUE_VERSION='1.0.2'
|
||||
|
||||
@staticmethod
|
||||
def init_app(app: Flask):
|
||||
for handler in app.logger.handlers:
|
||||
app.logger.removeHandler(handler)
|
||||
|
||||
log_formatter = logging.Formatter(
|
||||
fmt=app.config['NOPAQUE_LOG_FORMAT'],
|
||||
datefmt=app.config['NOPAQUE_LOG_DATE_FORMAT']
|
||||
)
|
||||
|
||||
if app.config['NOPAQUE_LOG_STDERR_ENABLED']:
|
||||
log_stderr_level: str | None = app.config['NOPAQUE_LOG_STDERR_LEVEL']
|
||||
stream_handler = logging.StreamHandler()
|
||||
stream_handler.setFormatter(log_formatter)
|
||||
if log_stderr_level is not None:
|
||||
stream_handler.setLevel(log_stderr_level)
|
||||
app.logger.addHandler(stream_handler)
|
||||
|
||||
if app.config['NOPAQUE_LOG_FILE_ENABLED']:
|
||||
log_file_dir: Path = app.config['NOPAQUE_LOG_FILE_DIR']
|
||||
log_file_level: str | None = app.config['NOPAQUE_LOG_FILE_LEVEL']
|
||||
if not log_file_dir.exists():
|
||||
log_file_dir.mkdir()
|
||||
rotating_file_handler = RotatingFileHandler(
|
||||
log_file_dir / 'nopaque.log',
|
||||
maxBytes=10_240,
|
||||
backupCount=10
|
||||
)
|
||||
rotating_file_handler.setFormatter(log_formatter)
|
||||
if log_file_level is not None:
|
||||
rotating_file_handler.setLevel(log_file_level)
|
||||
app.logger.addHandler(rotating_file_handler)
|
||||
|
||||
if app.config['NOPAQUE_PROXY_FIX_ENABLED']:
|
||||
# Set up and apply the ProxyFix middleware according to the
|
||||
# corresponding (NOPAQUE_PROXY_FIX_*) configurations
|
||||
app.wsgi_app = ProxyFix(
|
||||
app.wsgi_app,
|
||||
x_for=app.config['NOPAQUE_PROXY_FIX_X_FOR'],
|
||||
x_host=app.config['NOPAQUE_PROXY_FIX_X_HOST'],
|
||||
x_port=app.config['NOPAQUE_PROXY_FIX_X_PORT'],
|
||||
x_prefix=app.config['NOPAQUE_PROXY_FIX_X_PREFIX'],
|
||||
x_proto=app.config['NOPAQUE_PROXY_FIX_X_PROTO']
|
||||
)
|
||||
|
||||
if app.config['NOPAQUE_IS_PRIMARY_INSTANCE']:
|
||||
app.config['JOBS'].append(
|
||||
{
|
||||
"id": "daemon",
|
||||
"func": "app.daemon:daemon",
|
||||
"args": (app,),
|
||||
"trigger": "interval",
|
||||
"seconds": 3,
|
||||
}
|
||||
)
|
||||
# endregion nopaque
|
||||
|
Reference in New Issue
Block a user