OpenSlides/tests/settings.py

114 lines
2.9 KiB
Python

"""
Settings file for OpenSlides' tests.
"""
import os
from openslides.global_settings import * # noqa
# Path to the directory for user specific data files
OPENSLIDES_USER_DATA_PATH = os.path.realpath(os.path.dirname(os.path.abspath(__file__)))
EMAIL_BACKEND = "django.core.mail.backends.locmem.EmailBackend"
# OpenSlides plugins
# Add plugins to this list.
INSTALLED_PLUGINS += ("tests.integration.test_plugin",) # noqa
INSTALLED_APPS += INSTALLED_PLUGINS # noqa
# Important settings for production use
# https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/
SECRET_KEY = "secret"
DEBUG = False
# Uncomment to test with the redis cache
# REDIS_ADDRESS = "redis://127.0.0.1"
# Database
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases
# Change this setting to use e. g. PostgreSQL or MySQL.
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"TEST": {"NAME": os.path.join(OPENSLIDES_USER_DATA_PATH, "db.sqlite3.test")},
}
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
# Internationalization
# https://docs.djangoproject.com/en/1.10/topics/i18n/
TIME_ZONE = "Europe/Berlin"
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/
STATICFILES_DIRS.insert(0, os.path.join(OPENSLIDES_USER_DATA_PATH, "static")) # noqa
# Files
# https://docs.djangoproject.com/en/1.10/topics/files/
MEDIA_ROOT = os.path.join(OPENSLIDES_USER_DATA_PATH, "")
# Special settings only for testing
# Use a faster password hasher.
PASSWORD_HASHERS = ["django.contrib.auth.hashers.MD5PasswordHasher"]
# Deactivate restricted_data_cache
RESTRICTED_DATA_CACHE = False
REST_FRAMEWORK = {"TEST_REQUEST_DEFAULT_FORMAT": "json"}
ENABLE_ELECTRONIC_VOTING = True
# https://stackoverflow.com/questions/24876343/django-traceback-on-queries
if os.environ.get("DEBUG_SQL_TRACEBACK"):
import traceback
import django.db.backends.utils as bakutils
cursor_debug_wrapper_orig = bakutils.CursorDebugWrapper
def print_stack_in_project(sql):
stack = traceback.extract_stack()
for path, lineno, func, line in stack:
if "lib/python" in path or "settings.py" in path:
continue
print(f'File "{path}", line {lineno}, in {func}')
print(f" {line}")
print(sql)
print("\n")
class CursorDebugWrapperLoud(cursor_debug_wrapper_orig): # type: ignore
def execute(self, sql, params=None):
try:
return super().execute(sql, params)
finally:
sql = self.db.ops.last_executed_query(self.cursor, sql, params)
print_stack_in_project(sql)
def executemany(self, sql, param_list):
try:
return super().executemany(sql, param_list)
finally:
print_stack_in_project(sql)
bakutils.CursorDebugWrapper = CursorDebugWrapperLoud