Skip to contentIntegrityError at /wt/api/nextjs/v1/page_by_path/
null value in column "django_site_id" of relation "sitesettings_sitesetting" violates not-null constraint
DETAIL: Failing row contains (94, , , 35, null, , null, null, sm, null, null, null).
Request Method: GET
Request URL: https://host.docker.internal:8000/wt/api/nextjs/v1/page_by_path/?html_path=%2Fkelly%2F&site=dev.weblivion.com%3A80
Django Version: 5.2.11
Python Executable: /projects/weblivion/.venv/bin/python3
Python Version: 3.13.11
Python Path: ['/projects/weblivion', '/projects/weblivion/apps/app-server/app_server', '/home/kevinw/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python313.zip', '/home/kevinw/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13', '/home/kevinw/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/lib-dynload', '/projects/weblivion/.venv/lib/python3.13/site-packages', '/projects/weblivion/apps/app-server', '/projects/weblivion/libs/color-utils', '/projects/weblivion/libs/file-utils', '/projects/weblivion/libs/image-utils', '/projects/weblivion/libs/logoboto', '/projects/weblivion/apps/monoceros', '/projects/weblivion/libs/py-iface', '/projects/weblivion/apps/py-services', '/projects/weblivion/.venv/lib/python3.13/site-packages/setuptools/_vendor']
Server time: Mon, 16 Mar 2026 13:07:34 +0000
Installed Applications:
['daphne',
'channels',
'dal',
'dal_select2',
'dal_queryset_sequence',
'dbsettings',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.humanize',
'django.contrib.staticfiles',
'django.contrib.sitemaps',
'django.contrib.sites',
'django.forms',
'django_extensions',
'formtools',
'rest_framework',
'rest_framework.authtoken',
'dbbackup',
'import_export',
'corsheaders',
'drf_spectacular',
'dj_rest_auth',
'allauth',
'allauth.account',
'allauth.headless',
'allauth.mfa',
'dj_rest_auth.registration',
'allauth.socialaccount',
'allauth.socialaccount.providers.github',
'allauth.socialaccount.providers.nextcloud',
'storages',
'reversion',
'rolepermissions',
'prose',
'dbtemplates',
'treebeard',
'customwagtailadmin',
'sitetree',
'colorfield',
'mjml',
'user_messages',
'djangocodemirror',
'joeflow',
'django_celery_beat',
'django_celery_results',
'wagtail.contrib.forms',
'wagtail.contrib.redirects',
'wagtail.embeds',
'wagtail.sites',
'wagtail.users',
'wagtail.snippets',
'wagtail.documents',
'wagtail.images',
'wagtail.search',
'wagtail.admin',
'wagtail',
'wagtail.api.v2',
'wagtail.contrib.routable_page',
'wagtail.contrib.settings',
'wagtailautocomplete',
'wagtail_modeladmin',
'django_react_templatetags',
'crispy_forms',
'crispy_bootstrap5',
'django_tables2',
'django_bootstrap5',
'phonenumber_field',
'bootstrap_pagination',
'modelcluster',
'taggit',
'wagtail_meta_preview',
'wagtail_headless_preview',
'wagtailmenus',
'wagtailmedia',
'webpack_loader',
'lti_provider',
'pipit',
'customuser',
'forgejo_provider',
'nextcloud_provider',
'sitesettings',
'customimage',
'customdocument',
'custommedia',
'nextjs',
'slides',
'cms',
'blacklava',
'events',
'core',
'site_ops',
'monoceros',
'useraccount',
'catalog',
'contentset',
'blacklabel',
'partner',
'down2learn']
Installed Middleware:
['down2learn.middleware.PartnerSiteMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'allauth.account.middleware.AccountMiddleware']
Traceback (most recent call last):
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 948, in get_or_create
return self.get(**kwargs), False
^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 635, in get
raise self.model.DoesNotExist(
^
During handling of the above exception (SiteSetting matching query does not exist.), another exception occurred:
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/backends/utils.py", line 105, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/psycopg/cursor.py", line 117, in execute
raise ex.with_traceback(None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The above exception (null value in column "django_site_id" of relation "sitesettings_sitesetting" violates not-null constraint
DETAIL: Failing row contains (94, , , 35, null, , null, null, sm, null, null, null).) was the direct cause of the following exception:
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/core/handlers/exception.py", line 42, in inner
response = await get_response(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/core/handlers/base.py", line 253, in _get_response_async
response = await wrapped_callback(
File "/projects/weblivion/.venv/lib/python3.13/site-packages/wagtail/api/v2/router.py", line 68, in wrapped
return func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/views/decorators/csrf.py", line 65, in _view_wrapper
return view_func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/viewsets.py", line 125, in view
return self.dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/views.py", line 515, in dispatch
response = self.handle_exception(exc)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/wagtail/api/v2/views.py", line 149, in handle_exception
return super().handle_exception(exc)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/views.py", line 475, in handle_exception
self.raise_uncaught_exception(exc)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/views.py", line 486, in raise_uncaught_exception
raise exc
^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/views.py", line 512, in dispatch
response = handler(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/apps/app-server/app_server/nextjs/nextjs_api.py", line 200, in listing_view
return page.serve(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/apps/app-server/app_server/cms/pages/base_page.py", line 74, in serve
response = super().serve(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/wagtail/contrib/routable_page/models.py", line 173, in serve
return view(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/apps/app-server/app_server/cms/pages/base_page.py", line 102, in serve_root
component = self.build_component({"request": request})
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/apps/app-server/app_server/cms/pages/base_page.py", line 297, in build_component
props=self.to_dict(context=context, serializer_cls=serializer_cls),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/apps/app-server/app_server/cms/pages/base_page.py", line 326, in to_dict
return serializer.data
^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/serializers.py", line 573, in data
ret = super().data
^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/serializers.py", line 251, in data
self._data = self.to_representation(self.instance)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/serializers.py", line 540, in to_representation
ret[field.field_name] = field.to_representation(attribute)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/fields.py", line 1870, in to_representation
return method(value)
^^^^^^^^^^^^^
File "/projects/weblivion/apps/app-server/app_server/down2learn/serializers/partner_branding_mixin.py", line 16, in get_site_setting
site_setting_data = super().get_site_setting(page)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/apps/app-server/app_server/cms/pages/base_page_serializer.py", line 87, in get_site_setting
site_setting = SiteSetting.for_site(page.get_site())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/wagtail/contrib/settings/models.py", line 158, in for_site
instance, created = queryset.get_or_create(site=site)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 955, in get_or_create
return self.create(**params), True
^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 665, in create
obj.save(force_insert=True, using=self.db)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/base.py", line 902, in save
self.save_base(
^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/base.py", line 1008, in save_base
updated = self._save_table(
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/base.py", line 1169, in _save_table
results = self._do_insert(
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/base.py", line 1210, in _do_insert
return manager._insert(
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/manager.py", line 87, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 1873, in _insert
return query.get_compiler(using=using).execute_sql(returning_fields)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/sql/compiler.py", line 1882, in execute_sql
cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/backends/utils.py", line 122, in execute
return super().execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/backends/utils.py", line 79, in execute
return self._execute_with_wrappers(
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/backends/utils.py", line 92, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/backends/utils.py", line 100, in _execute
with self.db.wrap_database_errors:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/utils.py", line 91, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/backends/utils.py", line 105, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/projects/weblivion/.venv/lib/python3.13/site-packages/psycopg/cursor.py", line 117, in execute
raise ex.with_traceback(None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Exception Type: IntegrityError at /wt/api/nextjs/v1/page_by_path/
Exception Value: null value in column "django_site_id" of relation "sitesettings_sitesetting" violates not-null constraint
DETAIL: Failing row contains (94, , , 35, null, , null, null, sm, null, null, null).
Raised during: nextjs.nextjs_api.PageByPathAPIViewSet
Request information:
USER: AnonymousUser
GET:
html_path = '/kelly/'
site = 'dev.weblivion.com:80'
POST: No POST data
FILES: No FILES data
COOKIES:
= 'undefined'
META:
CONTENT_TYPE = 'application/json'
HTTP_ACCEPT = 'application/json'
HTTP_ACCEPT_ENCODING = 'gzip, deflate'
HTTP_ACCEPT_LANGUAGE = '*'
HTTP_CACHE_CONTROL = 'no-cache'
HTTP_CONNECTION = 'keep-alive'
HTTP_COOKIE = '********************'
HTTP_HOST = 'host.docker.internal:8000'
HTTP_SEC_FETCH_MODE = 'same-origin'
HTTP_USER_AGENT = 'node'
HTTP_X_FORWARDED_PROTO = 'https'
PATH_INFO = '/wt/api/nextjs/v1/page_by_path/'
QUERY_STRING = 'html_path=%2Fkelly%2F&site=dev.weblivion.com%3A80'
REMOTE_ADDR = '192.160.160.136'
REMOTE_HOST = '192.160.160.136'
REMOTE_PORT = 54108
REQUEST_METHOD = 'GET'
SCRIPT_NAME = ''
SERVER_NAME = '192.160.160.136'
SERVER_PORT = '8000'
wsgi.multiprocess = True
wsgi.multithread = True
Settings:
Using settings module settings.local
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_ADAPTER = 'useraccount.adapters.BlacklavaAccountAdapter'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_VERIFICATION = 'optional'
ACCOUNT_LOGIN_METHODS = {'email', 'username'}
ACCOUNT_MAX_EMAIL_ADDRESSES = 2
ACCOUNT_RATE_LIMITS = {'change_password': '********************', 'manage_email': '10/m/user', 'reset_password': '********************', 'reauthenticate': '********************', 'reset_password_from_key': '********************', 'signup': '20/m/ip', 'login': '30/m/ip', 'login_failed': '10/m/ip,5/5m/key', 'confirm_email': '1/3m/key'}
ACCOUNT_SESSION_REMEMBER = None
ACCOUNT_SIGNUP_FIELDS = ['username*', 'email*', 'password1*', 'password2*']
ACCOUNT_SIGNUP_REDIRECT_URL = '/wt/accounts/signup/'
ACCOUNT_USERNAME_BLACKLIST = ['blacklava']
ACCOUNT_USERNAME_MIN_LENGTH = 2
ACOUSTID_API_KEY = '********************'
ACYL_URL = 'http://172.16.0.1:8011/'
ADMINS = []
ADMIN_BUNDLE = 'app-server-bundle'
ADMIN_URL = 'wt/dj/'
ALLOWED_HOSTS = ['*']
APPEND_SLASH = True
APP_VERSION = '0.1.0'
ASGI_APPLICATION = 'asgi.application'
ATOMIC_REBUILD = True
AUTHENTICATION_BACKENDS = '********************'
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = '********************'
BASE_DIR = '/projects/weblivion/apps/app-server'
BOOTSTRAP5 = {'wrapper_class': 'my-3', 'horizontal_label_class': 'col-md-4 text-md-right text-md-end', 'horizontal_field_offset_class': 'offset-sm-4', 'horizontal_field_class': 'col-md-8', 'required_css_class': 'field-required', 'error_css_class': 'is-invalid', 'success_css_class': '', 'server_side_validation': True, 'form_renderers': {'default': 'cms.render_bootstrap5.CustomFormRenderer'}, 'field_renderers': {'default': 'cms.render_bootstrap5.CustomFieldRenderer'}}
CACHES = {'default': {'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:8003/1', 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient'}}, 'sitetree': {'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:8003/8', 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient'}}, 'dbtemplates': {'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:8003/9', 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient'}}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = False
CELERY_BROKER_URL = 'redis://localhost:8003/1'
CELERY_CACHE_BACKEND = 'default'
CELERY_RESULT_BACKEND = 'redis://localhost:8003/1'
CELERY_TASK_TRACK_STARTED = True
CHANNELS_WEBSOCKET_PATH = 'wt/ws/$'
CHANNEL_GROUP_BROADCAST = 'broadcast'
CHANNEL_LAYERS = {'default': {'BACKEND': 'channels_redis.core.RedisChannelLayer', 'CONFIG': {'hosts': [('localhost', 8003)]}}}
CODEMIRROR_BASE_CSS = ['CodeMirror/lib/codemirror.css']
CODEMIRROR_BASE_JS = ['CodeMirror/lib/codemirror.js']
CODEMIRROR_BUNDLE_CSS_NAME = 'dcm-{settings_name}_css'
CODEMIRROR_BUNDLE_CSS_OPTIONS = {'filters': 'yui_css', 'output': 'css/dcm-{settings_name}.min.css'}
CODEMIRROR_BUNDLE_JS_NAME = 'dcm-{settings_name}_js'
CODEMIRROR_BUNDLE_JS_OPTIONS = {'filters': 'yui_js', 'output': 'js/dcm-{settings_name}.min.js'}
CODEMIRROR_CSS_ASSET_TAG = ''
CODEMIRROR_FIELD_INIT_JS = ''
CODEMIRROR_JS_ASSET_TAG = ''
CODEMIRROR_MODES = {'css': 'CodeMirror/mode/css/css.js', 'django': 'CodeMirror/mode/django/django.js', 'htmlmixed': 'CodeMirror/mode/htmlmixed/htmlmixed.js', 'javascript': 'CodeMirror/mode/javascript/javascript.js', 'python': 'CodeMirror/mode/python/python.js', 'rst': 'CodeMirror/mode/rst/rst.js', 'stex': 'CodeMirror/mode/stex/stex.js', 'vbscript': 'CodeMirror/mode/vbscript/vbscript.js', 'xml': 'CodeMirror/mode/xml/xml.js'}
CODEMIRROR_SETTINGS = {'empty': {}, 'javascript': {'modes': ['javascript'], 'matchBrackets': True, 'continueComments': 'Enter', 'extraKeys': '********************', 'addons': ['CodeMirror/addon/edit/matchbrackets.js', 'CodeMirror/addon/comment/continuecomment.js', 'CodeMirror/addon/comment/comment.js']}, 'restructuredtext': {'mode': 'rst', 'modes': ['python', 'stex', 'rst'], 'addons': ['CodeMirror/addon/mode/overlay.js']}, 'html': {'mode': 'htmlmixed', 'modes': ['xml', 'javascript', 'css', 'vbscript', 'htmlmixed']}, 'django': {'mode': 'django', 'modes': ['xml', 'javascript', 'css', 'vbscript', 'htmlmixed', 'django'], 'addons': ['CodeMirror/addon/mode/overlay.js'], 'theme': 'night', 'themes': ['night', 'eclipse']}, 'css': {'modes': ['css'], 'matchBrackets': True, 'extraKeys': '********************', 'addons': ['CodeMirror/addon/edit/matchbrackets.js', 'CodeMirror/addon/hint/show-hint.js', 'CodeMirror/addon/hint/css-hint.js'], 'extra_css': ['CodeMirror/addon/hint/show-hint.css']}, 'scss': {'mode': 'text/x-scss', 'modes': ['css'], 'matchBrackets': True, 'addons': ['CodeMirror/addon/edit/matchbrackets.js']}, 'python': {'mode': {'name': 'python', 'version': 3, 'singleLineStringErrors': False}, 'modes': ['python'], 'matchBrackets': True, 'addons': ['CodeMirror/addon/edit/matchbrackets.js']}}
CODEMIRROR_THEMES = {'3024-day': 'CodeMirror/theme/3024-day.css', '3024-night': 'CodeMirror/theme/3024-night.css', 'abcdef': 'CodeMirror/theme/abcdef.css', 'ambiance': 'CodeMirror/theme/ambiance.css', 'ambiance-mobile': 'CodeMirror/theme/ambiance-mobile.css', 'base16-dark': 'CodeMirror/theme/base16-dark.css', 'base16-light': 'CodeMirror/theme/base16-light.css', 'bespin': 'CodeMirror/theme/bespin.css', 'blackboard': 'CodeMirror/theme/blackboard.css', 'cobalt': 'CodeMirror/theme/cobalt.css', 'colorforth': 'CodeMirror/theme/colorforth.css', 'darcula': 'CodeMirror/theme/darcula.css', 'dracula': 'CodeMirror/theme/dracula.css', 'duotone-dark': 'CodeMirror/theme/duotone-dark.css', 'duotone-light': 'CodeMirror/theme/duotone-light.css', 'eclipse': 'CodeMirror/theme/eclipse.css', 'elegant': 'CodeMirror/theme/elegant.css', 'erlang-dark': 'CodeMirror/theme/erlang-dark.css', 'gruvbox-dark': 'CodeMirror/theme/gruvbox-dark.css', 'hopscotch': 'CodeMirror/theme/hopscotch.css', 'icecoder': 'CodeMirror/theme/icecoder.css', 'idea': 'CodeMirror/theme/idea.css', 'isotope': 'CodeMirror/theme/isotope.css', 'lesser-dark': 'CodeMirror/theme/lesser-dark.css', 'liquibyte': 'CodeMirror/theme/liquibyte.css', 'lucario': 'CodeMirror/theme/lucario.css', 'material': 'CodeMirror/theme/material.css', 'mbo': 'CodeMirror/theme/mbo.css', 'mdn-like': 'CodeMirror/theme/mdn-like.css', 'midnight': 'CodeMirror/theme/midnight.css', 'monokai': 'CodeMirror/theme/monokai.css', 'neat': 'CodeMirror/theme/neat.css', 'neo': 'CodeMirror/theme/neo.css', 'night': 'CodeMirror/theme/night.css', 'oceanic-next': 'CodeMirror/theme/oceanic-next.css', 'panda-syntax': 'CodeMirror/theme/panda-syntax.css', 'paraiso-dark': 'CodeMirror/theme/paraiso-dark.css', 'paraiso-light': 'CodeMirror/theme/paraiso-light.css', 'pastel-on-dark': 'CodeMirror/theme/pastel-on-dark.css', 'railscasts': 'CodeMirror/theme/railscasts.css', 'rubyblue': 'CodeMirror/theme/rubyblue.css', 'seti': 'CodeMirror/theme/seti.css', 'shadowfox': 'CodeMirror/theme/shadowfox.css', 'solarized': 'CodeMirror/theme/solarized.css', 'ssms': 'CodeMirror/theme/ssms.css', 'the-matrix': 'CodeMirror/theme/the-matrix.css', 'tomorrow-night-bright': 'CodeMirror/theme/tomorrow-night-bright.css', 'tomorrow-night-eighties': 'CodeMirror/theme/tomorrow-night-eighties.css', 'ttcn': 'CodeMirror/theme/ttcn.css', 'twilight': 'CodeMirror/theme/twilight.css', 'vibrant-ink': 'CodeMirror/theme/vibrant-ink.css', 'xq-dark': 'CodeMirror/theme/xq-dark.css', 'xq-light': 'CodeMirror/theme/xq-light.css', 'yeti': 'CodeMirror/theme/yeti.css', 'zenburn': 'CodeMirror/theme/zenburn.css'}
CORS_ALLOWED_ORIGINS = ['http://172.26.5.250:3000', 'http://localhost:3000', 'http://localhost:5173', 'http://localhost:8000', 'http://host.docker.internal:8081', 'https://host.docker.internal:8082', 'https://host.plasmicdev.com', 'https://studio.plasmic.app']
CORS_ALLOWED_ORIGIN_REGEXES = ['^https://\\w+\\.\\w+\\.weblivion\\.com$', '^https://\\w+\\.weblivion\\.com$', '^https://\\w+\\.plasmic\\.app$']
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_HEADERS = ['accept', 'accept-encoding', 'authorization', 'content-type', 'dnt', 'origin', 'user-agent', 'x-csrftoken', 'x-requested-with', 'cache-control']
CORS_ORIGIN_ALLOW_ALL = False
CRISPY_ALLOWED_TEMPLATE_PACKS = 'bootstrap5'
CRISPY_TEMPLATE_PACK = 'bootstrap5'
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = ['http://localhost', 'http://localhost:5173', 'http://host.docker.internal', 'https://*.weblivion.com', 'https://*.weblivion.com:8443']
CSRF_USE_SESSIONS = False
CSS_MODULES = {'modules': '/projects/weblivion/dist/modules.scss.json'}
CUSTOMIMAGES = {'WEBP_QUALITY': 50, 'JPEG_QUALITY': 50, 'AVIF_QUALITY': 50, 'DEVICE_SIZES': [640, 750, 828, 1080, 1200, 1920, 2048, 3840], 'IMAGE_SIZES': [16, 32, 48, 64, 96, 128, 256, 384, 512], 'FILTER_SPECS': {'image_format_float': 'max-512x512', 'image_format_cinema': 'fill-828x512-c0', 'course_product_detail': 'fill-1280x800-c0'}, 'STATIC_FILTER_SPECS': {'unicornhat_display': 'fill-16x16-c1', 'page_meta_preview': 'fill-1200x640', 'course_product_list': 'fill-512x320-c0'}}
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql', 'NAME': 'weblivion', 'USER': 'weblivion', 'PASSWORD': '********************', 'HOST': 'localhost', 'PORT': '8004', 'CONN_MAX_AGE': 0, 'OPTIONS': {'pool': False}, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_HEALTH_CHECKS': False, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}}
DATABASE_ROUTERS = []
DATABASE_URL = 'db+postgresql://weblivion:weblivion@localhost/weblivion'
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATA_UPLOAD_MAX_NUMBER_FILES = 100
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DBBACKUP_CONNECTORS = {'default': {'ENGINE': 'django.db.backends.postgresql', 'NAME': 'weblivion', 'USER': 'weblivion', 'PASSWORD': '********************', 'HOST': 'localhost', 'PORT': '8004', 'CONN_MAX_AGE': 0, 'OPTIONS': {'pool': False}, 'DROP': False}}
DBBACKUP_CONNECTOR_MAPPING = {'django.db.backends.postgresql': 'dbbackup.db.postgresql.PgDumpConnector'}
DBBACKUP_EMAIL_SUBJECT_PREFIX = '[blacklava.dbbackup] '
DBBACKUP_STORAGE = 'django.core.files.storage.FileSystemStorage'
DBBACKUP_STORAGE_OPTIONS = {'location': '/projects/weblivion/apps/../backups'}
DBSETTINGS_USE_SITES = True
DBTEMPLATES_ADD_DEFAULT_SITE = True
DBTEMPLATES_AUTO_POPULATE_CONTENT = True
DBTEMPLATES_CACHE_BACKEND = 'dbtemplates'
DBTEMPLATES_MEDIA_PREFIX = '/wt/static/dbtemplates/'
DBTEMPLATES_USE_CODEMIRROR = True
DBTEMPLATES_USE_REDACTOR = False
DBTEMPLATES_USE_REVERSION = True
DBTEMPLATES_USE_REVERSION_COMPARE = False
DBTEMPLATES_USE_TINYMCE = False
DEBUG = True
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FROM_EMAIL = 'noreply@blacklava.com'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
DJANGO_DEFAULT_TEMPLATE_PATH = '/projects/weblivion/.venv/lib/python3.13/site-packages/django/forms/templates'
DJANGO_TABLES2_TEMPLATE = 'django_tables2/bootstrap5_table.html'
DJ_INCOMING_MIXES_PATH = 'incoming/mixes'
DJ_INCOMING_TRACKS_PATH = 'incoming/tracks'
DJ_OUTPUT_MIXES_PATH = 'mixes'
DJ_OUTPUT_TRACKS_PATH = 'tracks'
DOWN2LEARN_COURSE_ASSIGNMENT_DAYS = 365
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp4dev.isolationism.com'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = None
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORGEJO_OAUTH_SERVER_BASEURL = '********************'
FORMAT_MODULE_PATH = None
FORMS_URLFIELD_ASSUME_HTTPS = False
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HEADLESS_FRONTEND_URLS = {}
IGNORABLE_404_URLS = []
IMAGE_RENDER_KEY = '********************'
INSTALLED_APPS = ['daphne', 'channels', 'dal', 'dal_select2', 'dal_queryset_sequence', 'dbsettings', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.humanize', 'django.contrib.staticfiles', 'django.contrib.sitemaps', 'django.contrib.sites', 'django.forms', 'django_extensions', 'formtools', 'rest_framework', 'rest_framework.authtoken', 'dbbackup', 'import_export', 'corsheaders', 'drf_spectacular', 'dj_rest_auth', 'allauth', 'allauth.account', 'allauth.headless', 'allauth.mfa', 'dj_rest_auth.registration', 'allauth.socialaccount', 'allauth.socialaccount.providers.github', 'allauth.socialaccount.providers.nextcloud', 'storages', 'reversion', 'rolepermissions', 'prose', 'dbtemplates', 'treebeard', 'customwagtailadmin', 'sitetree', 'colorfield', 'mjml', 'user_messages', 'djangocodemirror', 'joeflow', 'django_celery_beat', 'django_celery_results', 'wagtail.contrib.forms', 'wagtail.contrib.redirects', 'wagtail.embeds', 'wagtail.sites', 'wagtail.users', 'wagtail.snippets', 'wagtail.documents', 'wagtail.images', 'wagtail.search', 'wagtail.admin', 'wagtail', 'wagtail.api.v2', 'wagtail.contrib.routable_page', 'wagtail.contrib.settings', 'wagtailautocomplete', 'wagtail_modeladmin', 'django_react_templatetags', 'crispy_forms', 'crispy_bootstrap5', 'django_tables2', 'django_bootstrap5', 'phonenumber_field', 'bootstrap_pagination', 'modelcluster', 'taggit', 'wagtail_meta_preview', 'wagtail_headless_preview', 'wagtailmenus', 'wagtailmedia', 'webpack_loader', 'lti_provider', 'pipit', 'customuser', 'forgejo_provider', 'nextcloud_provider', 'sitesettings', 'customimage', 'customdocument', 'custommedia', 'nextjs', 'slides', 'cms', 'blacklava', 'events', 'core', 'site_ops', 'monoceros', 'useraccount', 'catalog', 'contentset', 'blacklabel', 'partner', 'down2learn']
INTERNAL_IPS = ['0.0.0.0;172.16.0.1']
JOEFLOW_CELERY_QUEUE_NAME = 'celery'
JOEFLOW_TASK_RUNNER = 'joeflow.runner.celery.task_runner'
JWT_SECRET_KEY = '********************'
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('ckb', 'Central Kurdish (Sorani)'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('ms', 'Malay'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('ug', 'Uyghur'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ug', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = ['/projects/weblivion/apps/app-server/app_server/locale']
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'handlers': {'console': {'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'verbose'}, 'file': {'level': 'WARNING', 'class': 'logging.FileHandler', 'filename': '/tmp/django.log', 'formatter': 'verbose'}}, 'formatters': {'verbose': {'format': '{levelname} {asctime} {module} {message}', 'style': '{'}}, 'root': {'handlers': ['console', 'file'], 'level': 'INFO'}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = '/portal/'
LOGIN_URL = '/portal/auth/signin'
LOGOUT_REDIRECT_URL = '/portal/'
LTI_TOOL_CONFIGURATION = {'title': 'down2learn', 'description': 'down2learn application functional prototype', 'launch_url': 'lti/launch/', 'course_aware': False, 'course_navigation': False, 'new_tab': False, 'allow_ta_access': False}
MANAGERS = []
MEDIA_ROOT = '/projects/weblivion/apps/app-server/media'
MEDIA_URL = '/wt/media/'
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
META_PREVIEW_IMAGE_DEFAULT_SIZE = 'fill-1200x640'
MFA_SUPPORTED_TYPES = ['recovery_codes', 'totp']
MFA_TOTP_DIGITS = 6
MFA_TOTP_PERIOD = 120
MFA_TOTP_TOLERANCE = 3
MIDDLEWARE = ['down2learn.middleware.PartnerSiteMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'allauth.account.middleware.AccountMiddleware']
MIGRATION_MODULES = {}
MJML_BACKEND_MODE = 'tcpserver'
MJML_TCPSERVERS = "(('127.0.0.1', 28101),)"
MONOCEROS_API_URL = '********************'
MONTH_DAY_FORMAT = 'F j'
NETLIFY_SITE_ID = 'f3429276-3289-4158-9edc-413a59e5ff5f'
NETLIFY_TOKEN = '********************'
NEXTCLOUD_OAUTH_SERVER_BASEURL = '********************'
NEXTCLOUD_STORAGE = {'url': 'https://nc.isolationism.com', 'username': 'kdub', 'password': '********************', 'directory': '/', 'overwrite_file': True}
NUMBER_GROUPING = 0
NX_ROOT = '/projects/weblivion/dist'
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT = '********************'
PHONENUMBER_DB_FORMAT = 'RFC3966'
PHONENUMBER_DEFAULT_FORMAT = 'RFC3966'
PHONENUMBER_DEFAULT_REGION = 'US'
PREPEND_WWW = False
PROJECT_DIR = '/projects/weblivion/apps/app-server/app_server'
PYLTI_CONFIG = {'consumers': {}}
REACT_COMPONENT_PREFIX = ''
REDIS_CELERY_DB = '1'
REDIS_HOST = 'localhost'
REDIS_PORT = 8003
REDIS_SERVER_URL = 'redis://localhost:8003'
REDIS_URL = 'redis://localhost:8003'
REST_AUTH = '********************'
REST_FRAMEWORK = {'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema', 'DEFAULT_PAGINATION_CLASS': 'blacklava.api.pagination.ReactPagination', 'PAGE_SIZE': 25, 'SEARCH_PARAM': 'find_text', 'ORDERING_PARAM': 'sort_by', 'DEFAULT_FILTER_BACKENDS': ['blacklava.api.filters.SearchFilter', 'blacklava.api.filters.OrderingFilter', 'blacklava.api.filters.DjangoFilterBackend'], 'DEFAULT_AUTHENTICATION_CLASSES': '********************', 'EXCEPTION_HANDLER': 'customuser.serializers.custom_global_exception_handler'}
ROLEPERMISSIONS_MODULE = 'down2learn.roles'
ROLEPERMISSIONS_REGISTER_ADMIN = True
ROOT_URLCONF = 'blacklava.urls'
SECRET_KEY = '********************'
SECRET_KEY_FALLBACKS = '********************'
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_CROSS_ORIGIN_OPENER_POLICY = 'same-origin'
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = "('HTTP_X_FORWARDED_PROTO', 'https')"
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = 'same-origin'
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root@localhost'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'django_session_id'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
SETTINGS_MODULE = 'settings.local'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SIMPLE_JWT = {'ACCESS_TOKEN_LIFETIME': '********************', 'REFRESH_TOKEN_LIFETIME': '********************', 'ROTATE_REFRESH_TOKENS': '********************', 'BLACKLIST_AFTER_ROTATION': True, 'USER_ID_CLAIM': 'user_id', 'SIGNING_KEY': '********************'}
SITETREE_CACHE_NAME = 'sitetree'
SITETREE_MODEL_TREE_ITEM = 'blacklava.NavigationTreeItem'
SITE_ID = 1
SOCIALACCOUNT_EMAIL_REQUIRED = True
SOCIALACCOUNT_EMAIL_VERIFICATION = 'none'
SOCIALACCOUNT_PROVIDERS = {'github': {'SCOPE': ['user:email']}, 'nextcloud': {'SERVER': 'https://nc.isolationism.com'}}
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '********************'
SPECTACULAR_SETTINGS = {'TITLE': 'Content & Data API', 'VERSION': '1.0.0'}
STATICFILES_DIRS = "('/projects/weblivion/dist', '/projects/weblivion/apps/app-server/app_server/blacklava/static')"
STATICFILES_FINDERS = ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder']
STATIC_ROOT = '/projects/weblivion/apps/app-server/static'
STATIC_URL = '/wt/static/'
STORAGES = {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'}, 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}, 'nextcloud': {'BACKEND': 'nextcloud_storage.backend.storage.NextCloudStorage'}}
TAGGIT_CASE_INSENSITIVE = True
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/projects/weblivion/.venv/lib/python3.13/site-packages/django/forms/templates', 'templates', '/projects/weblivion/apps/app-server/app_server/blacklava/templates', '/projects/weblivion/apps/app-server/app_server/core/templates', '/projects/weblivion/apps/app-server/app_server/catalog/templates', '/projects/weblivion/apps/app-server/app_server/search/templates', '/projects/weblivion/apps/app-server/app_server/useraccount/templates'], 'OPTIONS': {'debug': True, 'loaders': ['dbtemplates.loader.Loader', 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader'], 'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'wagtail.contrib.settings.context_processors.settings', 'django_react_templatetags.context_processors.react_context_processor', 'wagtailmenus.context_processors.wagtailmenus', 'pipit.context_processors.settings_context_processor', 'blacklabel.context_processors.default_iconset', 'customuser.context_processors.messages', 'down2learn.context_processors.partner', 'blacklava.context_processors.crispy_form_tags']}}]
TEMP_DIR = '/mnt/ramdisk'
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_S3 = ''
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
VS_CODE_REMOTE_DEBUG = False
WAGTAILADMIN_BASE_URL = 'https://dev.weblivion.com'
WAGTAILDOCS_DOCUMENT_MODEL = 'customdocument.CustomDocument'
WAGTAILIMAGES_AVIF_QUALITY = 50
WAGTAILIMAGES_EXTENSIONS = ['gif', 'jpg', 'jpeg', 'png', 'webp', 'svg']
WAGTAILIMAGES_FORMAT_CONVERSIONS = {'jpg': 'webp', 'jpeg': 'webp', 'png': 'webp', 'webp': 'webp', 'avif': 'avif'}
WAGTAILIMAGES_IMAGE_MODEL = 'customimage.CustomImage'
WAGTAILIMAGES_JPEG_QUALITY = 50
WAGTAILIMAGES_MAX_UPLOAD_SIZE = 20971520
WAGTAILIMAGES_WEBP_QUALITY = 50
WAGTAILMEDIA = {'MEDIA_MODEL': 'custommedia.CustomMedia', 'MEDIA_FORM_BASE': '', 'AUDIO_EXTENSIONS': ['aac', 'aiff', 'flac', 'm4a', 'm4b', 'mp3', 'ogg', 'wav'], 'VIDEO_EXTENSIONS': ['avi', 'h264', 'm4v', 'mkv', 'mov', 'mp4', 'mpeg', 'mpg', 'ogv', 'webm']}
WAGTAILMENUS_MAIN_MENU_ITEMS_RELATED_NAME = 'custom_menu_items'
WAGTAILSEARCH_BACKENDS = {'default': {'BACKEND': 'wagtail.search.backends.database'}}
WAGTAIL_ALLOW_UNICODE_SLUGS = False
WAGTAIL_BUNDLE = 'wagtail-bundle'
WAGTAIL_FRONTEND_LOGIN_URL = '/portal/auth/signin'
WAGTAIL_HEADLESS_PREVIEW = {'LIVE_PREVIEW': True, 'CLIENT_URLS': {'default': '/api/preview/'}}
WAGTAIL_SITE_NAME = 'Blacklava'
WEBPACK_LOADER = {'DEFAULT': {}, 'app-server-bundle': {'BUNDLE_DIR_NAME': 'app-server-bundle', 'CACHE': True, 'STATS_FILE': '/projects/weblivion/dist/apps/app-server-bundle/webpack-stats.json', 'POLL_INTERVAL': 1, 'IGNORE': ['.+\\.hot-update.js', '.+\\.map']}, 'wagtail-bundle': {'BUNDLE_DIR_NAME': 'wagtail-bundle', 'CACHE': True, 'STATS_FILE': '/projects/weblivion/dist/libs/wagtail-bundle/webpack-stats.json', 'POLL_INTERVAL': 1, 'IGNORE': ['.+\\.hot-update.js', '.+\\.map']}}
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = 'SAMEORIGIN'
YEAR_MONTH_FORMAT = 'F Y'
You’re seeing this error because you have DEBUG = True in your
Django settings file. Change that to False, and Django will
display a standard page generated by the handler for this status code.