From ceec15f4554f0c59cd119ef6fb12e5348a33db43 Mon Sep 17 00:00:00 2001 From: Ram Ganesh Date: Fri, 17 Mar 2017 17:14:55 +0530 Subject: [PATCH 1/4] ignore App urls from maintenancemode --- example/ignore_app/__init__.py | 0 example/ignore_app/admin.py | 3 +++ example/ignore_app/apps.py | 7 +++++++ example/ignore_app/migrations/__init__.py | 0 example/ignore_app/models.py | 5 +++++ example/ignore_app/tests.py | 3 +++ example/ignore_app/urls.py | 8 ++++++++ example/ignore_app/views.py | 9 +++++++++ example/settings.py | 8 +++++++- example/urls.py | 2 ++ maintenancemode/middleware.py | 12 ++++++++++++ 11 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 example/ignore_app/__init__.py create mode 100644 example/ignore_app/admin.py create mode 100644 example/ignore_app/apps.py create mode 100644 example/ignore_app/migrations/__init__.py create mode 100644 example/ignore_app/models.py create mode 100644 example/ignore_app/tests.py create mode 100644 example/ignore_app/urls.py create mode 100644 example/ignore_app/views.py diff --git a/example/ignore_app/__init__.py b/example/ignore_app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/example/ignore_app/admin.py b/example/ignore_app/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/example/ignore_app/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/example/ignore_app/apps.py b/example/ignore_app/apps.py new file mode 100644 index 0000000..09c8341 --- /dev/null +++ b/example/ignore_app/apps.py @@ -0,0 +1,7 @@ +from __future__ import unicode_literals + +from django.apps import AppConfig + + +class IgnoreAppConfig(AppConfig): + name = 'ignore_app' diff --git a/example/ignore_app/migrations/__init__.py b/example/ignore_app/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/example/ignore_app/models.py b/example/ignore_app/models.py new file mode 100644 index 0000000..bd4b2ab --- /dev/null +++ b/example/ignore_app/models.py @@ -0,0 +1,5 @@ +from __future__ import unicode_literals + +from django.db import models + +# Create your models here. diff --git a/example/ignore_app/tests.py b/example/ignore_app/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/example/ignore_app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/example/ignore_app/urls.py b/example/ignore_app/urls.py new file mode 100644 index 0000000..18f2625 --- /dev/null +++ b/example/ignore_app/urls.py @@ -0,0 +1,8 @@ +from django.conf.urls import url + +from .views import home, page_x + +urlpatterns = [ + url(r'^ignore_app/?$', home), + url(r'^ignore_app/page_x/?$', page_x), +] diff --git a/example/ignore_app/views.py b/example/ignore_app/views.py new file mode 100644 index 0000000..07097dc --- /dev/null +++ b/example/ignore_app/views.py @@ -0,0 +1,9 @@ +from django.http import HttpResponse + + +def home(request): + return HttpResponse('Excluded App from maintenance mode') + + +def page_x(request): + return HttpResponse('Excluded App Page from maintenance mode') diff --git a/example/settings.py b/example/settings.py index 8a31e1c..c0a37a0 100755 --- a/example/settings.py +++ b/example/settings.py @@ -44,6 +44,7 @@ PROJECT_APPS = [ 'maintenancemode', + 'ignore_app' ] INSTALLED_APPS = [ @@ -95,6 +96,11 @@ STATIC_URL = '/static/' MAINTENANCE_MODE = True # or ``False`` and use ``maintenance`` command + MAINTENANCE_IGNORE_URLS = ( - re.compile(r'^/ignored.*'), + re.compile(r'^/ignored/?$'), +) + +MAINTENANCE_IGNORE_APPS = ( + 'ignore_app.urls', ) diff --git a/example/urls.py b/example/urls.py index 00e77b9..e10a588 100644 --- a/example/urls.py +++ b/example/urls.py @@ -1,8 +1,10 @@ from django.conf.urls import url +from django.conf.urls import include from .views import index urlpatterns = [ url(r'^$', index), url(r'^ignored/$', index), + url(r'', include('ignore_app.urls')), ] diff --git a/maintenancemode/middleware.py b/maintenancemode/middleware.py index dd5234a..67c2bcf 100644 --- a/maintenancemode/middleware.py +++ b/maintenancemode/middleware.py @@ -14,6 +14,13 @@ IGNORE_URLS = tuple([re.compile(u) for u in settings.MAINTENANCE_IGNORE_URLS]) +IGNORE_APPS = [] + +if settings.MAINTENANCE_IGNORE_APPS: + for each_app in settings.MAINTENANCE_IGNORE_APPS: + app_obj = urls.include(each_app)[0] + IGNORE_APPS.extend([p.regex for p in app_obj.urlpatterns]) + class MaintenanceModeMiddleware(object): @@ -44,6 +51,11 @@ def process_request(self, request): if url.match(request.path_info): return None + # Check if app paths is explicitly excluded from maintenance mode + for url in IGNORE_APPS: + if url.match(request.path_info.replace('/', '', 1)): + return None + # Otherwise show the user the 503 page resolver = urlresolvers.get_resolver(None) From ca7d804bee0ec86b3ae67a049815db4ea71d45c3 Mon Sep 17 00:00:00 2001 From: Ram Ganesh K Date: Mon, 20 Mar 2017 18:31:38 +0530 Subject: [PATCH 2/4] Added MAINTENANCE_IGNORE_APPS list to settings --- maintenancemode/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/maintenancemode/conf.py b/maintenancemode/conf.py index c59b0f7..750f4d6 100644 --- a/maintenancemode/conf.py +++ b/maintenancemode/conf.py @@ -8,6 +8,7 @@ class MaintenanceSettings(AppConf): IGNORE_URLS = () + MAINTENANCE_IGNORE_APPS = [] LOCKFILE_PATH = os.path.join( os.path.abspath(os.path.dirname(__file__)), 'maintenance.lock') MODE = False From c56db5a0cd2b26c6526663a87904ed87ce2c285a Mon Sep 17 00:00:00 2001 From: Ram Ganesh K Date: Mon, 20 Mar 2017 19:05:23 +0530 Subject: [PATCH 3/4] Minor fix --- maintenancemode/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maintenancemode/conf.py b/maintenancemode/conf.py index 750f4d6..6bcbd0d 100644 --- a/maintenancemode/conf.py +++ b/maintenancemode/conf.py @@ -8,7 +8,7 @@ class MaintenanceSettings(AppConf): IGNORE_URLS = () - MAINTENANCE_IGNORE_APPS = [] + IGNORE_APPS = [] LOCKFILE_PATH = os.path.join( os.path.abspath(os.path.dirname(__file__)), 'maintenance.lock') MODE = False From 5437ac13215c0ed4454323b3ecaaef2f59e1dbab Mon Sep 17 00:00:00 2001 From: Ram Ganesh Date: Mon, 20 Mar 2017 19:33:22 +0530 Subject: [PATCH 4/4] Added app template 503 html page --- example/ignore_app/templates/503.html | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 example/ignore_app/templates/503.html diff --git a/example/ignore_app/templates/503.html b/example/ignore_app/templates/503.html new file mode 100644 index 0000000..5c6f4a9 --- /dev/null +++ b/example/ignore_app/templates/503.html @@ -0,0 +1,3 @@ +

Temporary unavailable

+ +

You requested: {{ request_path }}