Skip to content

Patch default cache when using the cache panel #1437

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 23, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion debug_toolbar/panels/cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,20 @@
import time
from collections import OrderedDict

try:
from django.utils.connection import ConnectionProxy
except ImportError:
# Django 3.1 and below doesn't have a ConnectionProxy
pass
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
pass
ConnectionProxy = None


from django.conf import settings
from django.core import cache
from django.core.cache import CacheHandler, caches as original_caches
from django.core.cache import (
DEFAULT_CACHE_ALIAS,
CacheHandler,
cache as original_cache,
caches as original_caches,
)
from django.core.cache.backends.base import BaseCache
from django.dispatch import Signal
from django.middleware import cache as middleware_cache
Expand Down Expand Up @@ -246,8 +257,14 @@ def enable_instrumentation(self):
else:
cache.caches = CacheHandlerPatch()

try:
cache.cache = ConnectionProxy(cache.caches, DEFAULT_CACHE_ALIAS)
except NameError:
pass
Comment on lines +260 to +263
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
try:
cache.cache = ConnectionProxy(cache.caches, DEFAULT_CACHE_ALIAS)
except NameError:
pass
# Wrap the patched cache inside Django's ConnectionProxy
if ConnectionProxy:
cache.cache = ConnectionProxy(cache.caches, DEFAULT_CACHE_ALIAS)


def disable_instrumentation(self):
cache.caches = original_caches
cache.cache = original_cache
# While it can be restored to the original, any views that were
# wrapped with the cache_page decorator will continue to use a
# monkey patched cache.
Expand Down