aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/settings.py
diff options
context:
space:
mode:
authorGravatar hedy <[email protected]>2023-12-14 20:28:17 +0800
committerGravatar hedy <[email protected]>2023-12-14 20:28:17 +0800
commit449c08fd5459b2f804dbf825086ec1dd0f244d8a (patch)
treee4589cb227cdb2e611bcbf9b02ea481fe24cdb34 /pydis_site/settings.py
parentResize theme switch (diff)
parentMerge pull request #1173 from python-discord/dependabot/pip/sentry-sdk-1.39.0 (diff)
Fix all conflicts
hopefully I dont have to do this again
Diffstat (limited to 'pydis_site/settings.py')
-rw-r--r--pydis_site/settings.py115
1 files changed, 85 insertions, 30 deletions
diff --git a/pydis_site/settings.py b/pydis_site/settings.py
index d4e5a4a8..b5677029 100644
--- a/pydis_site/settings.py
+++ b/pydis_site/settings.py
@@ -10,31 +10,56 @@ For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.1/ref/settings/
"""
+import logging
import os
import secrets
import sys
+import warnings
from pathlib import Path
from socket import gethostbyname, gethostname
import environ
import sentry_sdk
+from sentry_sdk.integrations.logging import LoggingIntegration
from sentry_sdk.integrations.django import DjangoIntegration
-from pydis_site.constants import GIT_SHA
-
env = environ.Env(
DEBUG=(bool, False),
SITE_DSN=(str, ""),
BUILDING_DOCKER=(bool, False),
STATIC_BUILD=(bool, False),
+ GIT_SHA=(str, 'development'),
+ TIMEOUT_PERIOD=(int, 5),
+ GITHUB_TOKEN=(str, None),
+ GITHUB_APP_ID=(str, None),
+ GITHUB_APP_KEY=(str, None),
)
-sentry_sdk.init(
- dsn=env('SITE_DSN'),
- integrations=[DjangoIntegration()],
- send_default_pii=True,
- release=f"site@{GIT_SHA}"
-)
+GIT_SHA = env("GIT_SHA")
+GITHUB_API = "https://api.github.com"
+GITHUB_TOKEN = env("GITHUB_TOKEN")
+GITHUB_APP_ID = env("GITHUB_APP_ID")
+GITHUB_APP_KEY = env("GITHUB_APP_KEY")
+GITHUB_TIMESTAMP_FORMAT = "%Y-%m-%dT%H:%M:%SZ"
+"""The datetime string format GitHub uses."""
+
+STATIC_BUILD: bool = env("STATIC_BUILD")
+
+if GITHUB_APP_KEY and (key_file := Path(GITHUB_APP_KEY)).is_file():
+ # Allow the OAuth key to be loaded from a file
+ GITHUB_APP_KEY = key_file.read_text(encoding="utf-8")
+
+if not STATIC_BUILD:
+ sentry_sdk.init(
+ dsn=env('SITE_DSN'),
+ integrations=[DjangoIntegration(), LoggingIntegration(level=logging.DEBUG, event_level=logging.ERROR)],
+ send_default_pii=True,
+ release=f"site@{GIT_SHA}",
+ profiles_sample_rate=1.0,
+ enable_tracing=True,
+ enable_db_query_source=True,
+ db_query_source_threshold_ms=100, # Queries slower that 100ms will include the source in the event
+ )
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
@@ -48,10 +73,26 @@ if DEBUG:
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=['*'])
SECRET_KEY = "yellow polkadot bikini" # noqa: S105
+ # Prevent verbose warnings emitted when passing a non-timezone aware
+ # datetime object to the database, whilst we have time zone support
+ # active. See the Django documentation for more details:
+ # https://docs.djangoproject.com/en/dev/topics/i18n/timezones/
+ warnings.filterwarnings(
+ 'error', r"DateTimeField .* received a naive datetime",
+ RuntimeWarning, r'django\.db\.models\.fields',
+ )
+
elif 'CI' in os.environ:
ALLOWED_HOSTS = ['*']
SECRET_KEY = secrets.token_urlsafe(32)
+ # See above. We run with `CI=true`, but debug unset in GitHub Actions,
+ # so we also want to filter it there.
+ warnings.filterwarnings(
+ 'error', r"DateTimeField .* received a naive datetime",
+ RuntimeWarning, r'django\.db\.models\.fields',
+ )
+
else:
ALLOWED_HOSTS = env.list(
'ALLOWED_HOSTS',
@@ -69,7 +110,7 @@ else:
NON_STATIC_APPS = [
'pydis_site.apps.api',
'pydis_site.apps.staff',
-] if not env("STATIC_BUILD") else []
+] if not STATIC_BUILD else []
INSTALLED_APPS = [
*NON_STATIC_APPS,
@@ -98,25 +139,29 @@ INSTALLED_APPS = [
if not env("BUILDING_DOCKER"):
INSTALLED_APPS.append("django_prometheus")
-NON_STATIC_MIDDLEWARE = [
- 'django_prometheus.middleware.PrometheusBeforeMiddleware',
-] if not env("STATIC_BUILD") else []
-
-# Ensure that Prometheus middlewares are first and last here.
-MIDDLEWARE = [
- *NON_STATIC_MIDDLEWARE,
-
- 'django.middleware.security.SecurityMiddleware',
- 'whitenoise.middleware.WhiteNoiseMiddleware',
- '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',
-
- 'django_prometheus.middleware.PrometheusAfterMiddleware'
-]
+if STATIC_BUILD:
+ # The only middleware required during static builds
+ MIDDLEWARE = [
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.contrib.messages.middleware.MessageMiddleware',
+ ]
+else:
+ # Ensure that Prometheus middlewares are first and last here.
+ MIDDLEWARE = [
+ 'django_prometheus.middleware.PrometheusBeforeMiddleware',
+
+ 'django.middleware.security.SecurityMiddleware',
+ 'whitenoise.middleware.WhiteNoiseMiddleware',
+ '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',
+
+ 'django_prometheus.middleware.PrometheusAfterMiddleware'
+ ]
ROOT_URLCONF = 'pydis_site.urls'
@@ -145,7 +190,7 @@ WSGI_APPLICATION = 'pydis_site.wsgi.application'
DATABASES = {
'default': env.db(),
'metricity': env.db('METRICITY_DB_URL'),
-} if not env("STATIC_BUILD") else {}
+} if not STATIC_BUILD else {}
# Password validation
# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators
@@ -170,7 +215,6 @@ AUTH_PASSWORD_VALIDATORS = [
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
-USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
@@ -197,6 +241,9 @@ if DEBUG:
else:
PARENT_HOST = env('PARENT_HOST', default='pythondiscord.com')
+# Django Model Configuration
+DEFAULT_AUTO_FIELD = "django.db.models.AutoField"
+
# Django REST framework
# https://www.django-rest-framework.org
REST_FRAMEWORK = {
@@ -313,3 +360,11 @@ CONTENT_PAGES_PATH = Path(BASE_DIR, "pydis_site", "apps", "content", "resources"
# Path for redirection links
REDIRECTIONS_PATH = Path(BASE_DIR, "pydis_site", "apps", "redirect", "redirects.yaml")
+
+# How long to wait for synchronous requests before timing out
+TIMEOUT_PERIOD = env("TIMEOUT_PERIOD")
+
+# Source files url for 'Edit on GitHub' link on content articles
+CONTENT_SRC_URL = (
+ "https://github.com/python-discord/site/tree/main/pydis_site/apps/content/resources/"
+)