##// END OF EJS Templates
Added post versions to list request, changed list request to include additional attributes
Added post versions to list request, changed list request to include additional attributes

File last commit:

r1500:9178427e default
r1571:7712a723 default
Show More
image.py
98 lines | 3.3 KiB | text/x-python | PythonLexer
from django.db import models
from django.template.defaultfilters import filesizeformat
from boards import thumbs, utils
import boards
from boards.models.base import Viewable
from boards.models import STATUS_ARCHIVE
from boards.utils import get_upload_filename
__author__ = 'neko259'
IMAGE_THUMB_SIZE = (200, 150)
HASH_LENGTH = 36
CSS_CLASS_IMAGE = 'image'
CSS_CLASS_THUMB = 'thumb'
class PostImageManager(models.Manager):
def create_with_hash(self, image):
image_hash = utils.get_file_hash(image)
existing = self.filter(hash=image_hash)
if len(existing) > 0:
post_image = existing[0]
else:
post_image = PostImage.objects.create(image=image)
return post_image
def get_random_images(self, count, tags=None):
images = self.exclude(post_images__thread__status=STATUS_ARCHIVE)
if tags is not None:
images = images.filter(post_images__threads__tags__in=tags)
return images.order_by('?')[:count]
class PostImage(models.Model, Viewable):
objects = PostImageManager()
class Meta:
app_label = 'boards'
ordering = ('id',)
width = models.IntegerField(default=0)
height = models.IntegerField(default=0)
pre_width = models.IntegerField(default=0)
pre_height = models.IntegerField(default=0)
image = thumbs.ImageWithThumbsField(upload_to=get_upload_filename,
blank=True, sizes=(IMAGE_THUMB_SIZE,),
width_field='width',
height_field='height',
preview_width_field='pre_width',
preview_height_field='pre_height')
hash = models.CharField(max_length=HASH_LENGTH)
alias = models.TextField(unique=True, null=True, blank=True)
def save(self, *args, **kwargs):
"""
Saves the model and computes the image hash for deduplication purposes.
"""
if not self.pk and self.image:
self.hash = utils.get_file_hash(self.image)
super(PostImage, self).save(*args, **kwargs)
def __str__(self):
return self.image.url
def get_view(self):
metadata = '{}, {}'.format(self.image.name.split('.')[-1],
filesizeformat(self.image.size))
return '<div class="{}">' \
'<a class="{}" href="{full}">' \
'<img class="post-image-preview"' \
' src="{}"' \
' alt="{}"' \
' width="{}"' \
' height="{}"' \
' data-width="{}"' \
' data-height="{}" />' \
'</a>' \
'<div class="image-metadata">'\
'<a href="{full}" download>{image_meta}</a>'\
'</div>' \
'</div>'\
.format(CSS_CLASS_IMAGE, CSS_CLASS_THUMB,
self.image.url_200x150,
str(self.hash), str(self.pre_width),
str(self.pre_height), str(self.width), str(self.height),
full=self.image.url, image_meta=metadata)
def get_random_associated_post(self):
posts = boards.models.Post.objects.filter(images__in=[self])
return posts.order_by('?').first()