From 199254f960520277e972c6d47e1f455a40428646 Mon Sep 17 00:00:00 2001 From: LePetitTim Date: Thu, 19 Jan 2023 10:23:35 +0100 Subject: [PATCH] :bug: Change for absolute url on trek's description in api v2 (#3321) --- docs/changelog.rst | 4 ++++ geotrek/api/tests/test_v2.py | 5 ++++- geotrek/api/v2/serializers.py | 24 +++++++++++++++++++++++- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 050cc3be8a..f322dc811a 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -41,7 +41,11 @@ In preparation for HD Views developments (PR #3298) - Check pictogram exist on categories during generation of pdfs - Fix ApidaeParsers does not update every time - Add fixtures licenses initial install +<<<<<<< HEAD - Fix default conf nginx for mobile +======= +- Replace image's relative URLs with absolute URLs in API v2 trek descriptions (#3321) +>>>>>>> 84e5d741b... :bug: Change for absolute url on trek's description in api v2 2.94.0 (2022-12-12) diff --git a/geotrek/api/tests/test_v2.py b/geotrek/api/tests/test_v2.py index b715ce3f72..86245b8912 100644 --- a/geotrek/api/tests/test_v2.py +++ b/geotrek/api/tests/test_v2.py @@ -341,7 +341,10 @@ def setUpTestData(cls): reservation_system=cls.reservation_system, practice=cls.practice, difficulty=cls.difficulty, - accessibility_level=cls.accessibility_level + accessibility_level=cls.accessibility_level, + description='

Description

' + 'Descent' + '' ) cls.parent.accessibilities.add(cls.accessibility) cls.parent.source.add(cls.source) diff --git a/geotrek/api/v2/serializers.py b/geotrek/api/v2/serializers.py index a27e814f65..e2c0f1728f 100644 --- a/geotrek/api/v2/serializers.py +++ b/geotrek/api/v2/serializers.py @@ -1,3 +1,4 @@ +from bs4 import BeautifulSoup import json from django.conf import settings @@ -618,8 +619,29 @@ def get_published(self, obj): def get_name(self, obj): return get_translation_or_dict('name', self, obj) + def replace_src_absolute(self, data): + soup = BeautifulSoup(data, features="lxml") + imgs = soup.find_all('img') + for img in imgs: + if img.attrs['src'][0] == '/': + img['src'] = f'{self.context.get("request").build_absolute_uri("/")}{img.attrs["src"]}' + def get_description(self, obj): - return get_translation_or_dict('description', self, obj) + lang = self.context.get('request').GET.get('language', 'all') if self.context.get('request') else 'all' + + if lang != 'all': + data = getattr(obj, '{}_{}'.format('description', lang)) + if data: + self.replace_src_absolute(data) + else: + data = {} + for language in settings.MODELTRANSLATION_LANGUAGES: + data_lang = getattr(obj, '{}_{}'.format('description', language), ) + if data_lang: + self.replace_src_absolute(data_lang) + data.update({language: data_lang}) + + return data def get_access(self, obj): return get_translation_or_dict('access', self, obj)