From 7b64f48ad78caa5d4532588f66eb6ec3e90bec80 Mon Sep 17 00:00:00 2001 From: Christian Merten Date: Tue, 25 Feb 2025 01:55:46 +0100 Subject: [PATCH] fix: convert to str before normalizing name in esc_all --- jdav_web/members/templatetags/tex_extras.py | 2 +- jdav_web/members/tests.py | 5 +++++ jdav_web/utils.py | 10 +++++----- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/jdav_web/members/templatetags/tex_extras.py b/jdav_web/members/templatetags/tex_extras.py index 4f954a0..256266d 100644 --- a/jdav_web/members/templatetags/tex_extras.py +++ b/jdav_web/members/templatetags/tex_extras.py @@ -13,7 +13,7 @@ def checked_if_true(name, value): @register.filter def esc_all(val): - return mark_safe(str(normalize_name(val, False)).replace('_', '\\_').replace('&', '\\&')) + return mark_safe(str(normalize_name(str(val), False, False)).replace('_', '\\_').replace('&', '\\&')) @register.filter diff --git a/jdav_web/members/tests.py b/jdav_web/members/tests.py index 4484518..a1c6f64 100644 --- a/jdav_web/members/tests.py +++ b/jdav_web/members/tests.py @@ -207,6 +207,11 @@ class MemberTestCase(BasicMemberTestCase): response = c.get('/de' + url) self.assertEqual(response.status_code, 200, 'Members registration forms should be visible after staff login.') + def test_suggested_username(self): + self.fritz.prename = 'Päter' + self.fritz.lastname = 'Püt er' + self.assertEqual(self.fritz.suggested_username(), 'paeter.puet_er') + class PDFTestCase(TestCase): def setUp(self): diff --git a/jdav_web/utils.py b/jdav_web/utils.py index db3e93d..bf98729 100644 --- a/jdav_web/utils.py +++ b/jdav_web/utils.py @@ -63,9 +63,9 @@ def get_member(request): return request.user.member -def normalize_name(raw, nospaces=True): +def normalize_name(raw, nospaces=True, noumlaut=True): + if noumlaut: + raw = raw.replace('ö', 'oe').replace('ä', 'ae').replace('ü', 'ue') if nospaces: - noumlaut = raw.replace('ö', 'oe').replace('ä', 'ae').replace('ü', 'ue').replace(' ', '_') - else: - noumlaut = raw.replace('ö', 'oe').replace('ä', 'ae').replace('ü', 'ue') - return unicodedata.normalize('NFKD', noumlaut).encode('ascii', 'ignore').decode('ascii') + raw = raw.replace(' ', '_') + return unicodedata.normalize('NFKD', raw).encode('ascii', 'ignore').decode('ascii')