Skip to content

Commit 1934f89

Browse files
committed
fix: use context manager to use default namer for private files
1 parent 1908ab5 commit 1934f89

File tree

1 file changed

+26
-15
lines changed

1 file changed

+26
-15
lines changed

filer/utils/filer_easy_thumbnails.py

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import os
22
import re
3+
from contextlib import contextmanager
34

45
from easy_thumbnails.files import Thumbnailer
6+
from easy_thumbnails.namers import default
57

68
# easy-thumbnails default pattern
79
# e.g: source.jpg.100x100_q80_crop_upscale.jpg
@@ -17,6 +19,19 @@ def thumbnail_to_original_filename(thumbnail_name):
1719
return None
1820

1921

22+
@contextmanager
23+
def use_default_namer(thumbnailer):
24+
"""
25+
Context manager to use the default easy-thumbnails namer for private files.
26+
"""
27+
original_namer = thumbnailer.thumbnail_namer
28+
thumbnailer.thumbnail_namer = default
29+
try:
30+
yield
31+
finally:
32+
thumbnailer.thumbnail_namer = original_namer
33+
34+
2035
class ThumbnailerNameMixin:
2136
thumbnail_basedir = ""
2237
thumbnail_subdir = ""
@@ -30,23 +45,19 @@ def get_thumbnail_name(self, thumbnail_options, transparent=False):
3045
"""
3146
is_public = False
3247
if hasattr(self, "thumbnail_storage"):
33-
from filer.storage import PrivateFileSystemStorage
34-
is_public = not isinstance(self.thumbnail_storage, PrivateFileSystemStorage)
48+
is_public = "PrivateFileSystemStorage" not in str(
49+
self.thumbnail_storage.__class__
50+
)
3551

36-
path, source_filename = os.path.split(self.name)
37-
thumbnail_name = super(ThumbnailerNameMixin, self).get_thumbnail_name(
38-
thumbnail_options, transparent
39-
)
4052
if is_public:
41-
return thumbnail_name
42-
43-
base_thumb_name = os.path.basename(thumbnail_name)
44-
return os.path.join(
45-
self.thumbnail_basedir,
46-
path,
47-
self.thumbnail_subdir,
48-
f"{source_filename}.{base_thumb_name}",
49-
)
53+
return super(ThumbnailerNameMixin, self).get_thumbnail_name(
54+
thumbnail_options, transparent
55+
)
56+
57+
with use_default_namer(self):
58+
return super(ThumbnailerNameMixin, self).get_thumbnail_name(
59+
thumbnail_options, transparent
60+
)
5061

5162

5263
class ActionThumbnailerMixin:

0 commit comments

Comments
 (0)