diff --git a/app/stores/views/mixins.py b/app/stores/views/mixins.py index 2b09e33..a8e4bc8 100644 --- a/app/stores/views/mixins.py +++ b/app/stores/views/mixins.py @@ -1,6 +1,42 @@ from django.http import Http404 from haystack.query import SearchQuerySet from haystack.inputs import AutoQuery +from waffle import switch_is_active, flag_is_active + + +class WaffleSwitchMixin(object): + """ + Checks that as switch is active, or 404. Operates like the FBV decorator waffle_switch + """ + waffle_switch = None + + def dispatch(self, request, *args, **kwargs): + if self.waffle_switch.startswith('!'): + active = not switch_is_active(self.waffle_switch[1:]) + else: + active = switch_is_active(self.waffle_switch) + + if not active: + raise Http404 + return super(WaffleSwitchMixin, self).dispatch(request, *args, **kwargs) + + +class WaffleFlagMixin(object): + """ + Checks that as flag is active, or 404. Operates like the FBV decorator waffle_flag + """ + waffle_flag = None + + def dispatch(self, request, *args, **kwargs): + if self.waffle_flag.startswith('!'): + active = not flag_is_active(request, self.waffle_flag[1:]) + else: + active = flag_is_active(request, self.waffle_flag) + + if not active: + raise Http404 + return super(WaffleFlagMixin, self).dispatch(request, *args, **kwargs) + class EditorCheckMixin(object): """ diff --git a/app/vapemap/settings.py b/app/vapemap/settings.py index ed6a146..1bd7dbd 100644 --- a/app/vapemap/settings.py +++ b/app/vapemap/settings.py @@ -71,6 +71,7 @@ INSTALLED_APPS = [ 'gunicorn', 'raven.contrib.django.raven_compat', 'south', + 'waffle', 'storages', 'markdown_deux', 'epiceditor', @@ -88,6 +89,7 @@ MIDDLEWARE_CLASSES = [ 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', + 'waffle.middleware.WaffleMiddleware', ] TEMPLATE_CONTEXT_PROCESSORS += ( diff --git a/requirements.txt b/requirements.txt index 4711f4f..f75e312 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,4 +18,5 @@ gevent psycopg2 django-storages boto -raven>=3 \ No newline at end of file +raven>=3 +django-waffle>=0.9.1 \ No newline at end of file