From 81c5984edc286e6840ef96cb9001a3a21788b9f1 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Thu, 13 Apr 2023 22:58:56 +0200 Subject: [PATCH] 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. --- scripts/runuwsgi_settings.py | 1 + src/ants_hub/api/views/ants.py | 10 +++++++++- src/ants_hub/data/models.py | 14 ++++---------- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/scripts/runuwsgi_settings.py b/scripts/runuwsgi_settings.py index b90d511..490ec8c 100644 --- a/scripts/runuwsgi_settings.py +++ b/scripts/runuwsgi_settings.py @@ -1,3 +1,4 @@ +BASE_URL = 'http://127.0.0.1:9040/' SECRET_KEY = '1234' LOGGING = { 'version': 1, diff --git a/src/ants_hub/api/views/ants.py b/src/ants_hub/api/views/ants.py index 17eb06e..5c7468f 100644 --- a/src/ants_hub/api/views/ants.py +++ b/src/ants_hub/api/views/ants.py @@ -7,8 +7,10 @@ import logging import secrets import sys import time +import urllib.parse import zoneinfo +from django.conf import settings from django.http import JsonResponse from django.utils.text import slugify @@ -155,6 +157,9 @@ def available_time_slots(request): 'lieu__collectivite__pk', '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: lieu_slug = slugify(lieu_nom) collectivite_slug = slugify(collectivite_nom) @@ -167,7 +172,10 @@ def available_time_slots(request): collectivite_pk=collectivite_pk, 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]: # prevent the same datetime to be reported multiple times date_by_lieu[lieu_pk].add(date) diff --git a/src/ants_hub/data/models.py b/src/ants_hub/data/models.py index 3dcd009..a65e30e 100644 --- a/src/ants_hub/data/models.py +++ b/src/ants_hub/data/models.py @@ -324,17 +324,11 @@ def make_available_time_slots(date, horaires, duree, **kwargs): start += datetime.timedelta(minutes=duree) +template_make_rdv_url = None + + def make_rdv_url(collectivite_pk, collectivite_slug, lieu_pk, lieu_slug, date): - return reverse( - 'rdv-redirect', - kwargs={ - 'collectivite_pk': collectivite_pk, - 'collectivite_slug': collectivite_slug, - 'lieu_pk': lieu_pk, - 'lieu_slug': lieu_slug, - 'date': date, - }, - ) + return f'rdv/{collectivite_slug}-{collectivite_pk}/{lieu_slug}-{lieu_pk}/{date.isoformat()}/' class Plage(models.Model):