3
3
from contextvars import ContextVar
4
4
from os .path import join , normpath
5
5
6
- from django .conf import settings
7
6
from django .contrib .staticfiles import finders , storage
8
7
from django .dispatch import Signal
9
- from django .utils .functional import LazyObject
10
8
from django .utils .translation import gettext_lazy as _ , ngettext
11
9
12
10
from debug_toolbar import panels
@@ -37,46 +35,21 @@ def url(self):
37
35
record_static_file_signal = Signal ()
38
36
39
37
40
- class DebugConfiguredStorage (LazyObject ):
41
- """
42
- A staticfiles storage class to be used for collecting which paths
43
- are resolved by using the {% static %} template tag (which uses the
44
- `url` method).
45
- """
46
-
47
- def _setup (self ):
48
- try :
49
- # From Django 4.2 use django.core.files.storage.storages in favor
50
- # of the deprecated django.core.files.storage.get_storage_class
51
- from django .core .files .storage import storages
52
-
53
- configured_storage_cls = storages ["staticfiles" ].__class__
54
- except ImportError :
55
- # Backwards compatibility for Django versions prior to 4.2
56
- from django .core .files .storage import get_storage_class
57
-
58
- configured_storage_cls = get_storage_class (settings .STATICFILES_STORAGE )
59
-
60
- class DebugStaticFilesStorage (configured_storage_cls ):
61
- def url (self , path ):
62
- url = super ().url (path )
63
- with contextlib .suppress (LookupError ):
64
- # For LookupError:
65
- # The ContextVar wasn't set yet. Since the toolbar wasn't properly
66
- # configured to handle this request, we don't need to capture
67
- # the static file.
68
- request_id = request_id_context_var .get ()
69
- record_static_file_signal .send (
70
- sender = self ,
71
- staticfile = StaticFile (path = str (path ), url = url ),
72
- request_id = request_id ,
73
- )
74
- return url
75
-
76
- self ._wrapped = DebugStaticFilesStorage ()
77
-
78
-
79
- _original_storage = storage .staticfiles_storage
38
+ class URLMixin :
39
+ def url (self , path ):
40
+ url = super ().url (path )
41
+ with contextlib .suppress (LookupError ):
42
+ # For LookupError:
43
+ # The ContextVar wasn't set yet. Since the toolbar wasn't properly
44
+ # configured to handle this request, we don't need to capture
45
+ # the static file.
46
+ request_id = request_id_context_var .get ()
47
+ record_static_file_signal .send (
48
+ sender = self ,
49
+ staticfile = StaticFile (path = str (path ), url = url ),
50
+ request_id = request_id ,
51
+ )
52
+ return url
80
53
81
54
82
55
class StaticFilesPanel (panels .Panel ):
@@ -103,7 +76,9 @@ def __init__(self, *args, **kwargs):
103
76
104
77
@classmethod
105
78
def ready (cls ):
106
- storage .staticfiles_storage = DebugConfiguredStorage ()
79
+ cls = storage .staticfiles_storage .__class__
80
+ if URLMixin not in cls .mro ():
81
+ cls .__bases__ = (URLMixin , * cls .__bases__ )
107
82
108
83
def _store_static_files_signal_handler (self , sender , staticfile , ** kwargs ):
109
84
# Only record the static file if the request_id matches the one
0 commit comments