From 8d08b8344690d4a1a050213671db98f5cb65d1ae Mon Sep 17 00:00:00 2001 From: Timothy Hobbs Date: Mon, 23 Oct 2023 12:29:36 +0200 Subject: [PATCH 1/8] Get rid of extra comments in urls.py --- standalone/config/urls.py | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/standalone/config/urls.py b/standalone/config/urls.py index 2fb2a3d7..c6b7b43c 100644 --- a/standalone/config/urls.py +++ b/standalone/config/urls.py @@ -1,30 +1,9 @@ -"""django-helpdesk demodesk URL Configuration - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/1.10/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.conf.urls import url, include - 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) -""" from django.conf import settings from django.conf.urls.static import static from django.contrib import admin from django.urls import include, path -# The following uses the static() helper function, -# which only works when in development mode (using DEBUG). -# For a real deployment, you'd have to properly configure a media server. -# For more information, see: -# https://docs.djangoproject.com/en/1.10/howto/static-files/ - urlpatterns = [ path('admin/', admin.site.urls), path('', include('helpdesk.urls', namespace='helpdesk')), From 90c9b3311e321cf93017580e2cac4fb83f480f88 Mon Sep 17 00:00:00 2001 From: Timothy Hobbs Date: Mon, 23 Oct 2023 12:47:05 +0200 Subject: [PATCH 2/8] Reverse order of local_settings loading in order to allow adding new installed apps --- docs/standalone.rst | 2 ++ standalone/config/local_settings.py | 1 + standalone/config/settings.py | 5 ----- standalone/config/wsgi.py | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) create mode 100644 standalone/config/local_settings.py diff --git a/docs/standalone.rst b/docs/standalone.rst index 138e931b..3e4c4914 100644 --- a/docs/standalone.rst +++ b/docs/standalone.rst @@ -89,6 +89,8 @@ An example `local_settings` configuration for utilizing AWS SES for email: .. code-block:: python + + from .settings import * import os DEFAULT_FROM_EMAIL = "support@bitswan.space" diff --git a/standalone/config/local_settings.py b/standalone/config/local_settings.py new file mode 100644 index 00000000..7d7765a7 --- /dev/null +++ b/standalone/config/local_settings.py @@ -0,0 +1 @@ +from .settings import * diff --git a/standalone/config/settings.py b/standalone/config/settings.py index 715372f9..1c4e326e 100644 --- a/standalone/config/settings.py +++ b/standalone/config/settings.py @@ -229,8 +229,3 @@ MEDIA_ROOT = '/data/media' # for Django 3.2+, set default for autofields: DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' - -try: - from .local_settings import * -except ImportError: - pass diff --git a/standalone/config/wsgi.py b/standalone/config/wsgi.py index ef704eb8..1d41adf4 100644 --- a/standalone/config/wsgi.py +++ b/standalone/config/wsgi.py @@ -12,6 +12,6 @@ from django.core.wsgi import get_wsgi_application import os -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "standalone.config.settings") +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "standalone.config.local_settings") application = get_wsgi_application() From 13bae827e97c40b964459bca35c945f951a3e785 Mon Sep 17 00:00:00 2001 From: Timothy Hobbs Date: Mon, 23 Oct 2023 12:47:25 +0200 Subject: [PATCH 3/8] Install git so that we can install git based extra-deps --- standalone/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/standalone/Dockerfile b/standalone/Dockerfile index 968129c5..002a5830 100644 --- a/standalone/Dockerfile +++ b/standalone/Dockerfile @@ -4,7 +4,8 @@ RUN apt-get update RUN apt-get install -yqq \ postgresql-common \ postgresql-client \ - cron + cron \ + git COPY requirements.txt /opt/django-helpdesk/requirements.txt COPY standalone/extra-requirements.txt /opt/django-helpdesk/standalone/extra-requirements.txt RUN pip3 install -r /opt/django-helpdesk/requirements.txt From 327782b845987726c15b45879fe318a3da83cf62 Mon Sep 17 00:00:00 2001 From: Timothy Hobbs Date: Mon, 23 Oct 2023 12:51:23 +0200 Subject: [PATCH 4/8] Add docs for using s3 for attachments --- docs/standalone.rst | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/docs/standalone.rst b/docs/standalone.rst index 3e4c4914..be1fd953 100644 --- a/docs/standalone.rst +++ b/docs/standalone.rst @@ -107,4 +107,30 @@ To integrate `django-ses`, bindmount a file to `/opt/extra-dependencies.txt` con django-ses -Ensure to update the `docker.env` file with your necessary secrets. +Make sure you update the `docker.env` file with the necessary secrets. + + +S3 base attachment support +--------------------------- + +Working from the previous SES example we add the following to `local_settings`: + +.. code-block:: python + + AWS_S3_REGION_NAME = os.environ.get("AWS_S3_REGION_NAME", "eu-central-1") + AWS_STORAGE_BUCKET_NAME = os.environ.get("AWS_STORAGE_BUCKET_NAME", "bitswan-helpdesk-attachments") + AWS_QUERYSTRING_AUTH = os.environ.get("AWS_QUERYSTRING_AUTH", True) + AWS_QUERYSTRING_EXPIRE = os.environ.get( + "AWS_QUERYSTRING_EXPIRE", 60 * 60 + ) + AWS_DEFAULT_ACL = "private" + + DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage" + + +To integrate `django-ses`, bindmount a file to `/opt/extra-dependencies.txt` containing: + +.. code-block:: text + + django-storages + boto3 From 7e0a335684d42eb76419ed4d03eecb393dc46074 Mon Sep 17 00:00:00 2001 From: Timothy Hobbs Date: Mon, 23 Oct 2023 13:42:18 +0200 Subject: [PATCH 5/8] Switch to local_settings first for manage.py as well --- standalone/manage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/standalone/manage.py b/standalone/manage.py index 36efe400..0de07659 100755 --- a/standalone/manage.py +++ b/standalone/manage.py @@ -4,7 +4,7 @@ import sys def main(): - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "standalone.config.settings") + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "standalone.config.local_settings") try: from django.core.management import execute_from_command_line except ImportError: From d1cce7caadf2479641d837eab809028641e9438a Mon Sep 17 00:00:00 2001 From: Timothy Hobbs Date: Mon, 23 Oct 2023 14:00:03 +0200 Subject: [PATCH 6/8] Add ability to configure local_urls --- standalone/config/local_urls.py | 2 ++ standalone/config/urls.py | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 standalone/config/local_urls.py diff --git a/standalone/config/local_urls.py b/standalone/config/local_urls.py new file mode 100644 index 00000000..bc2562cb --- /dev/null +++ b/standalone/config/local_urls.py @@ -0,0 +1,2 @@ +local_urlpatterns = [ +] diff --git a/standalone/config/urls.py b/standalone/config/urls.py index c6b7b43c..0587a60b 100644 --- a/standalone/config/urls.py +++ b/standalone/config/urls.py @@ -2,10 +2,12 @@ from django.conf import settings from django.conf.urls.static import static from django.contrib import admin from django.urls import include, path +from .local_urls import local_urlpatterns + urlpatterns = [ path('admin/', admin.site.urls), path('', include('helpdesk.urls', namespace='helpdesk')), path('api/auth/', include('rest_framework.urls', namespace='rest_framework')) -] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) +] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + local_urlpatterns From 8be4adb756e89f509c0eb0914e128d8199984679 Mon Sep 17 00:00:00 2001 From: Timothy Hobbs Date: Mon, 23 Oct 2023 14:20:44 +0200 Subject: [PATCH 7/8] Oops, use the standalone urls config :) --- standalone/config/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/standalone/config/settings.py b/standalone/config/settings.py index 1c4e326e..2a6340f5 100644 --- a/standalone/config/settings.py +++ b/standalone/config/settings.py @@ -65,7 +65,7 @@ MIDDLEWARE = [ "whitenoise.middleware.WhiteNoiseMiddleware", ] -ROOT_URLCONF = 'demo.demodesk.config.urls' +ROOT_URLCONF = 'standalone.config.urls' TEMPLATES = [ { From 1dc09ee255625961b781aa61c51648d2aa02177f Mon Sep 17 00:00:00 2001 From: Timothy Hobbs Date: Mon, 23 Oct 2023 14:49:15 +0200 Subject: [PATCH 8/8] isort --- standalone/config/urls.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/standalone/config/urls.py b/standalone/config/urls.py index 0587a60b..58a7b37e 100644 --- a/standalone/config/urls.py +++ b/standalone/config/urls.py @@ -1,9 +1,8 @@ +from .local_urls import local_urlpatterns from django.conf import settings from django.conf.urls.static import static from django.contrib import admin from django.urls import include, path -from .local_urls import local_urlpatterns - urlpatterns = [