11import os
22import re
3+ from contextlib import contextmanager
34
45from 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+
2035class 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
5263class ActionThumbnailerMixin :
0 commit comments