##// END OF EJS Templates
Speed up loading favorite list. Add reflinks to the list to see favorite...
Speed up loading favorite list. Add reflinks to the list to see favorite threads

File last commit:

r1320:c450e81f merge decentral
r1343:dff9bff4 default
Show More
__init__.py
63 lines | 1.7 KiB | text/x-python | PythonLexer
import hashlib
import os
import time
from random import random
from django.db import models
from boards import utils
from boards.models.attachment.viewers import get_viewers, AbstractViewer
FILES_DIRECTORY = 'files/'
FILE_EXTENSION_DELIMITER = '.'
class AttachmentManager(models.Manager):
def create_with_hash(self, file):
file_hash = utils.get_file_hash(file)
existing = self.filter(hash=file_hash)
if len(existing) > 0:
attachment = existing[0]
else:
file_type = file.name.split(FILE_EXTENSION_DELIMITER)[-1].lower()
attachment = Attachment.objects.create(
file=file, mimetype=file_type, hash=file_hash)
return attachment
class Attachment(models.Model):
objects = AttachmentManager()
# TODO Dedup the method
def _update_filename(self, filename):
"""
Gets unique filename
"""
# TODO Use something other than random number in file name
new_name = '{}{}.{}'.format(
str(int(time.mktime(time.gmtime()))),
str(int(random() * 1000)),
filename.split(FILE_EXTENSION_DELIMITER)[-1:][0])
return os.path.join(FILES_DIRECTORY, new_name)
file = models.FileField(upload_to=_update_filename)
mimetype = models.CharField(max_length=50)
hash = models.CharField(max_length=36)
def get_view(self):
file_viewer = None
for viewer in get_viewers():
if viewer.supports(self.mimetype):
file_viewer = viewer
break
if file_viewer is None:
file_viewer = AbstractViewer
return file_viewer(self.file, self.mimetype).get_view()