Caches é SQL optimisations

This commit is contained in:
loulous27 2025-11-23 14:43:49 +01:00
parent 213644d0af
commit f1673da45f
5 changed files with 69 additions and 14 deletions

View file

@ -3,7 +3,6 @@
import logging
import os
import random
import unicodedata
from datetime import datetime
from functools import partial
@ -16,6 +15,7 @@ from django.conf import settings
from django.core.exceptions import ValidationError
from django.core.files.base import ContentFile
from django.core.validators import RegexValidator
from django.core.cache import caches
from django.db import models
from django.template.defaultfilters import slugify
from django.urls import reverse
@ -25,6 +25,8 @@ from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _
from PIL import Image, ImageFile, ImageFilter
logger = logging.getLogger("photologue.models")
# Default limit for gallery.latest
@ -184,13 +186,15 @@ class Gallery(models.Model):
def sample(self, public=True):
"""Return a sample of photos, ordered at random."""
count = 1
if count > self.photo_count():
count = self.photo_count()
nb = self.photo_count(public) #Optimisation don't do twice the SQL requests
if nb < count:
count = nb
if public:
photo_set = self.photos.filter(is_public=True)
else:
photo_set = self.photos
return random.sample(list(photo_set), count)
return photo_set.order_by("?")[:count] # Use native SQL random
def photo_count(self, public=True):
"""Return a count of all the photos in this gallery."""
@ -721,10 +725,16 @@ class PhotoSizeCache:
def __init__(self):
self.__dict__ = self.__state
if not len(self.sizes):
sizes = PhotoSize.objects.all()
for size in sizes:
self.sizes[size.name] = size
cached = caches.get("PhotoSizeCache",None)
if cached is None :
if not len(self.sizes):
sizes = PhotoSize.objects.all()
for size in sizes:
self.sizes[size.name] = size
caches.set("PhotoSizeCache",self)
else :
self = cached
def reset(self):
global size_method_map