Skip to content

Commit

Permalink
feat: split settings for packaging
Browse files Browse the repository at this point in the history
  • Loading branch information
Yelinz committed Apr 19, 2023
1 parent ed23562 commit 7827984
Show file tree
Hide file tree
Showing 7 changed files with 86 additions and 86 deletions.
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
ENV HOME=/home/alexandria

ENV PYTHONUNBUFFERED=1
ENV DJANGO_SETTINGS_MODULE alexandria.settings
ENV DJANGO_SETTINGS_MODULE alexandria.settings.django
ENV APP_HOME=/app
ENV UWSGI_INI /app/uwsgi.ini

Expand Down
1 change: 1 addition & 0 deletions alexandria/settings/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from .django import *
79 changes: 79 additions & 0 deletions alexandria/settings/alexandria.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import os
import re

import environ

env = environ.Env()
django_root = environ.Path(__file__) - 2

ENV_FILE = env.str("ENV_FILE", default=django_root(".env"))
if os.path.exists(ENV_FILE):
environ.Env.read_env(ENV_FILE)

# per default production is enabled for security reasons
# for development create .env file with ENV=development
ENV = env.str("ENV", "production")


def default(default_dev=env.NOTSET, default_prod=env.NOTSET):
"""Environment aware default."""
return default_prod if ENV == "production" else default_dev


ADMIN_USERNAME = env.str("ADMIN_USERNAME", default="admin")

# Authentication
OIDC_OP_USER_ENDPOINT = env.str("OIDC_OP_USER_ENDPOINT", default=None)
OIDC_OP_TOKEN_ENDPOINT = "not supported in alexandria, but a value is needed"
OIDC_VERIFY_SSL = env.bool("OIDC_VERIFY_SSL", default=True)
OIDC_USERNAME_CLAIM = env.str("OIDC_USERNAME_CLAIM", default="sub")
OIDC_GROUPS_CLAIM = env.str("OIDC_GROUPS_CLAIM", default="alexandria_groups")
OIDC_BEARER_TOKEN_REVALIDATION_TIME = env.int(
"OIDC_BEARER_TOKEN_REVALIDATION_TIME", default=0
)
OIDC_OP_INTROSPECT_ENDPOINT = env.str("OIDC_OP_INTROSPECT_ENDPOINT", default=None)
OIDC_RP_CLIENT_ID = env.str("OIDC_RP_CLIENT_ID", default=None)
OIDC_RP_CLIENT_SECRET = env.str("OIDC_RP_CLIENT_SECRET", default=None)

DEV_AUTH_BACKEND = env.bool("DEV_AUTH_BACKEND", default=False)
OIDC_DRF_AUTH_BACKEND = env.str(
"OIDC_DRF_AUTH_BACKEND",
default="alexandria.oidc_auth.authentication.AlexandriaAuthenticationBackend",
)
if DEV_AUTH_BACKEND:
OIDC_DRF_AUTH_BACKEND = (
"alexandria.oidc_auth.authentication.DevelopmentAuthenticationBackend"
)


# Extensions

VISIBILITY_CLASSES = env.list(
"VISIBILITY_CLASSES", default=default(["alexandria.core.visibilities.Any"])
)

PERMISSION_CLASSES = env.list(
"PERMISSION_CLASSES", default=default(["alexandria.core.permissions.AllowAny"])
)
VALIDATION_CLASSES = env.list("VALIDATION_CLASSES", default=[])


# Storage
MEDIA_STORAGE_SERVICE = env.str("MEDIA_STORAGE_SERVICE", default="minio")
MINIO_STORAGE_ENDPOINT = env.str("MINIO_STORAGE_ENDPOINT", default="minio:9000")
MINIO_STORAGE_ACCESS_KEY = env.str("MINIO_STORAGE_ACCESS_KEY", default="minio")
MINIO_STORAGE_SECRET_KEY = env.str("MINIO_STORAGE_SECRET_KEY", default="minio123")
MINIO_STORAGE_USE_HTTPS = env.str("MINIO_STORAGE_USE_HTTPS", default=False)
MINIO_STORAGE_MEDIA_BUCKET_NAME = env.str(
"MINIO_STORAGE_MEDIA_BUCKET_NAME", default="alexandria-media"
)
MINIO_STORAGE_AUTO_CREATE_MEDIA_BUCKET = env.str(
"MINIO_STORAGE_AUTO_CREATE_MEDIA_BUCKET", default=True
)
MINIO_PRESIGNED_TTL_MINUTES = env.str("MINIO_PRESIGNED_TTL_MINUTES", default=15)


# Thumbnails
ENABLE_THUMBNAIL_GENERATION = env.bool("ENABLE_THUMBNAIL_GENERATION", default=True)
THUMBNAIL_WIDTH = env.int("THUMBNAIL_WIDTH", default=None)
THUMBNAIL_HEIGHT = env.int("THUMBNAIL_HEIGHT", default=None)
84 changes: 2 additions & 82 deletions alexandria/settings.py → alexandria/settings/django.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,9 @@
import os
import re

import environ
from django.conf import global_settings

env = environ.Env()
django_root = environ.Path(__file__) - 2

ENV_FILE = env.str("ENV_FILE", default=django_root(".env"))
if os.path.exists(ENV_FILE):
environ.Env.read_env(ENV_FILE)

# per default production is enabled for security reasons
# for development create .env file with ENV=development
ENV = env.str("ENV", "production")


def default(default_dev=env.NOTSET, default_prod=env.NOTSET):
"""Environment aware default."""
return default_prod if ENV == "production" else default_dev
from .alexandria import * # noqa
from .alexandria import default, django_root, env, environ


SECRET_KEY = env.str("SECRET_KEY", default=default("uuuuuuuuuu"))
Expand Down Expand Up @@ -98,66 +83,6 @@ def parse_languages(languages):

LOCALIZED_FIELDS_EXPERIMENTAL = True


ADMIN_USERNAME = env.str("ADMIN_USERNAME", default="admin")

# Authentication
OIDC_OP_USER_ENDPOINT = env.str("OIDC_OP_USER_ENDPOINT", default=None)
OIDC_OP_TOKEN_ENDPOINT = "not supported in alexandria, but a value is needed"
OIDC_VERIFY_SSL = env.bool("OIDC_VERIFY_SSL", default=True)
OIDC_USERNAME_CLAIM = env.str("OIDC_USERNAME_CLAIM", default="sub")
OIDC_GROUPS_CLAIM = env.str("OIDC_GROUPS_CLAIM", default="alexandria_groups")
OIDC_BEARER_TOKEN_REVALIDATION_TIME = env.int(
"OIDC_BEARER_TOKEN_REVALIDATION_TIME", default=0
)
OIDC_OP_INTROSPECT_ENDPOINT = env.str("OIDC_OP_INTROSPECT_ENDPOINT", default=None)
OIDC_RP_CLIENT_ID = env.str("OIDC_RP_CLIENT_ID", default=None)
OIDC_RP_CLIENT_SECRET = env.str("OIDC_RP_CLIENT_SECRET", default=None)

DEV_AUTH_BACKEND = env.bool("DEV_AUTH_BACKEND", default=False)
OIDC_DRF_AUTH_BACKEND = env.str(
"OIDC_DRF_AUTH_BACKEND",
default="alexandria.oidc_auth.authentication.AlexandriaAuthenticationBackend",
)
if DEV_AUTH_BACKEND:
OIDC_DRF_AUTH_BACKEND = (
"alexandria.oidc_auth.authentication.DevelopmentAuthenticationBackend"
)


# Extensions

VISIBILITY_CLASSES = env.list(
"VISIBILITY_CLASSES", default=default(["alexandria.core.visibilities.Any"])
)

PERMISSION_CLASSES = env.list(
"PERMISSION_CLASSES", default=default(["alexandria.core.permissions.AllowAny"])
)
VALIDATION_CLASSES = env.list("VALIDATION_CLASSES", default=[])


# Storage
MEDIA_STORAGE_SERVICE = env.str("MEDIA_STORAGE_SERVICE", default="minio")
MINIO_STORAGE_ENDPOINT = env.str("MINIO_STORAGE_ENDPOINT", default="minio:9000")
MINIO_STORAGE_ACCESS_KEY = env.str("MINIO_STORAGE_ACCESS_KEY", default="minio")
MINIO_STORAGE_SECRET_KEY = env.str("MINIO_STORAGE_SECRET_KEY", default="minio123")
MINIO_STORAGE_USE_HTTPS = env.str("MINIO_STORAGE_USE_HTTPS", default=False)
MINIO_STORAGE_MEDIA_BUCKET_NAME = env.str(
"MINIO_STORAGE_MEDIA_BUCKET_NAME", default="alexandria-media"
)
MINIO_STORAGE_AUTO_CREATE_MEDIA_BUCKET = env.str(
"MINIO_STORAGE_AUTO_CREATE_MEDIA_BUCKET", default=True
)
MINIO_PRESIGNED_TTL_MINUTES = env.str("MINIO_PRESIGNED_TTL_MINUTES", default=15)


# Thumbnails
ENABLE_THUMBNAIL_GENERATION = env.bool("ENABLE_THUMBNAIL_GENERATION", default=True)
THUMBNAIL_WIDTH = env.int("THUMBNAIL_WIDTH", default=None)
THUMBNAIL_HEIGHT = env.int("THUMBNAIL_HEIGHT", default=None)


REST_FRAMEWORK = {
"EXCEPTION_HANDLER": "rest_framework_json_api.exceptions.exception_handler",
"DEFAULT_PAGINATION_CLASS": "rest_framework_json_api.pagination.JsonApiPageNumberPagination",
Expand Down Expand Up @@ -193,11 +118,6 @@ def parse_languages(languages):
"TEST_REQUEST_DEFAULT_FORMAT": "vnd.api+json",
}

JSON_API_FORMAT_FIELD_NAMES = "dasherize"
JSON_API_FORMAT_TYPES = "dasherize"
JSON_API_PLURALIZE_TYPES = True


# Anonymous writing
ALLOW_ANONYMOUS_WRITE = env.bool("ALLOW_ANONYMOUS_WRITE", default=False)

Expand Down
2 changes: 1 addition & 1 deletion alexandria/wsgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "alexandria.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "alexandria.settings.django")

application = get_wsgi_application()
2 changes: 1 addition & 1 deletion manage.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import sys

if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "alexandria.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "alexandria.settings.django")
from django.core.management import execute_from_command_line

execute_from_command_line(sys.argv)
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ line_length = 88

[tool.pytest.ini_options]
addopts = "--reuse-db --randomly-seed=1521188766"
DJANGO_SETTINGS_MODULE = "alexandria.settings"
DJANGO_SETTINGS_MODULE = "alexandria.settings.django"
django_debug_mode = true
filterwarnings = [
"ignore::DeprecationWarning",
Expand Down

0 comments on commit 7827984

Please sign in to comment.