~widelands-dev/widelands-website/django_staticfiles

« back to all changes in this revision

Viewing changes to wlprofile/fields.py

  • Committer: Holger Rapp
  • Date: 2016-08-08 10:06:42 UTC
  • mto: This revision was merged to the branch mainline in revision 419.
  • Revision ID: sirver@gmx.de-20160808100642-z62vwqitxoyl5fh4
Added the apt-get update script I run every 30 days.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
"""
 
2
Details about AutoOneToOneField:
 
3
    http://softwaremaniacs.org/blog/2007/03/07/auto-one-to-one-field/
 
4
"""
 
5
 
1
6
from StringIO import StringIO
 
7
import logging
 
8
 
 
9
from django.db.models import OneToOneField
 
10
from django.db.models.fields.related import SingleRelatedObjectDescriptor
2
11
from django.db import models
3
 
import logging
4
12
from django.core.files.uploadedfile import SimpleUploadedFile
5
13
 
6
14
 
 
15
class AutoSingleRelatedObjectDescriptor(SingleRelatedObjectDescriptor):
 
16
    def __get__(self, instance, instance_type=None):
 
17
        try:
 
18
            return super(AutoSingleRelatedObjectDescriptor, self).__get__(instance, instance_type)
 
19
        except self.related.model.DoesNotExist:
 
20
            obj = self.related.model(**{self.related.field.name: instance})
 
21
            obj.save()
 
22
            return obj
 
23
 
 
24
 
 
25
class AutoOneToOneField(OneToOneField):
 
26
    """
 
27
    OneToOneField creates dependent object on first request from parent object
 
28
    if dependent oject has not created yet.
 
29
    """
 
30
 
 
31
    def contribute_to_related_class(self, cls, related):
 
32
        setattr(cls, related.get_accessor_name(), AutoSingleRelatedObjectDescriptor(related))
 
33
        #if not cls._meta.one_to_one_field:
 
34
            #cls._meta.one_to_one_field = self
 
35
 
 
36
 
7
37
class ExtendedImageField(models.ImageField):
8
 
    """Extended ImageField that can resize image before saving it."""
9
 
 
 
38
    """
 
39
    Extended ImageField that can resize image before saving it.
 
40
    """
10
41
    def __init__(self, *args, **kwargs):
11
42
        self.width = kwargs.pop('width', None)
12
43
        self.height = kwargs.pop('height', None)
13
44
        super(ExtendedImageField, self).__init__(*args, **kwargs)
14
45
 
 
46
 
15
47
    def save_form_data(self, instance, data):
16
48
        if data is not None and data != self.default:
17
49
            if not data:
18
50
                data = self.default
19
51
                if instance.avatar != self.default:
20
 
                    instance.avatar.delete()
 
52
                        instance.avatar.delete()
21
53
            else:
22
54
                if hasattr(data, 'read') and self.width and self.height:
23
 
                    content = self.resize_image(
24
 
                        data.read(), width=self.width, height=self.height)
25
 
                    data = SimpleUploadedFile(
26
 
                        instance.user.username + '.png', content, 'image/png')
 
55
                    content = self.resize_image(data.read(), width=self.width, height=self.height)
 
56
                    data = SimpleUploadedFile(instance.user.username + ".png", content, "image/png")
27
57
            super(ExtendedImageField, self).save_form_data(instance, data)
28
58
 
 
59
 
29
60
    def resize_image(self, rawdata, width, height):
30
 
        """Resize image to fit it into (width, height) box."""
 
61
        """
 
62
        Resize image to fit it into (width, height) box.
 
63
        """
31
64
        from PIL import Image
32
65
 
33
66
        image = Image.open(StringIO(rawdata))