From 409c79415f9fe8142c75fec08509c31d30550333 Mon Sep 17 00:00:00 2001 From: Yohan Boniface Date: Wed, 13 Mar 2024 18:00:07 +0100 Subject: [PATCH] fix: deal with i18n in oembed URLs --- umap/tests/test_map_views.py | 12 ++++++++++++ umap/views.py | 6 ++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/umap/tests/test_map_views.py b/umap/tests/test_map_views.py index 6648c6c9..2e2046cc 100644 --- a/umap/tests/test_map_views.py +++ b/umap/tests/test_map_views.py @@ -7,6 +7,7 @@ from django.contrib.auth import get_user_model from django.core import mail from django.core.signing import Signer from django.urls import reverse +from django.utils import translation from umap.models import DataLayer, Map, Star @@ -815,6 +816,17 @@ def test_oembed_map(client, map, datalayer): ) +def test_oembed_map_with_non_default_language(client, map, datalayer): + translation.activate("en") + path = map.get_absolute_url() + assert path.startswith("/en/") + path = path.replace("/en/", "/fr/") + url = f"{reverse('map_oembed')}?url=http://testserver{path}" + response = client.get(url) + assert response.status_code == 200 + translation.activate("en") + + def test_oembed_link(client, map, datalayer): response = client.get(map.get_absolute_url()) assert response.status_code == 200 diff --git a/umap/views.py b/umap/views.py index 05187268..2929716c 100644 --- a/umap/views.py +++ b/umap/views.py @@ -38,11 +38,11 @@ from django.http import ( from django.middleware.gzip import re_accepts_gzip from django.shortcuts import get_object_or_404 from django.urls import resolve, reverse, reverse_lazy +from django.utils import translation from django.utils.encoding import smart_bytes from django.utils.http import http_date from django.utils.timezone import make_aware from django.utils.translation import gettext as _ -from django.utils.translation import to_locale from django.views.decorators.cache import cache_control from django.views.decorators.http import require_GET from django.views.generic import DetailView, TemplateView, View @@ -536,7 +536,7 @@ class MapDetailMixin: if hasattr(self.request, "LANGUAGE_CODE"): lang = self.request.LANGUAGE_CODE properties["lang"] = lang - locale = to_locale(lang) + locale = translation.to_locale(lang) properties["locale"] = locale context["locale"] = locale geojson = self.get_geojson() @@ -699,6 +699,8 @@ class MapOEmbed(View): raise Http404("Host not allowed.") url_path = parsed_url.path + lang = translation.get_language_from_path(url_path) + translation.activate(lang) view, args, kwargs = resolve(url_path) if "slug" not in kwargs or "map_id" not in kwargs: raise Http404("Invalid URL path.")