##// END OF EJS Templates
Allow to edit tag and post in the admin site
Allow to edit tag and post in the admin site

File last commit:

r1308:ced75ab0 default
r1367:2712a5bd default
Show More
image.py
114 lines | 3.7 KiB | text/x-python | PythonLexer
neko259
Moved post image to a separate model. Each post (as of model) can contain multiple images now. The image shown to the user is got with get_first_image method
r693 import hashlib
import os
from random import random
import time
neko259
Don't return posts with the same image in random view
r1249
neko259
Moved post image to a separate model. Each post (as of model) can contain multiple images now. The image shown to the user is got with get_first_image method
r693 from django.db import models
neko259
Added image format and size label to images
r1245 from django.template.defaultfilters import filesizeformat
neko259
Don't return posts with the same image in random view
r1249
neko259
Deduplicated file hash calculation method
r1305 from boards import thumbs, utils
neko259
Don't return posts with the same image in random view
r1249 import boards
neko259
Refactored post image
r931 from boards.models.base import Viewable
neko259
Moved post image to a separate model. Each post (as of model) can contain multiple images now. The image shown to the user is got with get_first_image method
r693
__author__ = 'neko259'
IMAGE_THUMB_SIZE = (200, 150)
IMAGES_DIRECTORY = 'images/'
FILE_EXTENSION_DELIMITER = '.'
neko259
Refactored post image
r931 HASH_LENGTH = 36
CSS_CLASS_IMAGE = 'image'
CSS_CLASS_THUMB = 'thumb'
neko259
Moved post image to a separate model. Each post (as of model) can contain multiple images now. The image shown to the user is got with get_first_image method
r693
neko259
Refactored post image code. Added a method to create an image or get an...
r1025 class PostImageManager(models.Manager):
def create_with_hash(self, image):
neko259
Deduplicated file hash calculation method
r1305 image_hash = utils.get_file_hash(image)
neko259
Refactored post image code. Added a method to create an image or get an...
r1025 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
neko259
Added random images, associated with the tag, to the tag page
r1252 def get_random_images(self, count, include_archived=False, tags=None):
images = self.filter(post_images__thread__archived=include_archived)
if tags is not None:
neko259
Show link to posts in this tag for the tag image even if the image is used in...
r1263 images = images.filter(post_images__threads__tags__in=tags)
neko259
Added random images, associated with the tag, to the tag page
r1252 return images.order_by('?')[:count]
neko259
Don't return posts with the same image in random view
r1249
neko259
Refactored post image code. Added a method to create an image or get an...
r1025
neko259
Refactored post image
r931 class PostImage(models.Model, Viewable):
neko259
Refactored post image code. Added a method to create an image or get an...
r1025 objects = PostImageManager()
neko259
Moved post image to a separate model. Each post (as of model) can contain multiple images now. The image shown to the user is got with get_first_image method
r693 class Meta:
app_label = 'boards'
ordering = ('id',)
neko259
Fixed image filenames
r714 def _update_image_filename(self, filename):
neko259
Moved post image to a separate model. Each post (as of model) can contain multiple images now. The image shown to the user is got with get_first_image method
r693 """
Gets unique image filename
"""
neko259
Refactored post image code. Added a method to create an image or get an...
r1025 # TODO Use something other than random number in file name
new_name = '{}{}.{}'.format(
neko259
Refactoring
r1027 str(int(time.mktime(time.gmtime()))),
str(int(random() * 1000)),
filename.split(FILE_EXTENSION_DELIMITER)[-1:][0])
neko259
Moved post image to a separate model. Each post (as of model) can contain multiple images now. The image shown to the user is got with get_first_image method
r693
neko259
Added support for different attachment types
r1273 return os.path.join(IMAGES_DIRECTORY, new_name)
neko259
Moved post image to a separate model. Each post (as of model) can contain multiple images now. The image shown to the user is got with get_first_image method
r693
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=_update_image_filename,
blank=True, sizes=(IMAGE_THUMB_SIZE,),
width_field='width',
height_field='height',
preview_width_field='pre_width',
preview_height_field='pre_height')
neko259
Refactored post image
r931 hash = models.CharField(max_length=HASH_LENGTH)
neko259
Moved post image to a separate model. Each post (as of model) can contain multiple images now. The image shown to the user is got with get_first_image method
r693
def save(self, *args, **kwargs):
"""
Saves the model and computes the image hash for deduplication purposes.
"""
if not self.pk and self.image:
neko259
Deduplicated file hash calculation method
r1305 self.hash = utils.get_file_hash(self.image)
neko259
Moved post image to a separate model. Each post (as of model) can contain multiple images now. The image shown to the user is got with get_first_image method
r693 super(PostImage, self).save(*args, **kwargs)
neko259
Made post image use url as a string in admin site
r812 def __str__(self):
return self.image.url
neko259
Refactored post image
r931 def get_view(self):
neko259
Added image format and size label to images
r1245 metadata = '{}, {}'.format(self.image.name.split('.')[-1],
filesizeformat(self.image.size))
neko259
Refactored post image
r931 return '<div class="{}">' \
neko259
Setting for image view mode: in post (simple) or in popup
r1122 '<a class="{}" href="{full}">' \
'<img class="post-image-preview"' \
neko259
Refactored post image
r931 ' src="{}"' \
' alt="{}"' \
' width="{}"' \
' height="{}"' \
' data-width="{}"' \
' data-height="{}" />' \
'</a>' \
neko259
Removed obsolete code. Added download link to files
r1308 '<div class="image-metadata">'\
'<a href="{full}" download>{image_meta}</a>'\
'</div>' \
neko259
Refactored post image
r931 '</div>'\
neko259
Setting for image view mode: in post (simple) or in popup
r1122 .format(CSS_CLASS_IMAGE, CSS_CLASS_THUMB,
neko259
Refactored post image
r931 self.image.url_200x150,
str(self.hash), str(self.pre_width),
neko259
Added image format and size label to images
r1245 str(self.pre_height), str(self.width), str(self.height),
full=self.image.url, image_meta=metadata)
neko259
Don't return posts with the same image in random view
r1249
neko259
Speed up getting tag's random image
r1264 def get_random_associated_post(self):
neko259
Show link to posts in this tag for the tag image even if the image is used in...
r1263 posts = boards.models.Post.objects.filter(images__in=[self])
return posts.order_by('?').first()