File size: 1,783 Bytes
0bb49b0
 
 
 
 
 
 
 
68d341f
 
0bb49b0
 
 
 
 
 
 
68d341f
 
 
 
0bb49b0
 
 
68d341f
0bb49b0
 
 
 
 
68d341f
 
 
 
 
0bb49b0
 
 
 
68d341f
 
 
0bb49b0
 
 
 
 
 
68d341f
 
0bb49b0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
from pathlib import Path

from django.conf import settings
from django.core.files.storage import FileSystemStorage


class ProductImageStorage(FileSystemStorage):
    """
    Save product uploads into MEDIA_ROOT and keep older static/media paths
    readable for backward compatibility.
    """

    def __init__(self, *args, **kwargs):
        static_base_url = settings.STATIC_URL if settings.STATIC_URL.endswith("/") else f"{settings.STATIC_URL}/"
        media_base_url = settings.MEDIA_URL if settings.MEDIA_URL.endswith("/") else f"{settings.MEDIA_URL}/"

        super().__init__(
            location=settings.MEDIA_ROOT,
            base_url=media_base_url,
        )
        self.legacy_storage = FileSystemStorage(
            location=Path(settings.BASE_DIR) / "static",
            base_url=static_base_url,
        )
        self.legacy_media_storage = FileSystemStorage(
            location=Path(settings.BASE_DIR) / "media",
            base_url=media_base_url,
        )

    def exists(self, name):
        return (
            super().exists(name)
            or self.legacy_storage.exists(name)
            or self.legacy_media_storage.exists(name)
        )

    def open(self, name, mode="rb"):
        if super().exists(name):
            return super().open(name, mode)
        if self.legacy_storage.exists(name):
            return self.legacy_storage.open(name, mode)
        return self.legacy_media_storage.open(name, mode)

    def url(self, name):
        if super().exists(name):
            return super().url(name)
        if self.legacy_storage.exists(name):
            return self.legacy_storage.url(name)
        if self.legacy_media_storage.exists(name):
            return self.legacy_media_storage.url(name)
        return super().url(name)