Completed
Pull Request — master (#81)
by
unknown
01:24
created

ThumbnailWithoutDirectoryModel   A

Complexity

Total Complexity 1

Size/Duplication

Total Lines 5
Duplicated Lines 0 %
Metric Value
wmc 1
dl 0
loc 5
rs 10
1
from django.core.files.storage import FileSystemStorage
2
from django.db import models
3
from django.db.models.signals import post_delete, pre_save
4
5
from stdimage import StdImageField
6
from stdimage.utils import (UploadTo, UploadToAutoSlugClassNameDir,
7
                            UploadToUUID, pre_delete_delete_callback,
8
                            pre_save_delete_callback, render_variations)
9
from stdimage.validators import MaxSizeValidator, MinSizeValidator
10
11
12
class SimpleModel(models.Model):
13
    """works as ImageField"""
14
    image = StdImageField(upload_to='img/')
15
16
17
class AdminDeleteModel(models.Model):
18
    """can be deleted through admin"""
19
    image = StdImageField(
20
        upload_to=UploadTo(name='image', path='img'),
21
        blank=True
22
    )
23
24
25
class ResizeModel(models.Model):
26
    """resizes image to maximum size to fit a 640x480 area"""
27
    image = StdImageField(
28
        upload_to=UploadTo(name='image', path='img'),
29
        variations={
30
            'medium': {'width': 400, 'height': 400},
31
            'thumbnail': (100, 75),
32
        }
33
    )
34
35
36
class ResizeCropModel(models.Model):
37
    """resizes image to 640x480 cropping if necessary"""
38
    image = StdImageField(
39
        upload_to=UploadTo(name='image', path='img'),
40
        variations={'thumbnail': (150, 150, True)}
41
    )
42
43
44
class ThumbnailModel(models.Model):
45
    """creates a thumbnail resized to maximum size to fit a 100x75 area"""
46
    image = StdImageField(
47
        upload_to=UploadTo(name='image', path='img'),
48
        blank=True,
49
        variations={'thumbnail': (100, 75)}
50
    )
51
52
53
class MaxSizeModel(models.Model):
54
    image = StdImageField(
55
        upload_to=UploadTo(name='image', path='img'),
56
        validators=[MaxSizeValidator(16, 16)]
57
    )
58
59
60
class MinSizeModel(models.Model):
61
    image = StdImageField(
62
        upload_to=UploadTo(name='image', path='img'),
63
        validators=[MinSizeValidator(200, 200)]
64
    )
65
66
67
class ForceMinSizeModel(models.Model):
68
    """creates a thumbnail resized to maximum size to fit a 100x75 area"""
69
    image = StdImageField(
70
        upload_to=UploadTo(name='image', path='img'),
71
        force_min_size=True,
72
        variations={'thumbnail': (600, 600)}
73
    )
74
75
76
class AutoSlugClassNameDirModel(models.Model):
77
    name = models.CharField(max_length=50)
78
    image = StdImageField(
79
        upload_to=UploadToAutoSlugClassNameDir(populate_from='name')
80
    )
81
82
83
class UUIDModel(models.Model):
84
    image = StdImageField(upload_to=UploadToUUID(path='img'))
85
86
87
class CustomManager(models.Manager):
88
    """Just like Django's default, but a different class."""
89
    pass
90
91
92
class CustomManagerModel(models.Model):
93
    customer_manager = CustomManager()
94
95
    class Meta:
96
        abstract = True
97
98
99
class ManualVariationsModel(CustomManagerModel):
100
    """delays creation of 150x150 thumbnails until it is called manually"""
101
    image = StdImageField(
102
        upload_to=UploadTo(name='image', path='img'),
103
        variations={'thumbnail': (150, 150, True)},
104
        render_variations=False
105
    )
106
107
108
class MyStorageModel(CustomManagerModel):
109
    """delays creation of 150x150 thumbnails until it is called manually"""
110
    image = StdImageField(
111
        upload_to=UploadTo(name='image', path='img'),
112
        variations={'thumbnail': (150, 150, True)},
113
        render_variations=False,
114
        storage=FileSystemStorage(),
115
    )
116
117
118
def render_job(**kwargs):
119
    render_variations(**kwargs)
120
    return False
121
122
123
class UtilVariationsModel(models.Model):
124
    """delays creation of 150x150 thumbnails until it is called manually"""
125
    image = StdImageField(
126
        upload_to=UploadTo(name='image', path='img'),
127
        variations={'thumbnail': (150, 150, True)},
128
        render_variations=render_job
129
    )
130
131
132
class ThumbnailWithoutDirectoryModel(models.Model):
133
    """Save into a generated filename that does not contain any '/' char"""
134
    image = StdImageField(
135
        upload_to=lambda instance, filename: 'custom.gif',
136
        variations={'thumbnail': {'width': 150, 'height': 150}},
137
    )
138
139
post_delete.connect(pre_delete_delete_callback, sender=SimpleModel)
140
pre_save.connect(pre_save_delete_callback, sender=AdminDeleteModel)
141