Coverage for app/venv/lib/python3.14/site-packages/weblate/settings_test.py: 0%

63 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 07:15 +0000

1# Copyright © Michal Čihař <michal@weblate.org> 

2# 

3# SPDX-License-Identifier: GPL-3.0-or-later 

4 

5# 

6# Django settings for running testsuite 

7# 

8 

9import os 

10import warnings 

11from tempfile import TemporaryDirectory 

12 

13from weblate.settings_example import * # noqa: F403 

14 

15CI_DATABASE = os.environ.get("CI_DATABASE", "") 

16 

17default_user = "weblate" 

18default_name = "weblate" 

19if CI_DATABASE in {"mysql", "mariadb"}: 

20 DATABASES["default"]["ENGINE"] = "django.db.backends.mysql" 

21 default_user = "root" 

22 DATABASES["default"]["OPTIONS"] = { 

23 "init_command": ( 

24 "SET NAMES utf8mb4, " 

25 "wait_timeout=28800, " 

26 "default_storage_engine=INNODB, " 

27 'sql_mode="STRICT_TRANS_TABLES"' 

28 ), 

29 "charset": "utf8", 

30 "isolation_level": "read committed", 

31 } 

32elif CI_DATABASE == "postgresql": 

33 DATABASES["default"]["ENGINE"] = "django.db.backends.postgresql" 

34 default_user = "postgres" 

35else: 

36 if not CI_DATABASE: 

37 msg = "Missing CI_DATABASE configuration in the environment" 

38 raise ValueError(msg) 

39 msg = f"Not supported database: {CI_DATABASE}" 

40 raise ValueError(msg) 

41 

42DATABASES["default"]["HOST"] = os.environ.get("CI_DB_HOST", "") 

43DATABASES["default"]["NAME"] = os.environ.get("CI_DB_NAME", default_name) 

44DATABASES["default"]["USER"] = os.environ.get("CI_DB_USER", default_user) 

45DATABASES["default"]["PASSWORD"] = os.environ.get("CI_DB_PASSWORD", "") 

46DATABASES["default"]["PORT"] = os.environ.get("CI_DB_PORT", "") 

47 

48# Configure admins 

49ADMINS = (("Weblate test", "noreply@weblate.org"),) 

50 

51# The secret key is needed for tests 

52SECRET_KEY = "secret key used for tests only" # noqa: S105 

53 

54SITE_DOMAIN = "example.com" 

55OTP_WEBAUTHN_RP_NAME = SITE_DOMAIN 

56OTP_WEBAUTHN_RP_ID = SITE_DOMAIN 

57OTP_WEBAUTHN_ALLOWED_ORIGINS = [f"https://{SITE_DOMAIN}"] 

58 

59# Different root for test repos 

60if "CI_BASE_DIR" in os.environ: 

61 BASE_DIR = os.environ["CI_BASE_DIR"] 

62else: 

63 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 

64 

65DATA_DIR = os.path.join(BASE_DIR, "data-test") 

66 

67# Use random data directory when running in parallel 

68if "PYTEST_XDIST_TESTRUNUID" in os.environ: 

69 if not os.path.exists(DATA_DIR): 

70 os.makedirs(DATA_DIR, exist_ok=True) 

71 DATA_DIR_TMP = TemporaryDirectory(dir=DATA_DIR, prefix="xdist-") 

72 DATA_DIR = DATA_DIR_TMP.name 

73 

74CACHE_DIR = os.path.join(DATA_DIR, "cache") 

75MEDIA_ROOT = os.path.join(DATA_DIR, "media") 

76STATIC_ROOT = os.path.join(DATA_DIR, "static") 

77CELERY_TASK_ALWAYS_EAGER = True 

78CELERY_BROKER_URL = "memory://" 

79CELERY_TASK_EAGER_PROPAGATES = True 

80CELERY_RESULT_BACKEND = None 

81 

82# Enable lazy stats for testing 

83STATS_LAZY = True 

84 

85VCS_API_DELAY = 0 

86VCS_FILE_PROTOCOL = True 

87 

88# Localize CDN addon 

89LOCALIZE_CDN_URL = "https://cdn.example.com/" 

90LOCALIZE_CDN_PATH = os.path.join(DATA_DIR, "l10n-cdn") 

91 

92# Needed for makemessages, otherwise it does not discover all available locales 

93# and the -a parameter does not work 

94LOCALE_PATHS = [os.path.join(os.path.dirname(__file__), "locale")] 

95 

96# Silent logging setup 

97LOGGING = { 

98 "version": 1, 

99 "disable_existing_loggers": False, 

100 "filters": {"require_debug_false": {"()": "django.utils.log.RequireDebugFalse"}}, 

101 "formatters": {"simple": {"format": "%(levelname)s %(message)s"}}, 

102 "handlers": { 

103 "mail_admins": { 

104 "level": "ERROR", 

105 "filters": ["require_debug_false"], 

106 "class": "django.utils.log.AdminEmailHandler", 

107 }, 

108 "console": { 

109 "level": "DEBUG", 

110 "class": "logging.StreamHandler", 

111 "formatter": "simple", 

112 }, 

113 }, 

114 "loggers": { 

115 "django.request": { 

116 "handlers": ["mail_admins"], 

117 "level": "ERROR", 

118 "propagate": True, 

119 }, 

120 "weblate": {"handlers": [], "level": "ERROR"}, 

121 "social": {"handlers": [], "level": "ERROR"}, 

122 }, 

123} 

124 

125# Reset caches 

126CACHES = {"default": {"BACKEND": "django.core.cache.backends.locmem.LocMemCache"}} 

127 

128if "CI_REDIS_HOST" in os.environ: 

129 CACHES["avatar"] = { 

130 "BACKEND": "django_redis.cache.RedisCache", 

131 "LOCATION": "redis://{}:{}/0".format( 

132 os.environ["CI_REDIS_HOST"], os.environ.get("CI_REDIS_PORT", "6379") 

133 ), 

134 } 

135 

136# Selenium can not clear HttpOnly cookies in MSIE 

137SESSION_COOKIE_HTTPONLY = False 

138 

139# Use database backed sessions for transaction consistency in tests 

140SESSION_ENGINE = "django.contrib.sessions.backends.db" 

141 

142# Test optional apps as well 

143INSTALLED_APPS += ("weblate.billing", "weblate.legal") 

144 

145# Test GitHub auth 

146AUTHENTICATION_BACKENDS = ( 

147 "social_core.backends.email.EmailAuth", 

148 "social_core.backends.github.GithubOAuth2", 

149 "weblate.accounts.auth.WeblateUserBackend", 

150) 

151 

152# Disable random admin checks trigger 

153BACKGROUND_ADMIN_CHECKS = False 

154 

155# Use weak password hasher for testing 

156PASSWORD_HASHERS = [ 

157 "django.contrib.auth.hashers.MD5PasswordHasher", 

158] 

159 

160# Let the testsuite fail on timezone issues 

161warnings.filterwarnings( 

162 "error", 

163 r"DateTimeField .* received a naive datetime", 

164 RuntimeWarning, 

165 r"django\.db\.models\.fields", 

166)