mirror of
https://github.com/Xevion/simple-viewer.git
synced 2025-12-06 01:16:24 -06:00
fix thumbnail dir not being created for new installs, add traceback printing for failed thumbnail printing, fix naive datetime object loading
on new installs, the thumbnail directory in /viewer/static is not created automatically when thumbnail generation fails for any reason, tracebacks are not printed i fixed the numerous warnings generated by not setting the DateTimeField to a datetime object with a timezone (fixed with dateutil package)
This commit is contained in:
@@ -3,3 +3,4 @@ humanize~=3.1.0
|
|||||||
django-jsonfield~=1.4.1
|
django-jsonfield~=1.4.1
|
||||||
opencv-python~=4.4.0.46
|
opencv-python~=4.4.0.46
|
||||||
Pillow~=8.0.1
|
Pillow~=8.0.1
|
||||||
|
python-dateutil~=2.8.1
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
|
import traceback
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
@@ -8,10 +9,16 @@ import humanize
|
|||||||
import jsonfield
|
import jsonfield
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
from dateutil.tz import tzlocal
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
from viewer import helpers
|
from viewer import helpers
|
||||||
|
|
||||||
|
try:
|
||||||
|
os.makedirs(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'static', 'thumbnails'))
|
||||||
|
except FileExistsError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class ServedDirectory(models.Model):
|
class ServedDirectory(models.Model):
|
||||||
"""
|
"""
|
||||||
@@ -105,7 +112,8 @@ class File(models.Model):
|
|||||||
fileLastModified = models.DateTimeField(null=True, default=None)
|
fileLastModified = models.DateTimeField(null=True, default=None)
|
||||||
size = models.PositiveIntegerField(null=True)
|
size = models.PositiveIntegerField(null=True)
|
||||||
resolution = models.OneToOneField(ImageResolution, on_delete=models.CASCADE, related_name='file', null=True)
|
resolution = models.OneToOneField(ImageResolution, on_delete=models.CASCADE, related_name='file', null=True)
|
||||||
thumbnailResolution = models.OneToOneField(ImageResolution, on_delete=models.CASCADE, related_name='real_file', null=True)
|
thumbnailResolution = models.OneToOneField(ImageResolution, on_delete=models.CASCADE, related_name='real_file',
|
||||||
|
null=True)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, full_path: str, parent: ServedDirectory, refresh: bool = True) -> 'File':
|
def create(cls, full_path: str, parent: ServedDirectory, refresh: bool = True) -> 'File':
|
||||||
@@ -134,7 +142,7 @@ class File(models.Model):
|
|||||||
"""Refresh this file's metadata"""
|
"""Refresh this file's metadata"""
|
||||||
self.lastRefreshed = timezone.now()
|
self.lastRefreshed = timezone.now()
|
||||||
|
|
||||||
fileLastModified = datetime.fromtimestamp(os.path.getmtime(self.path))
|
fileLastModified = datetime.fromtimestamp(os.path.getmtime(self.path), tz=tzlocal())
|
||||||
updated = fileLastModified != self.fileLastModified
|
updated = fileLastModified != self.fileLastModified
|
||||||
self.fileLastModified = fileLastModified
|
self.fileLastModified = fileLastModified
|
||||||
|
|
||||||
@@ -214,6 +222,7 @@ class File(models.Model):
|
|||||||
try:
|
try:
|
||||||
helpers.generate_thumbnail(self.path, self.__thumbs_path)
|
helpers.generate_thumbnail(self.path, self.__thumbs_path)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
print(f'Could not thumbnail: {self.filename}')
|
print(f'Could not thumbnail: {self.filename}')
|
||||||
self.delete_thumbnail()
|
self.delete_thumbnail()
|
||||||
|
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ def submit_new(request):
|
|||||||
if not os.path.isdir(request.POST['path']):
|
if not os.path.isdir(request.POST['path']):
|
||||||
raise ValueError('A invalid Directory was specified in the request.')
|
raise ValueError('A invalid Directory was specified in the request.')
|
||||||
s.save()
|
s.save()
|
||||||
|
s.refresh()
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return render(request, 'message.html', status=403,
|
return render(request, 'message.html', status=403,
|
||||||
context={'title': 'Invalid Options',
|
context={'title': 'Invalid Options',
|
||||||
|
|||||||
Reference in New Issue
Block a user