From f6551645606af0f11b27263f73cf47feb4911f46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Telepovsk=C3=BD?= Date: Mon, 7 Dec 2015 16:06:37 +0100 Subject: [PATCH 1/4] support for projects without FlatpageFallbackMiddleware or django.contrib.sites --- breadcrumbs/middleware.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/breadcrumbs/middleware.py b/breadcrumbs/middleware.py index e6ed0b7..49f0951 100644 --- a/breadcrumbs/middleware.py +++ b/breadcrumbs/middleware.py @@ -2,11 +2,9 @@ from django.conf import settings from django.http import Http404 from .breadcrumbs import Breadcrumbs -from .views import flatpage class BreadcrumbsMiddleware(object): - def process_request(self, request): request.breadcrumbs = Breadcrumbs() request.breadcrumbs._clean() @@ -19,6 +17,7 @@ def process_response(self, request, response): if response.status_code != 404: return response try: + from .views import flatpage return flatpage(request, request.path_info) # Return the original response if any errors happened. Because this # is a middleware, we can't assume the errors will be caught elsewhere. From 986dc2a278663abffa48c734fc43bdc0b6cccd36 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 2 Jul 2014 04:39:59 +0700 Subject: [PATCH 2/4] Update to remove Singleton behavior from breadcrumbs -- this appears to cause a number of odd issues. (cherry picked from commit 9f68590) --- breadcrumbs/breadcrumbs.py | 25 ++----------------------- breadcrumbs/middleware.py | 1 - 2 files changed, 2 insertions(+), 24 deletions(-) diff --git a/breadcrumbs/breadcrumbs.py b/breadcrumbs/breadcrumbs.py index 40b486f..1589b4f 100644 --- a/breadcrumbs/breadcrumbs.py +++ b/breadcrumbs/breadcrumbs.py @@ -50,30 +50,11 @@ def __unicode__(self): def __repr__(self): return u"Breadcrumb <%s,%s>" % (self.name, self.url) - -class Singleton(object): - - __instance__ = None - - def __new__(cls, *a, **kw): - if Singleton.__instance__ is None: - Singleton.__instance__ = object.__new__(cls, *a, **kw) - cls._Singleton__instance = Singleton.__instance__ - return Singleton.__instance__ - - def _drop_it(self): - Singleton.__instance__ = None - - -class Breadcrumbs(Singleton): +class Breadcrumbs(object): """ Breadcrumbs maintain a list of breadcrumbs that you can get interating with class or with get_breadcrumbs(). """ - __bds = [] - __autohome = getattr(settings, 'BREADCRUMBS_AUTO_HOME', False) - __urls = [] - __started = False def __call__(self, *args, **kwargs): if not len(args) and not len(kwargs): @@ -128,9 +109,7 @@ def __init__(self, *a, **kw): Call validate and if ok, call fill bd """ super(Breadcrumbs, self).__init__(*a, **kw) - if not self.__started: - self._clean() - self.__started = True + self._clean() if a or kw: self._add(*a, **kw) diff --git a/breadcrumbs/middleware.py b/breadcrumbs/middleware.py index 49f0951..7a257c8 100644 --- a/breadcrumbs/middleware.py +++ b/breadcrumbs/middleware.py @@ -7,7 +7,6 @@ class BreadcrumbsMiddleware(object): def process_request(self, request): request.breadcrumbs = Breadcrumbs() - request.breadcrumbs._clean() class FlatpageFallbackMiddleware(object): From 7527178adffe109c74ed668a25d673d40d564fe1 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 2 Jul 2014 07:29:05 +0700 Subject: [PATCH 3/4] Minor change, apparently the middleware can be called repeatedly. (cherry picked from commit d50e318) --- breadcrumbs/middleware.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/breadcrumbs/middleware.py b/breadcrumbs/middleware.py index 7a257c8..003c685 100644 --- a/breadcrumbs/middleware.py +++ b/breadcrumbs/middleware.py @@ -6,7 +6,8 @@ class BreadcrumbsMiddleware(object): def process_request(self, request): - request.breadcrumbs = Breadcrumbs() + if not hasattr(request, 'breadcrumbs'): + request.breadcrumbs = Breadcrumbs() class FlatpageFallbackMiddleware(object): From 1881cbdcfa978942ddc64c48fb2171f1bc584fa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Telepovsk=C3=BD?= Date: Thu, 20 Oct 2016 14:34:43 +0200 Subject: [PATCH 4/4] support for Django 1.10 --- breadcrumbs/middleware.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/breadcrumbs/middleware.py b/breadcrumbs/middleware.py index 003c685..6d8ca47 100644 --- a/breadcrumbs/middleware.py +++ b/breadcrumbs/middleware.py @@ -3,14 +3,20 @@ from django.http import Http404 from .breadcrumbs import Breadcrumbs +try: + from django.utils.deprecation import MiddlewareMixin +except ImportError: # Django < 1.10 + # Works perfectly for everyone using MIDDLEWARE_CLASSES + MiddlewareMixin = object -class BreadcrumbsMiddleware(object): + +class BreadcrumbsMiddleware(MiddlewareMixin): def process_request(self, request): if not hasattr(request, 'breadcrumbs'): request.breadcrumbs = Breadcrumbs() -class FlatpageFallbackMiddleware(object): +class FlatpageFallbackMiddleware(MiddlewareMixin): def process_response(self, request, response): # do nothing if flatpages middleware isn't enabled, also if response # code isn't 404.