Merge pull request #1688 from umap-project/fix-oembed-i18n
fix: deal with i18n in oembed URLs
This commit is contained in:
commit
8cc6d58752
2 changed files with 16 additions and 2 deletions
|
@ -7,6 +7,7 @@ from django.contrib.auth import get_user_model
|
||||||
from django.core import mail
|
from django.core import mail
|
||||||
from django.core.signing import Signer
|
from django.core.signing import Signer
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
from django.utils import translation
|
||||||
|
|
||||||
from umap.models import DataLayer, Map, Star
|
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):
|
def test_oembed_link(client, map, datalayer):
|
||||||
response = client.get(map.get_absolute_url())
|
response = client.get(map.get_absolute_url())
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
|
|
|
@ -38,11 +38,11 @@ from django.http import (
|
||||||
from django.middleware.gzip import re_accepts_gzip
|
from django.middleware.gzip import re_accepts_gzip
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from django.urls import resolve, reverse, reverse_lazy
|
from django.urls import resolve, reverse, reverse_lazy
|
||||||
|
from django.utils import translation
|
||||||
from django.utils.encoding import smart_bytes
|
from django.utils.encoding import smart_bytes
|
||||||
from django.utils.http import http_date
|
from django.utils.http import http_date
|
||||||
from django.utils.timezone import make_aware
|
from django.utils.timezone import make_aware
|
||||||
from django.utils.translation import gettext as _
|
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.cache import cache_control
|
||||||
from django.views.decorators.http import require_GET
|
from django.views.decorators.http import require_GET
|
||||||
from django.views.generic import DetailView, TemplateView, View
|
from django.views.generic import DetailView, TemplateView, View
|
||||||
|
@ -536,7 +536,7 @@ class MapDetailMixin:
|
||||||
if hasattr(self.request, "LANGUAGE_CODE"):
|
if hasattr(self.request, "LANGUAGE_CODE"):
|
||||||
lang = self.request.LANGUAGE_CODE
|
lang = self.request.LANGUAGE_CODE
|
||||||
properties["lang"] = lang
|
properties["lang"] = lang
|
||||||
locale = to_locale(lang)
|
locale = translation.to_locale(lang)
|
||||||
properties["locale"] = locale
|
properties["locale"] = locale
|
||||||
context["locale"] = locale
|
context["locale"] = locale
|
||||||
geojson = self.get_geojson()
|
geojson = self.get_geojson()
|
||||||
|
@ -699,6 +699,8 @@ class MapOEmbed(View):
|
||||||
raise Http404("Host not allowed.")
|
raise Http404("Host not allowed.")
|
||||||
|
|
||||||
url_path = parsed_url.path
|
url_path = parsed_url.path
|
||||||
|
lang = translation.get_language_from_path(url_path)
|
||||||
|
translation.activate(lang)
|
||||||
view, args, kwargs = resolve(url_path)
|
view, args, kwargs = resolve(url_path)
|
||||||
if "slug" not in kwargs or "map_id" not in kwargs:
|
if "slug" not in kwargs or "map_id" not in kwargs:
|
||||||
raise Http404("Invalid URL path.")
|
raise Http404("Invalid URL path.")
|
||||||
|
|
Loading…
Reference in a new issue