1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/weblate_ynh.git synced 2024-10-01 13:35:04 +02:00
weblate_ynh/conf/settings.py

914 lines
32 KiB
Python
Raw Normal View History

2020-10-28 17:21:00 +01:00
################################################################################
################################################################################
## FOR YUNOHOST USERS ##
################################################################################
################################################################################
# Please do not modify this file, it will be reset at the next update.
2024-01-17 14:07:41 +01:00
# You can edit the file __INSTALL_DIR__/local_settings.py and add/modify the settings you need.
2020-10-28 17:21:00 +01:00
# The parameters you add in local_settings.py will overwrite these,
# but you can use the options and documentation in this file to find out what can be done.
################################################################################
################################################################################
2023-03-22 17:58:46 +01:00
# Copyright © Michal Čihař <michal@weblate.org>
2019-08-22 22:29:05 +02:00
#
2023-03-22 17:58:46 +01:00
# SPDX-License-Identifier: GPL-3.0-or-later
2019-08-22 22:29:05 +02:00
2024-01-20 11:51:14 +01:00
# Copyright © Michal Čihař <michal@weblate.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
2019-08-22 22:29:05 +02:00
import os
import platform
from logging.handlers import SysLogHandler
2021-08-27 00:07:28 +02:00
# Title of site to use
SITE_TITLE = "Weblate"
# Site domain
SITE_DOMAIN = "__DOMAIN__"
# Whether site uses https
ENABLE_HTTPS = True
2019-08-22 22:29:05 +02:00
#
# Django settings for Weblate project.
#
2023-03-22 18:00:54 +01:00
DEBUG = False
2019-08-22 22:29:05 +02:00
ADMINS = (
2021-06-28 15:32:27 +02:00
('__ADMIN__', '__ADMIN_MAIL__'),
2019-08-22 22:29:05 +02:00
)
MANAGERS = ADMINS
DATABASES = {
2020-10-28 12:02:15 +01:00
"default": {
2020-10-28 19:20:46 +01:00
# Use "postgresql" or "mysql".
2020-10-28 12:02:15 +01:00
"ENGINE": "django.db.backends.postgresql",
2020-10-28 19:20:46 +01:00
# Database name.
2021-06-28 15:32:27 +02:00
"NAME": "__APP__",
2020-10-28 19:20:46 +01:00
# Database user.
2021-06-28 15:32:27 +02:00
"USER": "__APP__",
2020-10-28 19:20:46 +01:00
# Name of role to alter to set parameters in PostgreSQL,
# use in case role name is different than user used for authentication.
# "ALTER_ROLE": "weblate",
# Database password.
2020-10-28 12:02:15 +01:00
"PASSWORD": "__DB_PWD__",
2020-10-28 19:20:46 +01:00
# Set to empty string for localhost.
2020-10-28 12:02:15 +01:00
"HOST": "127.0.0.1",
2020-10-28 19:20:46 +01:00
# Set to empty string for default.
2024-01-19 15:16:14 +01:00
"PORT": "",
2020-10-28 19:20:46 +01:00
# Customizations for databases.
2020-10-28 12:02:15 +01:00
"OPTIONS": {
2019-08-22 22:29:05 +02:00
# In case of using an older MySQL server,
# which has MyISAM as a default storage
2020-10-28 19:20:46 +01:00
# "init_command": "SET storage_engine=INNODB",
2019-08-22 22:29:05 +02:00
# Uncomment for MySQL older than 5.7:
2020-10-28 19:20:46 +01:00
# "init_command": "SET sql_mode='STRICT_TRANS_TABLES'",
2019-08-22 22:29:05 +02:00
# Set emoji capable charset for MySQL:
2020-10-28 19:20:46 +01:00
# "charset": "utf8mb4",
2020-10-28 12:02:15 +01:00
# Change connection timeout in case you get MySQL gone away error:
2020-10-28 19:20:46 +01:00
# "connect_timeout": 28800,
2019-08-22 22:29:05 +02:00
},
2021-11-15 12:25:04 +01:00
# Persistent connections
2024-01-17 21:13:22 +01:00
"CONN_MAX_AGE": None,
"CONN_HEALTH_CHECKS": True,
2021-12-30 13:03:56 +01:00
# Disable server-side cursors, might be needed with pgbouncer
"DISABLE_SERVER_SIDE_CURSORS": False,
2019-08-22 22:29:05 +02:00
}
}
2023-01-09 11:28:38 +01:00
# Data directory, you can use following for the development purposes:
# os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "data")
2024-01-20 11:41:56 +01:00
DATA_DIR = "__INSTALL_DIR__/data"
2023-03-22 17:58:46 +01:00
CACHE_DIR = f"{DATA_DIR}/cache"
2019-08-22 22:29:05 +02:00
# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
2020-10-28 12:02:15 +01:00
TIME_ZONE = "UTC"
2019-08-22 22:29:05 +02:00
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
2020-10-28 12:02:15 +01:00
LANGUAGE_CODE = "en-us"
2019-08-22 22:29:05 +02:00
LANGUAGES = (
2020-10-28 12:02:15 +01:00
("ar", "العربية"),
("az", "Azərbaycan"),
("be", "Беларуская"),
2024-01-17 21:13:22 +01:00
("be-latn", "Biełaruskaja"),
2020-10-28 12:02:15 +01:00
("bg", "Български"),
("br", "Brezhoneg"),
("ca", "Català"),
("cs", "Čeština"),
2024-01-17 21:13:22 +01:00
("cy", "Cymraeg"),
2020-10-28 12:02:15 +01:00
("da", "Dansk"),
("de", "Deutsch"),
("en", "English"),
("el", "Ελληνικά"),
("en-gb", "English (United Kingdom)"),
("es", "Español"),
("fi", "Suomi"),
("fr", "Français"),
("gl", "Galego"),
("he", "עברית"),
("hu", "Magyar"),
("hr", "Hrvatski"),
("id", "Indonesia"),
2020-10-28 19:20:46 +01:00
("is", "Íslenska"),
2020-10-28 12:02:15 +01:00
("it", "Italiano"),
("ja", "日本語"),
2020-10-28 19:20:46 +01:00
("kab", "Taqbaylit"),
2020-10-28 12:02:15 +01:00
("kk", "Қазақ тілі"),
("ko", "한국어"),
("nb", "Norsk bokmål"),
("nl", "Nederlands"),
("pl", "Polski"),
("pt", "Português"),
("pt-br", "Português brasileiro"),
2021-04-30 15:58:52 +02:00
("ro", "Română"),
2020-10-28 12:02:15 +01:00
("ru", "Русский"),
("sk", "Slovenčina"),
("sl", "Slovenščina"),
("sq", "Shqip"),
("sr", "Српски"),
2021-03-08 10:51:06 +01:00
("sr-latn", "Srpski"),
2020-10-28 12:02:15 +01:00
("sv", "Svenska"),
2021-08-27 00:07:28 +02:00
("th", "ไทย"),
2020-10-28 12:02:15 +01:00
("tr", "Türkçe"),
("uk", "Українська"),
2022-04-21 17:30:02 +02:00
("zh-hans", "简体中文"),
("zh-hant", "正體中文"),
2019-08-22 22:29:05 +02:00
)
SITE_ID = 1
# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True
# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True
2021-03-08 10:51:06 +01:00
# Type of automatic primary key, introduced in Django 3.2
DEFAULT_AUTO_FIELD = "django.db.models.AutoField"
2019-08-22 22:29:05 +02:00
# URL prefix to use, please see documentation for more details
2024-01-24 14:20:27 +01:00
# WARNING: this must be without trailing slash (this is why we set __PATH_NO_SLASH__ (cf. loaded settings in install and upgrade))
2024-01-23 19:24:08 +01:00
URL_PREFIX = "__PATH_NO_SLASH__"
2019-08-22 22:29:05 +02:00
# Absolute filesystem path to the directory that will hold user-uploaded files.
2020-10-28 12:02:15 +01:00
MEDIA_ROOT = os.path.join(DATA_DIR, "media")
2019-08-22 22:29:05 +02:00
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
2020-10-28 19:20:46 +01:00
MEDIA_URL = f"{URL_PREFIX}/media/"
2019-08-22 22:29:05 +02:00
# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
2023-03-22 17:58:46 +01:00
STATIC_ROOT = os.path.join(CACHE_DIR, "static")
2019-08-22 22:29:05 +02:00
# URL prefix for static files.
2020-10-28 19:20:46 +01:00
STATIC_URL = f"{URL_PREFIX}/static/"
2019-08-22 22:29:05 +02:00
# Additional locations of static files
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)
# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
2020-10-28 12:02:15 +01:00
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
"compressor.finders.CompressorFinder",
2019-08-22 22:29:05 +02:00
)
# Make this unique, and don't share it with anybody.
2023-01-09 11:28:38 +01:00
# You can generate it using weblate-generate-secret-key
2020-10-28 19:20:46 +01:00
SECRET_KEY = "__KEY__"
2019-08-22 22:29:05 +02:00
TEMPLATES = [
{
2020-10-28 12:02:15 +01:00
"BACKEND": "django.template.backends.django.DjangoTemplates",
"OPTIONS": {
"context_processors": [
"django.contrib.auth.context_processors.auth",
"django.template.context_processors.debug",
"django.template.context_processors.i18n",
"django.template.context_processors.request",
"django.template.context_processors.csrf",
"django.contrib.messages.context_processors.messages",
"weblate.trans.context_processors.weblate_context",
2019-08-22 22:29:05 +02:00
],
},
2021-12-30 13:03:56 +01:00
"APP_DIRS": True,
2020-10-28 12:02:15 +01:00
}
2019-08-22 22:29:05 +02:00
]
2021-04-30 15:58:52 +02:00
# GitHub username and token for sending pull requests.
2019-08-22 22:29:05 +02:00
# Please see the documentation for more details.
2023-01-09 11:28:38 +01:00
GITHUB_CREDENTIALS = {
"api.github.com": {
"username": "__GITHUB_USERNAME__",
"token": "__GITHUB_TOKEN__",
}
}
2024-01-20 11:51:14 +01:00
# Azure DevOps username and token for sending pull requests.
# Please see the documentation for more details.
AZURE_DEVOPS_CREDENTIALS = {}
2019-08-22 22:29:05 +02:00
2024-01-17 21:13:22 +01:00
# Azure DevOps username and token for sending pull requests.
# Please see the documentation for more details.
AZURE_DEVOPS_CREDENTIALS = {}
2021-04-30 15:58:52 +02:00
# GitLab username and token for sending merge requests.
2020-10-28 12:02:15 +01:00
# Please see the documentation for more details.
2023-01-09 11:28:38 +01:00
GITLAB_CREDENTIALS = {
"gitlab.com": {
"username": "__GITLAB_USERNAME__",
"token": "__GITLAB_TOKEN__",
}
}
2020-10-28 12:02:15 +01:00
2023-03-22 17:58:46 +01:00
# Bitbucket username and token for sending merge requests.
# Please see the documentation for more details.
BITBUCKETSERVER_CREDENTIALS = {}
2019-08-22 22:29:05 +02:00
# Authentication configuration
AUTHENTICATION_BACKENDS = (
2020-10-28 12:02:15 +01:00
"social_core.backends.email.EmailAuth",
2020-10-28 19:20:46 +01:00
# "social_core.backends.google.GoogleOAuth2",
# "social_core.backends.github.GithubOAuth2",
2024-01-17 21:13:22 +01:00
# "social_core.backends.github_enterprise.GithubEnterpriseOAuth2",
2022-04-21 17:30:02 +02:00
# "social_core.backends.bitbucket.BitbucketOAuth2",
2020-10-28 19:20:46 +01:00
# "social_core.backends.suse.OpenSUSEOpenId",
# "social_core.backends.ubuntu.UbuntuOpenId",
# "social_core.backends.fedora.FedoraOpenId",
# "social_core.backends.facebook.FacebookOAuth2",
2020-10-28 12:02:15 +01:00
"weblate.accounts.auth.WeblateUserBackend",
2019-08-22 22:29:05 +02:00
)
# Custom user model
2020-10-28 12:02:15 +01:00
AUTH_USER_MODEL = "weblate_auth.User"
2019-08-22 22:29:05 +02:00
# Social auth backends setup
2020-10-28 12:02:15 +01:00
SOCIAL_AUTH_GITHUB_KEY = ""
SOCIAL_AUTH_GITHUB_SECRET = ""
SOCIAL_AUTH_GITHUB_SCOPE = ["user:email"]
2019-08-22 22:29:05 +02:00
2021-12-30 13:03:56 +01:00
SOCIAL_AUTH_GITHUB_ORG_KEY = ""
SOCIAL_AUTH_GITHUB_ORG_SECRET = ""
SOCIAL_AUTH_GITHUB_ORG_NAME = ""
SOCIAL_AUTH_GITHUB_TEAM_KEY = ""
SOCIAL_AUTH_GITHUB_TEAM_SECRET = ""
SOCIAL_AUTH_GITHUB_TEAM_ID = ""
2024-01-17 21:13:22 +01:00
SOCIAL_AUTH_GITHUB_ENTERPRISE_KEY = ""
SOCIAL_AUTH_GITHUB_ENTERPRISE_SECRET = ""
SOCIAL_AUTH_GITHUB_ENTERPRISE_URL = ""
SOCIAL_AUTH_GITHUB_ENTERPRISE_API_URL = ""
SOCIAL_AUTH_GITHUB_ENTERPRISE_SCOPE = ""
2022-04-21 17:30:02 +02:00
SOCIAL_AUTH_BITBUCKET_OAUTH2_KEY = ""
SOCIAL_AUTH_BITBUCKET_OAUTH2_SECRET = ""
SOCIAL_AUTH_BITBUCKET_OAUTH2_VERIFIED_EMAILS_ONLY = True
2019-08-22 22:29:05 +02:00
2020-10-28 12:02:15 +01:00
SOCIAL_AUTH_FACEBOOK_KEY = ""
SOCIAL_AUTH_FACEBOOK_SECRET = ""
SOCIAL_AUTH_FACEBOOK_SCOPE = ["email", "public_profile"]
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {"fields": "id,name,email"}
2019-08-22 22:29:05 +02:00
2020-10-28 12:02:15 +01:00
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = ""
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = ""
2019-08-22 22:29:05 +02:00
# Social auth settings
SOCIAL_AUTH_PIPELINE = (
2020-10-28 12:02:15 +01:00
"social_core.pipeline.social_auth.social_details",
"social_core.pipeline.social_auth.social_uid",
"social_core.pipeline.social_auth.auth_allowed",
"social_core.pipeline.social_auth.social_user",
"weblate.accounts.pipeline.store_params",
"weblate.accounts.pipeline.verify_open",
"social_core.pipeline.user.get_username",
"weblate.accounts.pipeline.require_email",
"social_core.pipeline.mail.mail_validation",
"weblate.accounts.pipeline.revoke_mail_code",
"weblate.accounts.pipeline.ensure_valid",
"weblate.accounts.pipeline.remove_account",
"social_core.pipeline.social_auth.associate_by_email",
"weblate.accounts.pipeline.reauthenticate",
"weblate.accounts.pipeline.verify_username",
"social_core.pipeline.user.create_user",
"social_core.pipeline.social_auth.associate_user",
"social_core.pipeline.social_auth.load_extra_data",
"weblate.accounts.pipeline.cleanup_next",
"weblate.accounts.pipeline.user_full_name",
"weblate.accounts.pipeline.store_email",
"weblate.accounts.pipeline.notify_connect",
2024-01-17 21:13:22 +01:00
"weblate.accounts.pipeline.handle_invite",
2020-10-28 12:02:15 +01:00
"weblate.accounts.pipeline.password_reset",
2019-08-22 22:29:05 +02:00
)
SOCIAL_AUTH_DISCONNECT_PIPELINE = (
2020-10-28 12:02:15 +01:00
"social_core.pipeline.disconnect.allowed_to_disconnect",
"social_core.pipeline.disconnect.get_entries",
"social_core.pipeline.disconnect.revoke_tokens",
"weblate.accounts.pipeline.cycle_session",
"weblate.accounts.pipeline.adjust_primary_mail",
"weblate.accounts.pipeline.notify_disconnect",
"social_core.pipeline.disconnect.disconnect",
"weblate.accounts.pipeline.cleanup_next",
2019-08-22 22:29:05 +02:00
)
# Custom authentication strategy
2020-10-28 12:02:15 +01:00
SOCIAL_AUTH_STRATEGY = "weblate.accounts.strategy.WeblateStrategy"
2019-08-22 22:29:05 +02:00
# Raise exceptions so that we can handle them later
SOCIAL_AUTH_RAISE_EXCEPTIONS = True
2020-10-28 12:02:15 +01:00
SOCIAL_AUTH_EMAIL_VALIDATION_FUNCTION = "weblate.accounts.pipeline.send_validation"
2021-01-05 12:00:34 +01:00
SOCIAL_AUTH_EMAIL_VALIDATION_URL = f"{URL_PREFIX}/accounts/email-sent/"
SOCIAL_AUTH_LOGIN_ERROR_URL = f"{URL_PREFIX}/accounts/login/"
SOCIAL_AUTH_EMAIL_FORM_URL = f"{URL_PREFIX}/accounts/email/"
SOCIAL_AUTH_NEW_ASSOCIATION_REDIRECT_URL = f"{URL_PREFIX}/accounts/profile/#account"
2020-10-28 12:02:15 +01:00
SOCIAL_AUTH_PROTECTED_USER_FIELDS = ("email",)
2019-08-22 22:29:05 +02:00
SOCIAL_AUTH_SLUGIFY_USERNAMES = True
2020-10-28 12:02:15 +01:00
SOCIAL_AUTH_SLUGIFY_FUNCTION = "weblate.accounts.pipeline.slugify_username"
2019-08-22 22:29:05 +02:00
# Password validation configuration
AUTH_PASSWORD_VALIDATORS = [
{
2024-01-17 21:13:22 +01:00
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"
2019-08-22 22:29:05 +02:00
},
{
2020-10-28 12:02:15 +01:00
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
2020-10-28 19:20:46 +01:00
"OPTIONS": {"min_length": 10},
2019-08-22 22:29:05 +02:00
},
2020-10-28 12:02:15 +01:00
{"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"},
{"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"},
{"NAME": "weblate.accounts.password_validation.CharsPasswordValidator"},
{"NAME": "weblate.accounts.password_validation.PastPasswordsValidator"},
2019-08-22 22:29:05 +02:00
# Optional password strength validation by django-zxcvbn-password
# {
2020-10-28 19:20:46 +01:00
# "NAME": "zxcvbn_password.ZXCVBNValidator",
# "OPTIONS": {
# "min_score": 3,
# "user_attributes": ("username", "email", "full_name")
2019-08-22 22:29:05 +02:00
# }
# },
]
2021-04-30 15:58:52 +02:00
# Password hashing (prefer Argon)
PASSWORD_HASHERS = [
"django.contrib.auth.hashers.Argon2PasswordHasher",
"django.contrib.auth.hashers.PBKDF2PasswordHasher",
"django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher",
"django.contrib.auth.hashers.BCryptSHA256PasswordHasher",
]
2019-08-22 22:29:05 +02:00
# Allow new user registrations
REGISTRATION_OPEN = True
2020-10-28 19:20:46 +01:00
# Shortcut for login required setting
REQUIRE_LOGIN = False
2019-08-22 22:29:05 +02:00
# Middleware
MIDDLEWARE = [
2020-10-28 19:20:46 +01:00
"weblate.middleware.RedirectMiddleware",
2020-10-28 12:02:15 +01:00
"weblate.middleware.ProxyMiddleware",
2023-03-22 17:58:46 +01:00
"corsheaders.middleware.CorsMiddleware",
2020-10-28 12:02:15 +01:00
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"weblate.accounts.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
"social_django.middleware.SocialAuthExceptionMiddleware",
"weblate.accounts.middleware.RequireLoginMiddleware",
2020-10-28 19:20:46 +01:00
"weblate.api.middleware.ThrottlingMiddleware",
2020-10-28 12:02:15 +01:00
"weblate.middleware.SecurityMiddleware",
2021-08-27 00:07:28 +02:00
"weblate.wladmin.middleware.ManageMiddleware",
2019-08-22 22:29:05 +02:00
]
2020-10-28 12:02:15 +01:00
ROOT_URLCONF = "weblate.urls"
2019-08-22 22:29:05 +02:00
# Django and Weblate apps
2020-10-28 12:02:15 +01:00
INSTALLED_APPS = [
2020-10-28 19:20:46 +01:00
# Weblate apps on top to override Django locales and templates
2020-10-28 12:02:15 +01:00
"weblate.addons",
"weblate.auth",
"weblate.checks",
"weblate.formats",
2020-10-28 19:20:46 +01:00
"weblate.glossary",
2020-10-28 12:02:15 +01:00
"weblate.machinery",
"weblate.trans",
"weblate.lang",
2020-10-28 19:20:46 +01:00
"weblate_language_data",
2020-10-28 12:02:15 +01:00
"weblate.memory",
"weblate.screenshots",
"weblate.fonts",
"weblate.accounts",
2021-01-05 12:00:34 +01:00
"weblate.configuration",
2020-10-28 12:02:15 +01:00
"weblate.utils",
"weblate.vcs",
"weblate.wladmin",
2021-03-08 10:51:06 +01:00
"weblate.metrics",
2020-10-28 12:02:15 +01:00
"weblate",
2019-08-22 22:29:05 +02:00
# Optional: Git exporter
2020-10-28 12:02:15 +01:00
"weblate.gitexport",
2020-10-28 19:20:46 +01:00
# Standard Django modules
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"django.contrib.admin.apps.SimpleAdminConfig",
"django.contrib.admindocs",
"django.contrib.sitemaps",
"django.contrib.humanize",
# Third party Django modules
"social_django",
"crispy_forms",
2023-03-22 17:58:46 +01:00
"crispy_bootstrap3",
2020-10-28 19:20:46 +01:00
"compressor",
"rest_framework",
"rest_framework.authtoken",
"django_filters",
2023-03-22 17:58:46 +01:00
"django_celery_beat",
"corsheaders",
2020-10-28 12:02:15 +01:00
]
2019-08-22 22:29:05 +02:00
# Custom exception reporter to include some details
2020-10-28 12:02:15 +01:00
DEFAULT_EXCEPTION_REPORTER_FILTER = "weblate.trans.debug.WeblateExceptionReporterFilter"
2019-08-22 22:29:05 +02:00
# Default logging of Weblate messages
# - to syslog in production (if available)
# - otherwise to console
2020-10-28 19:20:46 +01:00
# - you can also choose "logfile" to log into separate file
2019-08-22 22:29:05 +02:00
# after configuring it below
# Detect if we can connect to syslog
HAVE_SYSLOG = False
2020-10-28 12:02:15 +01:00
if platform.system() != "Windows":
2019-08-22 22:29:05 +02:00
try:
2020-10-28 12:02:15 +01:00
handler = SysLogHandler(address="/dev/log", facility=SysLogHandler.LOG_LOCAL2)
2024-01-17 21:13:22 +01:00
# Since Python 3.7 connect failures are silently discarded, so
# the exception is almost never raised here. Instead we look whether the socket
# to syslog is open after init.
HAVE_SYSLOG = handler.socket.fileno() != -1
2019-08-22 22:29:05 +02:00
handler.close()
2021-01-05 12:00:34 +01:00
except OSError:
2019-08-22 22:29:05 +02:00
HAVE_SYSLOG = False
2023-03-22 17:58:46 +01:00
DEFAULT_LOG = "console" if DEBUG or not HAVE_SYSLOG else "syslog"
2020-10-28 19:20:46 +01:00
DEFAULT_LOGLEVEL = "DEBUG" if DEBUG else "INFO"
2019-08-22 22:29:05 +02:00
# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/stable/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
2020-10-28 12:02:15 +01:00
"version": 1,
"disable_existing_loggers": True,
"filters": {"require_debug_false": {"()": "django.utils.log.RequireDebugFalse"}},
"formatters": {
"syslog": {"format": "weblate[%(process)d]: %(levelname)s %(message)s"},
2021-01-05 12:00:34 +01:00
"simple": {"format": "[%(asctime)s: %(levelname)s/%(process)s] %(message)s"},
2020-10-28 12:02:15 +01:00
"logfile": {"format": "%(asctime)s %(levelname)s %(message)s"},
"django.server": {
"()": "django.utils.log.ServerFormatter",
"format": "[%(server_time)s] %(message)s",
2019-08-22 22:29:05 +02:00
},
},
2020-10-28 12:02:15 +01:00
"handlers": {
"mail_admins": {
"level": "ERROR",
"filters": ["require_debug_false"],
"class": "django.utils.log.AdminEmailHandler",
"include_html": True,
2019-08-22 22:29:05 +02:00
},
2020-10-28 12:02:15 +01:00
"console": {
"level": "DEBUG",
"class": "logging.StreamHandler",
"formatter": "simple",
2019-08-22 22:29:05 +02:00
},
2020-10-28 12:02:15 +01:00
"django.server": {
"level": "INFO",
"class": "logging.StreamHandler",
"formatter": "django.server",
2019-08-22 22:29:05 +02:00
},
2020-10-28 12:02:15 +01:00
"syslog": {
"level": "DEBUG",
"class": "logging.handlers.SysLogHandler",
"formatter": "syslog",
"address": "/dev/log",
"facility": SysLogHandler.LOG_LOCAL2,
2019-08-22 22:29:05 +02:00
},
# Logging to a file
2020-10-28 19:20:46 +01:00
# "logfile": {
# "level":"DEBUG",
# "class":"logging.handlers.RotatingFileHandler",
# "filename": "/var/log/weblate/weblate.log",
# "maxBytes": 100000,
# "backupCount": 3,
# "formatter": "logfile",
2019-08-22 22:29:05 +02:00
# },
},
2020-10-28 12:02:15 +01:00
"loggers": {
"django.request": {
"handlers": ["mail_admins", DEFAULT_LOG],
"level": "ERROR",
"propagate": True,
2019-08-22 22:29:05 +02:00
},
2020-10-28 12:02:15 +01:00
"django.server": {
"handlers": ["django.server"],
"level": "INFO",
"propagate": False,
2019-08-22 22:29:05 +02:00
},
# Logging database queries
2020-10-28 19:20:46 +01:00
# "django.db.backends": {
# "handlers": [DEFAULT_LOG],
# "level": "DEBUG",
2019-08-22 22:29:05 +02:00
# },
2024-01-17 21:13:22 +01:00
"redis_lock": {"handlers": [DEFAULT_LOG], "level": DEFAULT_LOGLEVEL},
2020-10-28 19:20:46 +01:00
"weblate": {"handlers": [DEFAULT_LOG], "level": DEFAULT_LOGLEVEL},
2019-08-22 22:29:05 +02:00
# Logging VCS operations
2020-10-28 19:20:46 +01:00
"weblate.vcs": {"handlers": [DEFAULT_LOG], "level": DEFAULT_LOGLEVEL},
2020-10-28 12:02:15 +01:00
# Python Social Auth
2020-10-28 19:20:46 +01:00
"social": {"handlers": [DEFAULT_LOG], "level": DEFAULT_LOGLEVEL},
2020-10-28 12:02:15 +01:00
# Django Authentication Using LDAP
2020-10-28 19:20:46 +01:00
"django_auth_ldap": {"handlers": [DEFAULT_LOG], "level": DEFAULT_LOGLEVEL},
2021-01-05 12:00:34 +01:00
# SAML IdP
"djangosaml2idp": {"handlers": [DEFAULT_LOG], "level": DEFAULT_LOGLEVEL},
2020-10-28 12:02:15 +01:00
},
2019-08-22 22:29:05 +02:00
}
# Remove syslog setup if it's not present
if not HAVE_SYSLOG:
2020-10-28 12:02:15 +01:00
del LOGGING["handlers"]["syslog"]
2019-08-22 22:29:05 +02:00
# Use HTTPS when creating redirect URLs for social authentication, see
# documentation for more details:
# https://python-social-auth-docs.readthedocs.io/en/latest/configuration/settings.html#processing-redirects-and-urlopen
SOCIAL_AUTH_REDIRECT_IS_HTTPS = ENABLE_HTTPS
# Make CSRF cookie HttpOnly, see documentation for more details:
# https://docs.djangoproject.com/en/1.11/ref/settings/#csrf-cookie-httponly
CSRF_COOKIE_HTTPONLY = True
CSRF_COOKIE_SECURE = ENABLE_HTTPS
# Store CSRF token in session
CSRF_USE_SESSIONS = True
# Customize CSRF failure view
2020-10-28 12:02:15 +01:00
CSRF_FAILURE_VIEW = "weblate.trans.views.error.csrf_failure"
2019-08-22 22:29:05 +02:00
SESSION_COOKIE_SECURE = ENABLE_HTTPS
2020-10-28 19:20:46 +01:00
SESSION_COOKIE_HTTPONLY = True
2019-08-22 22:29:05 +02:00
# SSL redirect
SECURE_SSL_REDIRECT = ENABLE_HTTPS
2023-01-09 11:28:38 +01:00
SECURE_SSL_HOST = SITE_DOMAIN
2024-01-17 21:13:22 +01:00
# Sent referrer only for same origin links
2020-10-28 12:02:15 +01:00
SECURE_REFERRER_POLICY = "same-origin"
2019-08-22 22:29:05 +02:00
# SSL redirect URL exemption list
2020-10-28 12:02:15 +01:00
SECURE_REDIRECT_EXEMPT = (r"healthz/$",) # Allowing HTTP access to health check
2019-08-22 22:29:05 +02:00
# Session cookie age (in seconds)
2020-10-28 19:20:46 +01:00
SESSION_COOKIE_AGE = 1000
SESSION_COOKIE_AGE_AUTHENTICATED = 1209600
2021-04-30 15:58:52 +02:00
SESSION_COOKIE_SAMESITE = "Lax"
2020-10-28 12:02:15 +01:00
# Increase allowed upload size
DATA_UPLOAD_MAX_MEMORY_SIZE = 50000000
2023-01-09 11:28:38 +01:00
# Allow more fields for case with a lot of subscriptions in profile
DATA_UPLOAD_MAX_NUMBER_FIELDS = 2000
2019-08-22 22:29:05 +02:00
2020-10-28 19:20:46 +01:00
# Apply session coookie settings to language cookie as ewll
LANGUAGE_COOKIE_SECURE = SESSION_COOKIE_SECURE
LANGUAGE_COOKIE_HTTPONLY = SESSION_COOKIE_HTTPONLY
LANGUAGE_COOKIE_AGE = SESSION_COOKIE_AGE_AUTHENTICATED * 10
2021-04-30 15:58:52 +02:00
LANGUAGE_COOKIE_SAMESITE = SESSION_COOKIE_SAMESITE
2020-10-28 19:20:46 +01:00
2019-08-22 22:29:05 +02:00
# Some security headers
SECURE_BROWSER_XSS_FILTER = True
2020-10-28 12:02:15 +01:00
X_FRAME_OPTIONS = "DENY"
2019-08-22 22:29:05 +02:00
SECURE_CONTENT_TYPE_NOSNIFF = True
# Optionally enable HSTS
2020-10-28 19:20:46 +01:00
SECURE_HSTS_SECONDS = 31536000 if ENABLE_HTTPS else 0
SECURE_HSTS_PRELOAD = ENABLE_HTTPS
SECURE_HSTS_INCLUDE_SUBDOMAINS = ENABLE_HTTPS
# HTTPS detection behind reverse proxy
SECURE_PROXY_SSL_HEADER = None
2019-08-22 22:29:05 +02:00
# URL of login
2021-01-05 12:00:34 +01:00
LOGIN_URL = f"{URL_PREFIX}/accounts/login/"
2019-08-22 22:29:05 +02:00
# URL of logout
2021-01-05 12:00:34 +01:00
LOGOUT_URL = f"{URL_PREFIX}/accounts/logout/"
2019-08-22 22:29:05 +02:00
# Default location for login
2021-01-05 12:00:34 +01:00
LOGIN_REDIRECT_URL = f"{URL_PREFIX}/"
2019-08-22 22:29:05 +02:00
# Anonymous user name
2020-10-28 12:02:15 +01:00
ANONYMOUS_USER_NAME = "anonymous"
2019-08-22 22:29:05 +02:00
# Reverse proxy settings
2020-10-28 12:02:15 +01:00
IP_PROXY_HEADER = "HTTP_X_FORWARDED_FOR"
2019-08-22 22:29:05 +02:00
IP_BEHIND_REVERSE_PROXY = False
2024-01-17 21:13:22 +01:00
IP_PROXY_OFFSET = -1
2019-08-22 22:29:05 +02:00
# Sending HTML in mails
EMAIL_SEND_HTML = True
# Subject of emails includes site title
2021-01-05 12:00:34 +01:00
EMAIL_SUBJECT_PREFIX = f"[{SITE_TITLE}] "
2019-08-22 22:29:05 +02:00
# Enable remote hooks
ENABLE_HOOKS = True
# By default the length of a given translation is limited to the length of
# the source string * 10 characters. Set this option to False to allow longer
# translations (up to 10.000 characters)
LIMIT_TRANSLATION_LENGTH_BY_SOURCE_LENGTH = True
# Use simple language codes for default language/country combinations
SIMPLIFY_LANGUAGES = True
# Render forms using bootstrap
2023-03-22 17:58:46 +01:00
CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap3"
2020-10-28 12:02:15 +01:00
CRISPY_TEMPLATE_PACK = "bootstrap3"
2019-08-22 22:29:05 +02:00
# List of quality checks
# CHECK_LIST = (
2020-10-28 19:20:46 +01:00
# "weblate.checks.same.SameCheck",
# "weblate.checks.chars.BeginNewlineCheck",
# "weblate.checks.chars.EndNewlineCheck",
# "weblate.checks.chars.BeginSpaceCheck",
# "weblate.checks.chars.EndSpaceCheck",
# "weblate.checks.chars.DoubleSpaceCheck",
# "weblate.checks.chars.EndStopCheck",
# "weblate.checks.chars.EndColonCheck",
# "weblate.checks.chars.EndQuestionCheck",
# "weblate.checks.chars.EndExclamationCheck",
# "weblate.checks.chars.EndEllipsisCheck",
# "weblate.checks.chars.EndSemicolonCheck",
# "weblate.checks.chars.MaxLengthCheck",
# "weblate.checks.chars.KashidaCheck",
# "weblate.checks.chars.PunctuationSpacingCheck",
# "weblate.checks.format.PythonFormatCheck",
# "weblate.checks.format.PythonBraceFormatCheck",
# "weblate.checks.format.PHPFormatCheck",
# "weblate.checks.format.CFormatCheck",
# "weblate.checks.format.PerlFormatCheck",
2024-01-17 21:13:22 +01:00
# "weblate.checks.format.PerlBraceFormatCheck",
2020-10-28 19:20:46 +01:00
# "weblate.checks.format.JavaScriptFormatCheck",
2021-03-08 10:51:06 +01:00
# "weblate.checks.format.LuaFormatCheck",
2021-08-27 00:07:28 +02:00
# "weblate.checks.format.ObjectPascalFormatCheck",
2021-04-12 14:16:07 +02:00
# "weblate.checks.format.SchemeFormatCheck",
2020-10-28 19:20:46 +01:00
# "weblate.checks.format.CSharpFormatCheck",
# "weblate.checks.format.JavaFormatCheck",
# "weblate.checks.format.JavaMessageFormatCheck",
# "weblate.checks.format.PercentPlaceholdersCheck",
# "weblate.checks.format.VueFormattingCheck",
# "weblate.checks.format.I18NextInterpolationCheck",
# "weblate.checks.format.ESTemplateLiteralsCheck",
# "weblate.checks.angularjs.AngularJSInterpolationCheck",
2021-11-15 12:25:04 +01:00
# "weblate.checks.icu.ICUMessageFormatCheck",
# "weblate.checks.icu.ICUSourceCheck",
2020-10-28 19:20:46 +01:00
# "weblate.checks.qt.QtFormatCheck",
# "weblate.checks.qt.QtPluralCheck",
# "weblate.checks.ruby.RubyFormatCheck",
# "weblate.checks.consistency.PluralsCheck",
# "weblate.checks.consistency.SamePluralsCheck",
# "weblate.checks.consistency.ConsistencyCheck",
2024-01-17 21:13:22 +01:00
# "weblate.checks.consistency.ReusedCheck",
2020-10-28 19:20:46 +01:00
# "weblate.checks.consistency.TranslatedCheck",
# "weblate.checks.chars.EscapedNewlineCountingCheck",
# "weblate.checks.chars.NewLineCountCheck",
# "weblate.checks.markup.BBCodeCheck",
# "weblate.checks.chars.ZeroWidthSpaceCheck",
# "weblate.checks.render.MaxSizeCheck",
# "weblate.checks.markup.XMLValidityCheck",
# "weblate.checks.markup.XMLTagsCheck",
# "weblate.checks.markup.MarkdownRefLinkCheck",
# "weblate.checks.markup.MarkdownLinkCheck",
# "weblate.checks.markup.MarkdownSyntaxCheck",
# "weblate.checks.markup.URLCheck",
# "weblate.checks.markup.SafeHTMLCheck",
# "weblate.checks.placeholders.PlaceholderCheck",
# "weblate.checks.placeholders.RegexCheck",
# "weblate.checks.duplicate.DuplicateCheck",
# "weblate.checks.source.OptionalPluralCheck",
# "weblate.checks.source.EllipsisCheck",
# "weblate.checks.source.MultipleFailingCheck",
# "weblate.checks.source.LongUntranslatedCheck",
# "weblate.checks.format.MultipleUnnamedFormatsCheck",
2021-03-08 10:51:06 +01:00
# "weblate.checks.glossary.GlossaryCheck",
2024-01-17 21:13:22 +01:00
# "weblate.checks.fluent.syntax.FluentSourceSyntaxCheck",
# "weblate.checks.fluent.syntax.FluentTargetSyntaxCheck",
# "weblate.checks.fluent.parts.FluentPartsCheck",
# "weblate.checks.fluent.references.FluentReferencesCheck",
# "weblate.checks.fluent.inner_html.FluentSourceInnerHTMLCheck",
# "weblate.checks.fluent.inner_html.FluentTargetInnerHTMLCheck",
2019-08-22 22:29:05 +02:00
# )
# List of automatic fixups
# AUTOFIX_LIST = (
2020-10-28 19:20:46 +01:00
# "weblate.trans.autofixes.whitespace.SameBookendingWhitespace",
# "weblate.trans.autofixes.chars.ReplaceTrailingDotsWithEllipsis",
# "weblate.trans.autofixes.chars.RemoveZeroSpace",
# "weblate.trans.autofixes.chars.RemoveControlChars",
2024-01-17 21:13:22 +01:00
# "weblate.trans.autofixes.chars.DevanagariDanda",
# "weblate.trans.autofixes.html.BleachHTML",
2019-08-22 22:29:05 +02:00
# )
# List of enabled addons
# WEBLATE_ADDONS = (
2020-10-28 19:20:46 +01:00
# "weblate.addons.gettext.GenerateMoAddon",
# "weblate.addons.gettext.UpdateLinguasAddon",
# "weblate.addons.gettext.UpdateConfigureAddon",
# "weblate.addons.gettext.MsgmergeAddon",
# "weblate.addons.gettext.GettextCustomizeAddon",
# "weblate.addons.gettext.GettextAuthorComments",
# "weblate.addons.cleanup.CleanupAddon",
2021-03-08 10:51:06 +01:00
# "weblate.addons.cleanup.RemoveBlankAddon",
2020-10-28 19:20:46 +01:00
# "weblate.addons.consistency.LangaugeConsistencyAddon",
# "weblate.addons.discovery.DiscoveryAddon",
2021-03-08 10:51:06 +01:00
# "weblate.addons.autotranslate.AutoTranslateAddon",
2020-10-28 19:20:46 +01:00
# "weblate.addons.flags.SourceEditAddon",
# "weblate.addons.flags.TargetEditAddon",
# "weblate.addons.flags.SameEditAddon",
2020-10-28 12:02:15 +01:00
# "weblate.addons.flags.BulkEditAddon",
2020-10-28 19:20:46 +01:00
# "weblate.addons.generate.GenerateFileAddon",
2021-03-08 10:51:06 +01:00
# "weblate.addons.generate.PseudolocaleAddon",
2022-02-28 16:50:56 +01:00
# "weblate.addons.generate.PrefillAddon",
2024-01-17 21:13:22 +01:00
# "weblate.addons.generate.FillReadOnlyAddon",
2020-10-28 19:20:46 +01:00
# "weblate.addons.json.JSONCustomizeAddon",
2023-01-09 11:28:38 +01:00
# "weblate.addons.xml.XMLCustomizeAddon",
2020-10-28 19:20:46 +01:00
# "weblate.addons.properties.PropertiesSortAddon",
# "weblate.addons.git.GitSquashAddon",
# "weblate.addons.removal.RemoveComments",
# "weblate.addons.removal.RemoveSuggestions",
# "weblate.addons.resx.ResxUpdateAddon",
# "weblate.addons.yaml.YAMLCustomizeAddon",
# "weblate.addons.cdn.CDNJSAddon",
2019-08-22 22:29:05 +02:00
# )
# E-mail address that error messages come from.
2024-01-17 21:13:22 +01:00
SERVER_EMAIL = "__APP__@__DOMAIN__"
2019-08-22 22:29:05 +02:00
# Default email address to use for various automated correspondence from
# the site managers. Used for registration emails.
2021-01-05 12:01:49 +01:00
DEFAULT_FROM_EMAIL = "__APP__@__DOMAIN__"
2019-08-22 22:29:05 +02:00
# List of URLs your site is supposed to serve
2020-10-28 12:02:15 +01:00
ALLOWED_HOSTS = ["__DOMAIN__"]
2019-08-22 22:29:05 +02:00
2020-10-28 12:02:15 +01:00
# Configuration for caching
2019-08-22 22:29:05 +02:00
CACHES = {
2020-10-28 12:02:15 +01:00
"default": {
2024-01-17 21:13:22 +01:00
"BACKEND": "redis_lock.django_cache.RedisCache",
2020-10-28 12:02:15 +01:00
"LOCATION": "redis://127.0.0.1:6379/__REDIS_DB__",
# If redis is running on same host as Weblate, you might
# want to use unix sockets instead:
2020-10-28 19:20:46 +01:00
# "LOCATION": "unix:///var/run/redis/redis.sock?db=1",
2020-10-28 12:02:15 +01:00
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
2021-03-08 10:51:06 +01:00
# If you set password here, adjust CELERY_BROKER_URL as well
2020-10-28 12:02:15 +01:00
"PASSWORD": None,
"CONNECTION_POOL_KWARGS": {},
},
"KEY_PREFIX": "weblate",
2023-01-09 11:28:38 +01:00
"TIMEOUT": 3600,
2020-10-28 12:02:15 +01:00
},
"avatar": {
"BACKEND": "django.core.cache.backends.filebased.FileBasedCache",
2023-03-22 17:58:46 +01:00
"LOCATION": os.path.join(CACHE_DIR, "avatar"),
2020-10-28 12:02:15 +01:00
"TIMEOUT": 86400,
"OPTIONS": {"MAX_ENTRIES": 1000},
},
}
# Store sessions in cache
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
2020-10-28 19:20:46 +01:00
# Store messages in session
MESSAGE_STORAGE = "django.contrib.messages.storage.session.SessionStorage"
2019-08-22 22:29:05 +02:00
# REST framework settings for API
REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
2020-10-28 12:02:15 +01:00
"DEFAULT_PERMISSION_CLASSES": [
2020-10-28 19:20:46 +01:00
# Require authentication for login required sites
"rest_framework.permissions.IsAuthenticated"
if REQUIRE_LOGIN
else "rest_framework.permissions.IsAuthenticatedOrReadOnly"
2019-08-22 22:29:05 +02:00
],
2020-10-28 12:02:15 +01:00
"DEFAULT_AUTHENTICATION_CLASSES": (
"rest_framework.authentication.TokenAuthentication",
"weblate.api.authentication.BearerAuthentication",
"rest_framework.authentication.SessionAuthentication",
2019-08-22 22:29:05 +02:00
),
2020-10-28 12:02:15 +01:00
"DEFAULT_THROTTLE_CLASSES": (
2020-10-28 19:20:46 +01:00
"weblate.api.throttling.UserRateThrottle",
"weblate.api.throttling.AnonRateThrottle",
2019-08-22 22:29:05 +02:00
),
2020-10-28 12:02:15 +01:00
"DEFAULT_THROTTLE_RATES": {"anon": "100/day", "user": "5000/hour"},
2023-03-22 17:58:46 +01:00
"DEFAULT_PAGINATION_CLASS": "weblate.api.pagination.StandardPagination",
"PAGE_SIZE": 50,
2020-10-28 12:02:15 +01:00
"VIEW_DESCRIPTION_FUNCTION": "weblate.api.views.get_view_description",
"UNAUTHENTICATED_USER": "weblate.auth.models.get_anonymous",
2019-08-22 22:29:05 +02:00
}
2020-10-28 19:20:46 +01:00
# Fonts CDN URL
FONTS_CDN_URL = None
# Django compressor offline mode
2024-01-21 12:40:13 +01:00
COMPRESS_OFFLINE = True
2024-01-17 21:13:22 +01:00
COMPRESS_OFFLINE_CONTEXT = "weblate.utils.compress.offline_context"
COMPRESS_CSS_HASHING_METHOD = "content"
2020-10-28 19:20:46 +01:00
# Require login for all URLs
if REQUIRE_LOGIN:
LOGIN_REQUIRED_URLS = (r"/(.*)$",)
2019-08-22 22:29:05 +02:00
# In such case you will want to include some of the exceptions
# LOGIN_REQUIRED_URLS_EXCEPTIONS = (
2020-10-28 19:20:46 +01:00
# rf"{URL_PREFIX}/accounts/(.*)$", # Required for login
# rf"{URL_PREFIX}/admin/login/(.*)$", # Required for admin login
# rf"{URL_PREFIX}/static/(.*)$", # Required for development mode
2024-01-17 21:13:22 +01:00
# rf"{URL_PREFIX}/widget/(.*)$", # Allowing public access to widgets
2020-10-28 19:20:46 +01:00
# rf"{URL_PREFIX}/data/(.*)$", # Allowing public access to data exports
# rf"{URL_PREFIX}/hooks/(.*)$", # Allowing public access to notification hooks
# rf"{URL_PREFIX}/healthz/$", # Allowing public access to health check
# rf"{URL_PREFIX}/api/(.*)$", # Allowing access to API
# rf"{URL_PREFIX}/js/i18n/$", # JavaScript localization
# rf"{URL_PREFIX}/contact/$", # Optional for contact form
# rf"{URL_PREFIX}/legal/(.*)$", # Optional for legal app
2022-04-21 17:30:02 +02:00
# rf"{URL_PREFIX}/avatar/(.*)$", # Optional for avatars
2019-08-22 22:29:05 +02:00
# )
# Silence some of the Django system checks
SILENCED_SYSTEM_CHECKS = [
# We have modified django.contrib.auth.middleware.AuthenticationMiddleware
# as weblate.accounts.middleware.AuthenticationMiddleware
2020-10-28 12:02:15 +01:00
"admin.E408"
2019-08-22 22:29:05 +02:00
]
# Celery worker configuration for testing
# CELERY_TASK_ALWAYS_EAGER = True
2020-10-28 19:20:46 +01:00
# CELERY_BROKER_URL = "memory://"
2019-08-22 22:29:05 +02:00
# CELERY_TASK_EAGER_PROPAGATES = True
# Celery worker configuration for production
CELERY_TASK_ALWAYS_EAGER = False
2024-01-21 09:09:51 +01:00
CELERY_BROKER_URL = "redis://127.0.0.1:6379/__REDIS_DB__"
2019-08-22 22:29:05 +02:00
CELERY_RESULT_BACKEND = CELERY_BROKER_URL
# Celery settings, it is not recommended to change these
CELERY_WORKER_MAX_MEMORY_PER_CHILD = 200000
2023-03-22 17:58:46 +01:00
CELERY_BEAT_SCHEDULER = "django_celery_beat.schedulers:DatabaseScheduler"
2019-08-22 22:29:05 +02:00
CELERY_TASK_ROUTES = {
2021-04-30 15:58:52 +02:00
"weblate.trans.tasks.auto_translate*": {"queue": "translate"},
2020-10-28 12:02:15 +01:00
"weblate.accounts.tasks.notify_*": {"queue": "notify"},
"weblate.accounts.tasks.send_mails": {"queue": "notify"},
"weblate.utils.tasks.settings_backup": {"queue": "backup"},
"weblate.utils.tasks.database_backup": {"queue": "backup"},
"weblate.wladmin.tasks.backup": {"queue": "backup"},
"weblate.wladmin.tasks.backup_service": {"queue": "backup"},
2020-10-28 19:20:46 +01:00
"weblate.memory.tasks.*": {"queue": "memory"},
2019-08-22 22:29:05 +02:00
}
2023-03-22 17:58:46 +01:00
# CORS allowed origins
CORS_ALLOWED_ORIGINS = []
CORS_URLS_REGEX = r"^/api/.*$"
2020-10-28 12:02:15 +01:00
# Enable plain database backups
DATABASE_BACKUP = "plain"
# Enable auto updating
AUTO_UPDATE = False
# PGP commits signing
WEBLATE_GPG_IDENTITY = None
# Third party services integration
MATOMO_SITE_ID = None
MATOMO_URL = None
GOOGLE_ANALYTICS_ID = None
SENTRY_DSN = None
2021-08-27 00:07:28 +02:00
SENTRY_ENVIRONMENT = SITE_DOMAIN
2024-01-17 21:29:52 +01:00
AKISMET_API_KEY = None
# Yunohost hack so users can define a new conf, and we can just replace the conf
try:
from .local_settings import *
except ImportError:
pass