FitTrackee/fittrackee/config.py

125 lines
3.7 KiB
Python
Raw Permalink Normal View History

2018-01-01 21:54:03 +01:00
import os
2023-02-25 10:41:27 +01:00
from typing import Type, Union
2018-01-14 20:49:35 +01:00
from dramatiq.brokers.redis import RedisBroker
from dramatiq.brokers.stub import StubBroker
2018-01-01 21:54:03 +01:00
from flask import current_app
from sqlalchemy.pool import NullPool
2018-01-01 21:54:03 +01:00
2023-02-25 10:41:27 +01:00
broker: Union[Type['RedisBroker'], Type['StubBroker']] = (
StubBroker
if os.getenv("APP_SETTINGS") == "fittrackee.config.TestingConfig"
else RedisBroker
)
XDIST_WORKER = (
f"_{os.getenv('PYTEST_XDIST_WORKER')}"
if os.getenv('PYTEST_XDIST_WORKER')
else ''
)
2018-01-01 21:54:03 +01:00
2017-12-16 21:00:46 +01:00
class BaseConfig:
DEBUG = False
TESTING = False
SQLALCHEMY_TRACK_MODIFICATIONS = False
BCRYPT_LOG_ROUNDS = 13
TOKEN_EXPIRATION_DAYS = 30
TOKEN_EXPIRATION_SECONDS = 0
PASSWORD_TOKEN_EXPIRATION_SECONDS = 3600
UPLOAD_FOLDER = os.path.join(
os.getenv('UPLOAD_FOLDER', current_app.root_path), 'uploads'
)
2018-01-01 21:54:03 +01:00
PICTURE_ALLOWED_EXTENSIONS = {'jpg', 'png', 'gif'}
WORKOUT_ALLOWED_EXTENSIONS = {'gpx', 'zip'}
2021-01-20 16:47:00 +01:00
TEMPLATES_FOLDER = os.path.join(current_app.root_path, 'emails/templates')
UI_URL = os.environ.get('UI_URL')
EMAIL_URL = os.environ.get('EMAIL_URL')
SENDER_EMAIL = os.environ.get('SENDER_EMAIL')
CAN_SEND_EMAILS = False
DRAMATIQ_BROKER = broker
TILE_SERVER = {
'URL': os.environ.get(
'TILE_SERVER_URL',
'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
),
'ATTRIBUTION': os.environ.get(
'MAP_ATTRIBUTION',
'&copy; <a href="http://www.openstreetmap.org/copyright" '
'target="_blank" rel="noopener noreferrer">OpenStreetMap</a>'
' contributors',
),
'DEFAULT_STATICMAP': (
os.environ.get('DEFAULT_STATICMAP', 'false').lower() == 'true'
),
'STATICMAP_SUBDOMAINS': os.environ.get('STATICMAP_SUBDOMAINS', ''),
}
2022-07-02 19:25:07 +02:00
TRANSLATIONS_FOLDER = os.path.join(
current_app.root_path, 'emails/translations'
)
LANGUAGES = [
'en',
'fr',
'de',
'it',
'nb',
2022-11-30 10:31:53 +01:00
'nl',
'es',
'gl',
2023-06-24 19:14:02 +02:00
'pl',
]
OAUTH2_TOKEN_EXPIRES_IN = {
'authorization_code': 864000, # 10 days
2023-07-14 19:23:29 +02:00
'refresh_token': 864000, # 10 days
}
OAUTH2_REFRESH_TOKEN_GENERATOR = True
DATA_EXPORT_EXPIRATION = 24 # hours
2017-12-16 21:00:46 +01:00
class DevelopmentConfig(BaseConfig):
DEBUG = True
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL')
2022-05-28 20:01:14 +02:00
SECRET_KEY = 'development key' # nosec
2017-12-16 21:00:46 +01:00
BCRYPT_LOG_ROUNDS = 4
DRAMATIQ_BROKER_URL = os.getenv('REDIS_URL', 'redis://')
2017-12-16 21:00:46 +01:00
class TestingConfig(BaseConfig):
DEBUG = True
2018-04-09 22:09:58 +02:00
TESTING = True
SQLALCHEMY_DATABASE_URI = (
os.environ.get('DATABASE_TEST_URL', '') + XDIST_WORKER
)
UPLOAD_FOLDER = os.path.join(
os.getenv('UPLOAD_FOLDER', current_app.root_path),
'uploads' + XDIST_WORKER,
)
2022-05-28 20:01:14 +02:00
SECRET_KEY = 'test key' # nosec
2017-12-16 21:00:46 +01:00
BCRYPT_LOG_ROUNDS = 4
TOKEN_EXPIRATION_DAYS = 0
2023-10-04 10:39:31 +02:00
TOKEN_EXPIRATION_SECONDS = 60
PASSWORD_TOKEN_EXPIRATION_SECONDS = 60
2021-07-14 14:28:02 +02:00
UI_URL = 'http://0.0.0.0:5000'
SENDER_EMAIL = 'fittrackee@example.com'
OAUTH2_TOKEN_EXPIRES_IN = {
'authorization_code': 60,
2023-07-14 19:23:29 +02:00
'refresh_token': 60,
}
class End2EndTestingConfig(TestingConfig):
DRAMATIQ_BROKER_URL = os.getenv('REDIS_URL', 'redis://')
class ProductionConfig(BaseConfig):
DEBUG = False
# https://docs.sqlalchemy.org/en/13/core/pooling.html#using-connection-pools-with-multiprocessing-or-os-fork # noqa
SQLALCHEMY_ENGINE_OPTIONS = (
{'poolclass': NullPool}
if os.getenv('DATABASE_DISABLE_POOLING', 'False') == 'True'
else {}
)
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL')
SECRET_KEY = os.getenv('APP_SECRET_KEY')
DRAMATIQ_BROKER_URL = os.getenv('REDIS_URL', 'redis://')