1
1
from django.db import models
2
2
from django.contrib.contenttypes.models import ContentType
3
from django.contrib.contenttypes import generic
3
from django.contrib.contenttypes.fields import GenericForeignKey
4
5
from django.contrib.auth.models import User
5
6
from django.utils.translation import ugettext_lazy as _
6
7
from django.db import IntegrityError
7
8
from datetime import datetime
9
from django.conf import settings
10
from django.core.files.storage import FileSystemStorage
9
from settings import MEDIA_ROOT, MEDIA_URL
11
13
class ImageManager(models.Manager):
13
We overwrite the defaults manager to make sure
14
that the create function checks for validity. We also include
15
some convenience functions here
17
def has_image(self,image_name):
14
"""We overwrite the defaults manager to make sure that the create function
17
We also include some convenience functions here
21
def has_image(self, image_name):
18
22
return bool(self.filter(name=image_name).count())
21
def create(self,**keyw):
23
Makes sure that no image/revision pair is already in the database
25
if "name" not in keyw or "revision" not in keyw:
26
raise IntegrityError("needs name and revision as keywords")
28
if self.filter(name=keyw["name"],revision=keyw["revision"]).count():
24
def create(self, **keyw):
25
"""Makes sure that no image/revision pair is already in the
28
if 'name' not in keyw or 'revision' not in keyw:
29
raise IntegrityError('needs name and revision as keywords')
31
if self.filter(name=keyw['name'], revision=keyw['revision']).count():
29
32
raise Image.AlreadyExisting()
31
return super(ImageManager,self).create(**keyw)
33
def create_and_save_image(self,user,image, content_type, object_id, ip):
34
# if self.has_image(name):
35
# raise RuntimeError,"Image with name %s already exists. This is likely an Error" % name
36
name = image.name.lower()
37
im = self.create(content_type=content_type, object_id=object_id,
38
user=user,revision=1,name=name, editor_ip = ip)
40
path = "%s/wlimages/%s" % (MEDIA_ROOT,image.name)
41
url = "%s/wlimages/%s" % (MEDIA_URL,image.name)
43
destination = open(path,"wb")
34
return super(ImageManager, self).create(**keyw)
36
def create_and_save_image(self, user, image, content_type, object_id):
37
# Use Django's get_valid_name() to get a safe filename
38
storage = FileSystemStorage()
39
safe_filename = storage.get_valid_name(image.name)
40
im = self.create(content_type=content_type, object_id=object_id,
41
user=user, revision=1, name=image.name)
42
path = '%swlimages/%s' % (settings.MEDIA_ROOT, safe_filename)
44
destination = open(path, 'wb')
44
45
for chunk in image.chunks():
45
46
destination.write(chunk)
48
im.image = 'wlimages/%s' % (safe_filename)
53
53
class Image(models.Model):
54
55
class AlreadyExisting(IntegrityError):
56
return "The combination of image/revision is already in the database"
58
return 'The combination of image/revision is already in the database'
61
63
# Generic Foreign Key Fields
62
64
content_type = models.ForeignKey(ContentType)
63
object_id = models.PositiveIntegerField(_('object ID'))
64
content_object = generic.GenericForeignKey()
65
object_id = models.PositiveIntegerField()
66
content_object = GenericForeignKey()
66
68
name = models.CharField(max_length=100)
67
69
revision = models.PositiveIntegerField()
70
72
user = models.ForeignKey(User)
71
editor_ip = models.IPAddressField(_('IP address'), null=True, blank=True)
74
date_submitted = models.DateTimeField(_('date/time submitted'), default = datetime.now)
75
image = models.ImageField(upload_to="images/")
76
url = models.CharField(max_length=250)
75
date_submitted = models.DateTimeField(
76
_('date/time submitted'), default=datetime.now)
77
image = models.ImageField(upload_to='wlimages/')
79
79
objects = ImageManager()
81
def __unicode__(self):
82
return "Image:%s" % self.name
84
84
def get_content_object(self):