Skip to content

Commit 00b8d28

Browse files
authored
Merge pull request #187 from maykinmedia/feature/streamline-envvars
🔧 Streamline environment variables
2 parents 706adbc + 0add466 commit 00b8d28

File tree

8 files changed

+286
-140
lines changed

8 files changed

+286
-140
lines changed
+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import factory
2+
3+
4+
class UserFactory(factory.django.DjangoModelFactory):
5+
username = factory.Sequence(lambda n: f"user-{n}")
6+
password = factory.PostGenerationMethodCall("set_password", "secret")
7+
8+
class Meta:
9+
model = "accounts.User"
10+
11+
12+
class SuperUserFactory(UserFactory):
13+
is_staff = True
14+
is_superuser = True

src/openklant/conf/base.py

+71-17
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import os
2+
import warnings
23

34
from django.urls import reverse_lazy
45

56
import sentry_sdk
7+
from corsheaders.defaults import default_headers as default_cors_headers
68
from log_outgoing_requests.formatters import HttpFormatter
79

810
from .api import * # noqa
@@ -31,6 +33,7 @@
3133

3234
# = domains we're running on
3335
ALLOWED_HOSTS = config("ALLOWED_HOSTS", default="", split=True)
36+
USE_X_FORWARDED_HOST = config("USE_X_FORWARDED_HOST", default=False)
3437

3538
IS_HTTPS = config("IS_HTTPS", default=not DEBUG)
3639

@@ -54,7 +57,7 @@
5457
#
5558
DATABASES = {
5659
"default": {
57-
"ENGINE": config("DB_ENGINE", "django.db.backends.postgresql"),
60+
"ENGINE": "django.db.backends.postgresql",
5861
"NAME": config("DB_NAME", "openklant"),
5962
"USER": config("DB_USER", "openklant"),
6063
"PASSWORD": config("DB_PASSWORD", "openklant"),
@@ -84,7 +87,14 @@
8487
"IGNORE_EXCEPTIONS": True,
8588
},
8689
},
87-
"oidc": {"BACKEND": "django.core.cache.backends.locmem.LocMemCache"},
90+
"oidc": {
91+
"BACKEND": "django_redis.cache.RedisCache",
92+
"LOCATION": f"redis://{config('CACHE_OIDC', 'localhost:6379/0')}",
93+
"OPTIONS": {
94+
"CLIENT_CLASS": "django_redis.client.DefaultClient",
95+
"IGNORE_EXCEPTIONS": True,
96+
},
97+
},
8898
}
8999

90100

@@ -219,16 +229,26 @@
219229
EMAIL_USE_TLS = config("EMAIL_USE_TLS", default=False)
220230
EMAIL_TIMEOUT = 10
221231

222-
DEFAULT_FROM_EMAIL = "openklant@example.com"
232+
DEFAULT_FROM_EMAIL = config("DEFAULT_FROM_EMAIL", "openklant@example.com")
223233

224234
#
225235
# LOGGING
226236
#
227237
LOG_STDOUT = config("LOG_STDOUT", default=False)
228-
LOG_REQUESTS = config("LOG_REQUESTS", default=True)
238+
LOG_LEVEL = config("LOG_LEVEL", default="WARNING")
239+
LOG_QUERIES = config("LOG_QUERIES", default=False)
240+
LOG_REQUESTS = config("LOG_REQUESTS", default=False)
241+
if LOG_QUERIES and not DEBUG:
242+
warnings.warn(
243+
"Requested LOG_QUERIES=1 but DEBUG is false, no query logs will be emited.",
244+
RuntimeWarning,
245+
)
229246

230247
LOGGING_DIR = os.path.join(BASE_DIR, "log")
231248

249+
_root_handlers = ["console"] if LOG_STDOUT else ["project"]
250+
_django_handlers = ["console"] if LOG_STDOUT else ["django"]
251+
232252
LOGGING = {
233253
"version": 1,
234254
"disable_existing_loggers": False,
@@ -241,6 +261,7 @@
241261
"performance": {
242262
"format": "%(asctime)s %(process)d | %(thread)d | %(message)s",
243263
},
264+
"db": {"format": "%(asctime)s | %(message)s"},
244265
"outgoing_requests": {"()": HttpFormatter},
245266
},
246267
"filters": {
@@ -261,6 +282,11 @@
261282
"class": "logging.StreamHandler",
262283
"formatter": "timestamped",
263284
},
285+
"console_db": {
286+
"level": "DEBUG",
287+
"class": "logging.StreamHandler",
288+
"formatter": "db",
289+
},
264290
"django": {
265291
"level": "DEBUG",
266292
"class": "logging.handlers.RotatingFileHandler",
@@ -296,25 +322,30 @@
296322
},
297323
},
298324
"loggers": {
325+
"": {
326+
"handlers": _root_handlers,
327+
"level": "ERROR",
328+
"propagate": False,
329+
},
299330
"openklant": {
300-
"handlers": ["project"] if not LOG_STDOUT else ["console"],
301-
"level": "INFO",
331+
"handlers": _root_handlers,
332+
"level": LOG_LEVEL,
302333
"propagate": True,
303334
},
335+
"mozilla_django_oidc": {
336+
"handlers": _root_handlers,
337+
"level": LOG_LEVEL,
338+
},
304339
"django.request": {
305-
"handlers": ["django"] if not LOG_STDOUT else ["console"],
306-
"level": "ERROR",
340+
"handlers": _django_handlers,
341+
"level": LOG_LEVEL,
307342
"propagate": True,
308343
},
309344
"django.template": {
310345
"handlers": ["console"],
311346
"level": "INFO",
312347
"propagate": True,
313348
},
314-
"mozilla_django_oidc": {
315-
"handlers": ["project"],
316-
"level": "DEBUG",
317-
},
318349
"log_outgoing_requests": {
319350
"handlers": (
320351
["log_outgoing_requests", "save_outgoing_requests"]
@@ -324,6 +355,11 @@
324355
"level": "DEBUG",
325356
"propagate": True,
326357
},
358+
"django.db.backends": {
359+
"handlers": ["console_db"] if LOG_QUERIES else [],
360+
"level": "DEBUG",
361+
"propagate": False,
362+
},
327363
},
328364
}
329365

@@ -454,6 +490,19 @@
454490
"REMOTE_ADDR",
455491
)
456492

493+
#
494+
# DJANGO-CORS-MIDDLEWARE
495+
#
496+
CORS_ALLOW_ALL_ORIGINS = config("CORS_ALLOW_ALL_ORIGINS", default=False)
497+
CORS_ALLOWED_ORIGINS = config("CORS_ALLOWED_ORIGINS", split=True, default=[])
498+
CORS_ALLOWED_ORIGIN_REGEXES = config(
499+
"CORS_ALLOWED_ORIGIN_REGEXES", split=True, default=[]
500+
)
501+
# Authorization is included in default_cors_headers
502+
CORS_ALLOW_HEADERS = list(default_cors_headers) + config(
503+
"CORS_EXTRA_ALLOW_HEADERS", split=True, default=[]
504+
)
505+
457506
#
458507
# RAVEN/SENTRY - error monitoring
459508
#
@@ -472,17 +521,24 @@
472521
send_default_pii=True,
473522
)
474523

524+
#
475525
# Elastic APM
476-
ELASTIC_APM_SERVER_URL = os.getenv("ELASTIC_APM_SERVER_URL", None)
526+
#
527+
ELASTIC_APM_SERVER_URL = config("ELASTIC_APM_SERVER_URL", None)
477528
ELASTIC_APM = {
478-
"SERVICE_NAME": f"openklant {ENVIRONMENT}",
529+
"SERVICE_NAME": f"Open Klant - {ENVIRONMENT}",
479530
"SECRET_TOKEN": config("ELASTIC_APM_SECRET_TOKEN", "default"),
480531
"SERVER_URL": ELASTIC_APM_SERVER_URL,
532+
"TRANSACTION_SAMPLE_RATE": config("ELASTIC_APM_TRANSACTION_SAMPLE_RATE", 0.1),
481533
}
482534
if not ELASTIC_APM_SERVER_URL:
483535
ELASTIC_APM["ENABLED"] = False
484536
ELASTIC_APM["SERVER_URL"] = "http://localhost:8200"
485-
537+
else:
538+
MIDDLEWARE = ["elasticapm.contrib.django.middleware.TracingMiddleware"] + MIDDLEWARE
539+
INSTALLED_APPS = INSTALLED_APPS + [
540+
"elasticapm.contrib.django",
541+
]
486542

487543
#
488544
# Mozilla Django OIDC DB settings
@@ -497,8 +553,6 @@
497553
LOG_OUTGOING_REQUESTS_EMIT_BODY = True
498554
LOG_OUTGOING_REQUESTS_DB_SAVE = config("LOG_OUTGOING_REQUESTS_DB_SAVE", default=False)
499555
LOG_OUTGOING_REQUESTS_RESET_DB_SAVE_AFTER = None
500-
501-
# Custom settings
502556
LOG_OUTGOING_REQUESTS_MAX_AGE = config(
503557
"LOG_OUTGOING_REQUESTS_MAX_AGE", default=7
504558
) # number of days

src/openklant/conf/dev.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,6 @@
4141
"level": "DEBUG",
4242
"propagate": True,
4343
},
44-
"django.db.backends": {
45-
"handlers": ["django"],
46-
"level": "DEBUG",
47-
"propagate": False,
48-
},
4944
"performance": {
5045
"handlers": ["console"],
5146
"level": "INFO",
@@ -63,6 +58,9 @@
6358
}
6459
)
6560

61+
if not LOG_QUERIES:
62+
LOGGING["loggers"]["django.db.backends"]["handlers"] = ["django"]
63+
6664
# in memory cache and django-axes don't get along.
6765
# https://django-axes.readthedocs.io/en/latest/configuration.html#known-configuration-problems
6866
CACHES = {

src/openklant/conf/docker.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import os
22

3-
os.environ.setdefault("DB_USER", os.getenv("DATABASE_USER", "postgres"))
4-
os.environ.setdefault("DB_NAME", os.getenv("DATABASE_NAME", "postgres"))
5-
os.environ.setdefault("DB_PASSWORD", os.getenv("DATABASE_PASSWORD", ""))
6-
os.environ.setdefault("DB_HOST", os.getenv("DATABASE_HOST", "db"))
3+
from .includes.environ import config
4+
5+
os.environ.setdefault("DB_USER", config("DATABASE_USER", "postgres"))
6+
os.environ.setdefault("DB_NAME", config("DATABASE_NAME", "postgres"))
7+
os.environ.setdefault("DB_PASSWORD", config("DATABASE_PASSWORD", ""))
8+
os.environ.setdefault("DB_HOST", config("DATABASE_HOST", "db"))
79

810
os.environ.setdefault("ENVIRONMENT", "docker")
911
os.environ.setdefault("LOG_STDOUT", "yes")

src/openklant/conf/production.py

-12
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,3 @@
5252
# Custom settings overrides
5353
#
5454
SHOW_ALERT = False
55-
56-
##############################
57-
# #
58-
# 3RD PARTY LIBRARY SETTINGS #
59-
# #
60-
##############################
61-
62-
# APM
63-
MIDDLEWARE = ["elasticapm.contrib.django.middleware.TracingMiddleware"] + MIDDLEWARE
64-
INSTALLED_APPS = INSTALLED_APPS + [
65-
"elasticapm.contrib.django",
66-
]

src/openklant/templates/sniplates/form.html

-102
This file was deleted.

0 commit comments

Comments
 (0)