Source code for schedula.utils.form.config
# coding=utf-8
# -*- coding: UTF-8 -*-
#
# Copyright 2015-2025, Vincenzo Arcidiacono;
# Licensed under the EUPL (the 'Licence');
# You may not use this work except in compliance with the Licence.
# You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl
"""
It provides the default Flask App config file.
"""
import os
import secrets
try:
import flask_security
except ImportError:
flask_security = None
[docs]
class Config:
[docs]
def __init__(self):
self.DEBUG = False
self.WTF_CSRF_CHECK_DEFAULT = os.environ.get(
"WTF_CSRF_CHECK_DEFAULT", 'false'
).lower() == 'true'
self.SCHEDULA_CSRF_ENABLED = os.environ.get(
"SCHEDULA_CSRF_ENABLED", 'true'
).lower() == 'true'
self.SCHEDULA_GDPR_ENABLED = os.environ.get(
"SCHEDULA_GDPR_ENABLED", 'true'
).lower() == 'true'
self.SECURITY_ENABLED = os.environ.get(
"SECURITY_ENABLED", 'true'
).lower() == 'true'
self.ADMIN_ENABLED = os.environ.get(
"ADMIN_ENABLED", self.SECURITY_ENABLED and 'true' or 'false'
).lower() == 'true'
self.CONTACT_ENABLED = os.environ.get(
"CONTACT_ENABLED", 'true'
).lower() == 'true'
self.ITEMS_STORAGE_ENABLED = os.environ.get(
"ITEMS_STORAGE_ENABLED", 'true'
).lower() == 'true'
self.FILES_STORAGE_ENABLED = os.environ.get(
"FILES_STORAGE_ENABLED", 'true'
).lower() == 'true'
self.SCHEDULA_CREDITS_ENABLED = os.environ.get(
"SCHEDULA_CREDITS_ENABLED", 'false'
).lower() == 'true'
self.SCHEDULA_LOCALE_ENABLED = os.environ.get(
"SCHEDULA_LOCALE_ENABLED", 'true'
).lower() == 'true'
self.SCHEDULA_SECRETS_ENABLED = os.environ.get(
"SCHEDULA_SECRETS_ENABLED", 'true'
).lower() == 'true'
self.SCHEDULA_EXPORT_FORM_ENABLED = os.environ.get(
"SCHEDULA_EXPORT_FORM_ENABLED", 'false'
).lower() == 'true'
# reCAPTCHA configuration
self.RECAPTCHA_PUBLIC_KEY = os.environ.get(
'RECAPTCHA_PUBLIC_KEY', '6LcsgJglAAAAAMm7ilxkhBRevaCAuxlpefYZmxHU'
)
self.RECAPTCHA_PRIVATE_KEY = os.environ.get(
'RECAPTCHA_PRIVATE_KEY', '6LcsgJglAAAAAAbR3aHm2qJS_c3XsGqmC9O816eH'
)
# Generate a nice key using secrets.token_urlsafe()
self.SECRET_KEY = os.environ.get("SECRET_KEY", secrets.token_urlsafe())
self.MAIL_DEFAULT_SENDER = os.environ.get('MAIL_DEFAULT_SENDER')
self.MAIL_SERVER = os.environ.get('MAIL_HOST')
self.MAIL_PORT = int(os.environ.get('MAIL_PORT', 465))
self.MAIL_USE_SSL = os.environ.get(
'MAIL_USE_SSL', 'true'
).lower() == 'true'
self.MAIL_USERNAME = os.environ.get('MAIL_USER')
self.MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
self.DB_DIALECT = os.environ.get('DB_DIALECT', 'sqlite')
self.DB_USER = os.environ.get('DB_USER', '')
self.DB_PASSWORD = os.environ.get('DB_PASSWORD', '')
self.DB_HOST = os.environ.get('DB_HOST', '')
self.DB_PORT = os.environ.get('DB_PORT', '')
self.DB_DATABASE = os.environ.get('DB_DATABASE', 'database.db')
self.DB_SERVER = (
self.DB_USER and f'{self.DB_USER}:{self.DB_PASSWORD}@' or ''
)
self.DB_SERVER += (
self.DB_HOST and f'{self.DB_HOST}:{self.DB_PORT}' or ''
)
self.SQLALCHEMY_DATABASE_URI = os.environ.get(
'SQLALCHEMY_DATABASE_URI',
f'{self.DB_DIALECT}://{self.DB_SERVER}/{self.DB_DATABASE}'
)
# As of Flask-SQLAlchemy 2.4.0 it is easy to pass in options directly to the
# underlying engine. This option makes sure that DB connections from the
# pool are still valid. Important for entire application since
# many DBaaS options automatically close idle connections.
self.SQLALCHEMY_ENGINE_OPTIONS = {"pool_pre_ping": True}
self.SQLALCHEMY_TRACK_MODIFICATIONS = os.environ.get(
'SQLALCHEMY_TRACK_MODIFICATIONS', 'false'
).lower() == 'true'