Skip to content

Commit 49b5bf6

Browse files
committed
Refs #748 - Serialize storage alias whenever possible
1 parent 40b19de commit 49b5bf6

File tree

7 files changed

+43
-34
lines changed

7 files changed

+43
-34
lines changed

sorl/thumbnail/images.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from urllib.request import Request, urlopen
99

1010
from django.core.files.base import ContentFile, File
11-
from django.core.files.storage import Storage
11+
from django.core.files.storage import InvalidStorageError, Storage, storages
1212
from django.utils.encoding import force_str
1313
from django.utils.functional import LazyObject, empty
1414

@@ -23,7 +23,10 @@
2323

2424
@lru_cache
2525
def get_or_create_storage(storage):
26-
return get_module_class(storage)()
26+
try:
27+
return storages[storage]
28+
except InvalidStorageError:
29+
return get_module_class(storage)()
2730

2831

2932
def serialize_image_file(image_file):
@@ -188,7 +191,12 @@ def serialize_storage(self):
188191
cls = self.storage._wrapped.__class__
189192
else:
190193
cls = self.storage.__class__
191-
return '%s.%s' % (cls.__module__, cls.__name__)
194+
backend = f"{cls.__module__}.{cls.__name__}"
195+
# Try our best to find and serialize the storage alias instead of the backend class.
196+
for alias, params in storages.backends.items():
197+
if params.get("BACKEND") == backend:
198+
return alias
199+
return backend
192200

193201
@property
194202
def key(self):

tests/thumbnail_tests/test_alternative_resolutions.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,29 +23,29 @@ def tearDown(self):
2323
def test_retina(self):
2424
get_thumbnail(self.image, '50x50')
2525

26+
cache_path = "test/cache/2c/0f/2c0f909d420e760b8dc4e1d1f79e705b"
2627
actions = [
27-
'exists: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d.jpg',
28+
f"exists: {cache_path}.jpg",
2829

2930
# save regular resolution, same as in StorageTestCase
30-
'open: retina.jpg',
31-
'save: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d.jpg',
32-
'get_available_name: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d.jpg',
33-
'exists: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d.jpg',
31+
"open: retina.jpg",
32+
f"save: {cache_path}.jpg",
33+
f"get_available_name: {cache_path}.jpg",
34+
f"exists: {cache_path}.jpg",
3435

3536
# save the 1.5x resolution version
36-
'save: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d@1.5x.jpg',
37-
'get_available_name: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d@1.5x.jpg',
38-
'exists: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d@1.5x.jpg',
37+
f"save: {cache_path}@1.5x.jpg",
38+
f"get_available_name: {cache_path}@1.5x.jpg",
39+
f"exists: {cache_path}@1.5x.jpg",
3940

4041
# save the 2x resolution version
41-
'save: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d@2x.jpg',
42-
'get_available_name: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d@2x.jpg',
43-
'exists: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d@2x.jpg'
42+
f"save: {cache_path}@2x.jpg",
43+
f"get_available_name: {cache_path}@2x.jpg",
44+
f"exists: {cache_path}@2x.jpg"
4445
]
4546
self.assertEqual(self.log, actions)
4647

47-
path = os.path.join(settings.MEDIA_ROOT,
48-
'test/cache/91/bb/[email protected]')
48+
path = os.path.join(settings.MEDIA_ROOT, f"{cache_path}@1.5x.jpg")
4949

5050
with open(path) as fp:
5151
engine = PILEngine()

tests/thumbnail_tests/test_backends.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ def setUp(self):
132132
def test_nonascii(self):
133133
# also test the get_thumbnail shortcut
134134
th = get_thumbnail(self.name, '200x200')
135-
self.assertEqual(th.url, '/media/test/cache/f5/26/f52608b56718f62abc45a90ff9459f2c.jpg')
135+
self.assertEqual(th.url, '/media/test/cache/79/48/79489fd416471a8850d1c7c6f7a28343.jpg')
136136

137137
def tearDown(self):
138138
shutil.rmtree(settings.MEDIA_ROOT)

tests/thumbnail_tests/test_engines.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,18 +158,18 @@ def test_clear_doesnt_regenerate(self):
158158

159159
def test_storage_serialize(self):
160160
im = ImageFile(Item.objects.get(image='500x500.jpg').image)
161-
self.assertEqual(im.serialize_storage(), 'tests.thumbnail_tests.storage.TestStorage')
161+
self.assertEqual(im.serialize_storage(), 'default')
162162
self.assertEqual(
163163
ImageFile('http://www.image.jpg').serialize_storage(),
164164
'sorl.thumbnail.images.UrlStorage',
165165
)
166166
self.assertEqual(
167167
ImageFile('http://www.image.jpg', default.storage).serialize_storage(),
168-
'tests.thumbnail_tests.storage.TestStorage',
168+
'default',
169169
)
170170
self.assertEqual(
171171
ImageFile('getit', default_storage).serialize_storage(),
172-
'tests.thumbnail_tests.storage.TestStorage',
172+
'default',
173173
)
174174

175175
@unittest.skipIf(platform.system() == "Darwin", 'quality is saved a different way on os x')
@@ -200,7 +200,7 @@ def test_image_file_deserialize(self):
200200
default.kvstore.set(im)
201201
self.assertEqual(
202202
default.kvstore.get(im).serialize_storage(),
203-
'tests.thumbnail_tests.storage.TestStorage',
203+
'default',
204204
)
205205
im = ImageFile('https://dummyimage.com/300x300/')
206206
default.kvstore.set(im)

tests/thumbnail_tests/test_filters.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def test_html_filter_local_url(self):
2020

2121
self.assertEqual(
2222
'<img alt="A image!" '
23-
'src="/media/test/cache/c7/f2/c7f2880b48e9f07d46a05472c22f0fde.jpg" />',
23+
'src="/media/test/cache/62/5b/625b3d4c6020c1179d7888ca8d29845d.jpg" />',
2424
val
2525
)
2626

@@ -38,6 +38,6 @@ def test_markdown_filter_local_url(self):
3838
val = render_to_string('markdownfilter.html', {'text': text, }).strip()
3939

4040
self.assertEqual(
41-
'![A image!](/media/test/cache/c7/f2/c7f2880b48e9f07d46a05472c22f0fde.jpg)',
41+
'![A image!](/media/test/cache/62/5b/625b3d4c6020c1179d7888ca8d29845d.jpg)',
4242
val
4343
)

tests/thumbnail_tests/test_storage.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,17 @@ class StorageTestCase(BaseStorageTestCase):
1313

1414
def test_new(self):
1515
get_thumbnail(self.image, '50x50')
16+
cache_path = "test/cache/55/ce/55ceec8f0d3f20a89304da3a65644db0.jpg"
1617
actions = [
17-
'exists: test/cache/45/bb/45bbbdab11e235a80e603aa119e8786b.jpg',
18+
f"exists: {cache_path}",
1819
# open the original for thumbnailing
19-
'open: org.jpg',
20+
"open: org.jpg",
2021
# save the file
21-
'save: test/cache/45/bb/45bbbdab11e235a80e603aa119e8786b.jpg',
22+
f"save: {cache_path}",
2223
# check for filename
23-
'get_available_name: test/cache/45/bb/45bbbdab11e235a80e603aa119e8786b.jpg',
24+
f"get_available_name: {cache_path}",
2425
# called by get_available_name
25-
'exists: test/cache/45/bb/45bbbdab11e235a80e603aa119e8786b.jpg',
26+
f"exists: {cache_path}",
2627
]
2728
self.assertEqual(self.log, actions)
2829

tests/thumbnail_tests/test_templatetags.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ def test_nested(self):
2626
item = Item.objects.get(image='500x500.jpg')
2727
val = render_to_string('thumbnail6.html', {'item': item, }).strip()
2828
self.assertEqual(val, (
29-
'<a href="/media/test/cache/fc/f6/fcf65c09cc4bb8671147de41997422bf.jpg">'
30-
'<img src="/media/test/cache/67/6b/676b2331a071478b0cb280d0edba7818.jpg" '
29+
'<a href="/media/test/cache/bb/a2/bba263a67019189dfeb106ced24dcb4d.jpg">'
30+
'<img src="/media/test/cache/a4/d3/a4d3b1e302148aed94200b3a05849884.jpg" '
3131
'width="400" height="400"></a>'
3232
))
3333

@@ -195,10 +195,10 @@ def test_nested(self):
195195
self.assertEqual(
196196
val,
197197
(
198-
'<a href="/media/test/cache/fc/f6/'
199-
'fcf65c09cc4bb8671147de41997422bf.jpg">'
200-
'<img src="/media/test/cache/67/6b/'
201-
'676b2331a071478b0cb280d0edba7818.jpg" '
198+
'<a href="/media/test/cache/bb/a2/'
199+
'bba263a67019189dfeb106ced24dcb4d.jpg">'
200+
'<img src="/media/test/cache/a4/d3/'
201+
'a4d3b1e302148aed94200b3a05849884.jpg" '
202202
'width="400" height="400"></a>'
203203
)
204204
)

0 commit comments

Comments
 (0)