You've already forked hotpocket
BTHLABS-64: Support for customized environments
Co-authored-by: Tomek Wójcik <labs@tomekwojcik.pl> Co-committed-by: Tomek Wójcik <labs@tomekwojcik.pl>
This commit is contained in:
@@ -1,12 +1,25 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from hotpocket_backend.apps.core.conf import settings
|
||||
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class CoreConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
label = 'core'
|
||||
name = 'hotpocket_backend.apps.core'
|
||||
verbose_name = _('Core')
|
||||
|
||||
def ready(self):
|
||||
LOGGER.info(
|
||||
'HotPocket Backend ready: env=`%s` app=`%s`',
|
||||
settings.ENV.name,
|
||||
settings.APP.name,
|
||||
)
|
||||
|
||||
@@ -6,7 +6,7 @@ import typing
|
||||
|
||||
from hotpocket_backend.secrets.admin import AdminSecrets
|
||||
from hotpocket_backend.secrets.webapp import WebAppSecrets
|
||||
from hotpocket_common.constants import App, Env
|
||||
from hotpocket_common.constants import App, Environment
|
||||
|
||||
|
||||
class PSettings(typing.Protocol):
|
||||
@@ -16,7 +16,7 @@ class PSettings(typing.Protocol):
|
||||
SECRET_KEY: str
|
||||
|
||||
APP: App
|
||||
ENV: Env
|
||||
ENV: Environment
|
||||
|
||||
SECRETS: AdminSecrets | WebAppSecrets
|
||||
|
||||
@@ -32,3 +32,9 @@ class PSettings(typing.Protocol):
|
||||
UPLOADS_PATH: pathlib.Path
|
||||
|
||||
AUTH_KEY_TTL: int
|
||||
|
||||
UI_BASE_HEAD_INCLUDES: list
|
||||
UI_BASE_SCRIPT_INCLUDES: list
|
||||
|
||||
UI_PAGE_HEAD_INCLUDES: list
|
||||
UI_PAGE_SCRIPT_INCLUDES: list
|
||||
|
||||
@@ -82,3 +82,21 @@ def appearance_settings(request: HttpRequest) -> dict:
|
||||
return {
|
||||
'APPEARANCE_SETTINGS': result,
|
||||
}
|
||||
|
||||
|
||||
def base_includes(request: HttpRequest) -> dict:
|
||||
return {
|
||||
'BASE_INCLUDES': {
|
||||
'head': settings.UI_BASE_HEAD_INCLUDES,
|
||||
'script': settings.UI_BASE_SCRIPT_INCLUDES,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def page_includes(request: HttpRequest) -> dict:
|
||||
return {
|
||||
'PAGE_INCLUDES': {
|
||||
'head': settings.UI_PAGE_HEAD_INCLUDES,
|
||||
'script': settings.UI_PAGE_SCRIPT_INCLUDES,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -31,11 +31,17 @@
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{% static 'ui/img/icon-32.png' %}">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="{% static 'ui/img/icon-16.png' %}">
|
||||
<link rel="manifest" href="{% url 'ui.meta.manifest_json' %}">
|
||||
{% for head_include in BASE_INCLUDES.head %}
|
||||
{% include head_include %}
|
||||
{% endfor %}
|
||||
{% block page_head %}{% endblock %}
|
||||
</head>
|
||||
<body class="{% block body_class %}{% endblock %}" hx-headers='{"x-csrftoken": "{{ csrf_token }}"}'>
|
||||
{% block body %}
|
||||
{% endblock %}
|
||||
{% block scripts %}{% endblock %}
|
||||
{% for script_include in BASE_INCLUDES.script %}
|
||||
{% include script_include %}
|
||||
{% endfor %}
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -2,6 +2,12 @@
|
||||
|
||||
{% load i18n static ui %}
|
||||
|
||||
{% block page_head %}
|
||||
{% for head_include in PAGE_INCLUDES.head %}
|
||||
{% include head_include %}
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<nav id="navbar" class="navbar navbar-expand-sm bg-body-tertiary fixed-top">
|
||||
<div class="container">
|
||||
@@ -153,7 +159,11 @@
|
||||
<script src="{% static 'ui/js/hotpocket-backend.ui.BrowseAccountAppsView.js' %}" type="text/javascript"></script>
|
||||
<script src="{% static 'ui/js/hotpocket-backend.ui.InlineCreateSaveForm.js' %}" type="text/javascript"></script>
|
||||
<script src="{% static 'ui/js/hotpocket-backend.ui.PasteboardLink.js' %}" type="text/javascript"></script>
|
||||
{% block page_scripts %}{% endblock %}
|
||||
{% for script_include in PAGE_INCLUDES.script %}
|
||||
{% include script_include %}
|
||||
{% endfor %}
|
||||
{% block page_scripts %}
|
||||
{% endblock %}
|
||||
<script type="text/javascript">
|
||||
(() => {
|
||||
window.HotPocket.run({
|
||||
|
||||
@@ -19,8 +19,12 @@ ALLOWED_HOSTS = []
|
||||
ENV = Env(os.getenv('HOTPOCKET_BACKEND_ENV', None))
|
||||
APP = App(os.getenv('HOTPOCKET_BACKEND_APP', None))
|
||||
|
||||
HOTPOCKET_BACKEND_SECRETS_PACKAGE = os.getenv(
|
||||
'HOTPOCKET_BACKEND_SECRETS_PACKAGE', 'hotpocket_backend.secrets',
|
||||
)
|
||||
|
||||
SECRETS: BaseSecrets = load_secrets(
|
||||
'hotpocket_backend.secrets', ENV.value, APP.value,
|
||||
HOTPOCKET_BACKEND_SECRETS_PACKAGE, ENV.value, APP.value,
|
||||
)
|
||||
|
||||
SECRET_KEY = SECRETS.SECRET_KEY
|
||||
|
||||
@@ -4,13 +4,15 @@ from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from hotpocket_common.constants import App, Environment
|
||||
|
||||
BASE_DIR = Path(__file__).resolve().parent.parent.parent
|
||||
|
||||
DEBUG = False
|
||||
ALLOWED_HOSTS = []
|
||||
|
||||
ENV = 'build'
|
||||
APP = 'backend'
|
||||
ENV = Environment('BUILD', 'build')
|
||||
APP = App.WEBAPP
|
||||
|
||||
INSTALLED_APPS = [
|
||||
'django.contrib.auth',
|
||||
|
||||
@@ -31,6 +31,11 @@ MIDDLEWARE = [
|
||||
'django_htmx.middleware.HtmxMiddleware',
|
||||
]
|
||||
|
||||
TEMPLATES[0]['OPTIONS']['context_processors'] += [ # noqa: F405
|
||||
'hotpocket_backend.apps.ui.context_processors.base_includes',
|
||||
'hotpocket_backend.apps.ui.context_processors.page_includes',
|
||||
]
|
||||
|
||||
ROOT_URLCONF = 'hotpocket_backend.urls.webapp'
|
||||
|
||||
LOGIN_REDIRECT_URL = '/accounts/post-login/'
|
||||
@@ -81,3 +86,9 @@ CORS_ALLOW_HEADERS = (
|
||||
)
|
||||
|
||||
AUTH_KEY_TTL = 30
|
||||
|
||||
UI_BASE_HEAD_INCLUDES = []
|
||||
UI_BASE_SCRIPT_INCLUDES = []
|
||||
|
||||
UI_PAGE_HEAD_INCLUDES = []
|
||||
UI_PAGE_SCRIPT_INCLUDES = []
|
||||
|
||||
Reference in New Issue
Block a user