__init__.py
42 lines
| 1.3 KiB
| text/x-python
|
PythonLexer
neko259
|
r1368 | from django.db import models | ||
neko259
|
r1273 | |||
neko259
|
r1305 | from boards import utils | ||
neko259
|
r1286 | from boards.models.attachment.viewers import get_viewers, AbstractViewer | ||
neko259
|
r1382 | from boards.utils import get_upload_filename, get_file_mimetype, get_extension | ||
neko259
|
r1273 | |||
class AttachmentManager(models.Manager): | ||||
def create_with_hash(self, file): | ||||
neko259
|
r1305 | file_hash = utils.get_file_hash(file) | ||
neko259
|
r1273 | existing = self.filter(hash=file_hash) | ||
if len(existing) > 0: | ||||
attachment = existing[0] | ||||
else: | ||||
neko259
|
r1372 | # FIXME Use full mimetype here, need to modify viewers too | ||
neko259
|
r1382 | file_type = get_extension(file.name) | ||
neko259
|
r1371 | attachment = self.create(file=file, mimetype=file_type, | ||
hash=file_hash) | ||||
neko259
|
r1273 | |||
return attachment | ||||
class Attachment(models.Model): | ||||
objects = AttachmentManager() | ||||
neko259
|
r1368 | file = models.FileField(upload_to=get_upload_filename) | ||
neko259
|
r1273 | mimetype = models.CharField(max_length=50) | ||
hash = models.CharField(max_length=36) | ||||
def get_view(self): | ||||
file_viewer = None | ||||
neko259
|
r1286 | for viewer in get_viewers(): | ||
neko259
|
r1273 | if viewer.supports(self.mimetype): | ||
neko259
|
r1306 | file_viewer = viewer | ||
neko259
|
r1273 | break | ||
if file_viewer is None: | ||||
neko259
|
r1306 | file_viewer = AbstractViewer | ||
neko259
|
r1273 | |||
neko259
|
r1306 | return file_viewer(self.file, self.mimetype).get_view() | ||
neko259
|
r1273 | |||
neko259
|
r1389 | def __str__(self): | ||
return self.file.url | ||||