misc: optimize generation of rdv url

reverse() and request.build_absolute_uri() are expensive, replace them
by staticaly generating URLs with a BASE_URL setting.
This commit is contained in:
Benjamin Dauvergne 2023-04-13 22:58:56 +02:00
parent f6466af00c
commit 81c5984edc
3 changed files with 14 additions and 11 deletions

View File

@ -1,3 +1,4 @@
BASE_URL = 'http://127.0.0.1:9040/'
SECRET_KEY = '1234' SECRET_KEY = '1234'
LOGGING = { LOGGING = {
'version': 1, 'version': 1,

View File

@ -7,8 +7,10 @@ import logging
import secrets import secrets
import sys import sys
import time import time
import urllib.parse
import zoneinfo import zoneinfo
from django.conf import settings
from django.http import JsonResponse from django.http import JsonResponse
from django.utils.text import slugify from django.utils.text import slugify
@ -155,6 +157,9 @@ def available_time_slots(request):
'lieu__collectivite__pk', 'lieu__collectivite__pk',
'lieu__collectivite__nom', 'lieu__collectivite__nom',
) )
base_url = getattr(settings, 'BASE_URL', None)
if not base_url:
base_callback_url = request.build_absolute_uri('/')
for date, horaires, duree, lieu_pk, lieu_nom, collectivite_pk, collectivite_nom in qs: for date, horaires, duree, lieu_pk, lieu_nom, collectivite_pk, collectivite_nom in qs:
lieu_slug = slugify(lieu_nom) lieu_slug = slugify(lieu_nom)
collectivite_slug = slugify(collectivite_nom) collectivite_slug = slugify(collectivite_nom)
@ -167,7 +172,10 @@ def available_time_slots(request):
collectivite_pk=collectivite_pk, collectivite_pk=collectivite_pk,
collectivite_slug=collectivite_slug, collectivite_slug=collectivite_slug,
): ):
callback_url = request.build_absolute_uri(url) if not base_url:
callback_url = urllib.parse.urljoin(base_callback_url, url)
else:
callback_url = base_url + url
if date not in date_by_lieu[lieu_pk]: if date not in date_by_lieu[lieu_pk]:
# prevent the same datetime to be reported multiple times # prevent the same datetime to be reported multiple times
date_by_lieu[lieu_pk].add(date) date_by_lieu[lieu_pk].add(date)

View File

@ -324,17 +324,11 @@ def make_available_time_slots(date, horaires, duree, **kwargs):
start += datetime.timedelta(minutes=duree) start += datetime.timedelta(minutes=duree)
template_make_rdv_url = None
def make_rdv_url(collectivite_pk, collectivite_slug, lieu_pk, lieu_slug, date): def make_rdv_url(collectivite_pk, collectivite_slug, lieu_pk, lieu_slug, date):
return reverse( return f'rdv/{collectivite_slug}-{collectivite_pk}/{lieu_slug}-{lieu_pk}/{date.isoformat()}/'
'rdv-redirect',
kwargs={
'collectivite_pk': collectivite_pk,
'collectivite_slug': collectivite_slug,
'lieu_pk': lieu_pk,
'lieu_slug': lieu_slug,
'date': date,
},
)
class Plage(models.Model): class Plage(models.Model):