Skip to content

Commit 8724d29

Browse files
authored
SW-1783 unicode translations fix (mrbeam#1574)
1 parent 77cf8d5 commit 8724d29

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

octoprint_mrbeam/services/document_service.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@ def get_document_simple_for(self, definition, language):
4747
def _get_title_translated(self, definition):
4848
title_key = string_util.separate_camelcase_words(definition.mrbeamdoc_type.value)
4949
title_translated = gettext(title_key)
50-
self._log_error_on_missing_translation(title_key, str(title_translated))
50+
if title_translated:
51+
self._log_error_on_missing_translation(title_key, title_translated.encode('utf-8', 'ignore'))
52+
else:
53+
self._logger.error('title_translated is None. This should never be the case. Please check me.')
5154
return title_translated
5255

5356
@staticmethod

tests/services/test_burger_menu_service.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# -*- coding: utf-8 -*-
12
from unittest import TestCase
23

34
from mock import patch, MagicMock
@@ -52,3 +53,36 @@ def test_get_burger_menu_model__with_supported_language__should_return_documents
5253
self.assertIsNot(len(burger_menu_model.documents), 0)
5354
for document in burger_menu_model.documents:
5455
self.assertEquals(document.document_link.language, SupportedLanguage.GERMAN)
56+
57+
@patch('octoprint_mrbeam.services.burger_menu_service.MrBeamDocUtils.get_mrbeam_definitions_for')
58+
@patch('octoprint_mrbeam.services.document_service.gettext')
59+
@patch('octoprint_mrbeam.services.burger_menu_service.get_locale')
60+
def test_get_burger_menu_model__with_unicode_translation__should_work(self, get_locale_mock, get_text_mock,
61+
get_mrbeam_definitions_for_mock):
62+
get_locale_mock.return_value = MagicMock(language='es')
63+
get_text_mock.return_value = u'Guía de usuário äëïöü l\'ecole très Garçon sûr'
64+
MOCK_DEFINITION = MrBeamDocDefinition(MrBeamDocType.USER_MANUAL, MrBeamModel.MRBEAM2,
65+
[SupportedLanguage.ENGLISH, SupportedLanguage.SPANISH])
66+
get_mrbeam_definitions_for_mock.return_value = [MOCK_DEFINITION]
67+
burger_menu_model = self._burger_menu_service.get_burger_menu_model(MrBeamModel.MRBEAM2.value)
68+
self.assertIsNot(len(burger_menu_model.documents), 0)
69+
for document in burger_menu_model.documents:
70+
self.assertEquals(document.document_link.language, SupportedLanguage.SPANISH)
71+
72+
@patch('octoprint_mrbeam.services.burger_menu_service.MrBeamDocUtils.get_mrbeam_definitions_for')
73+
@patch('octoprint_mrbeam.services.document_service.gettext')
74+
@patch('octoprint_mrbeam.services.burger_menu_service.get_locale')
75+
def test_get_burger_menu_model__with_null_translation__should_not_crash_and_return_title_as_None(self,
76+
get_locale_mock,
77+
get_text_mock,
78+
get_mrbeam_definitions_for_mock):
79+
get_locale_mock.return_value = MagicMock(language='es')
80+
get_text_mock.return_value = None
81+
MOCK_DEFINITION = MrBeamDocDefinition(MrBeamDocType.USER_MANUAL, MrBeamModel.MRBEAM2,
82+
[SupportedLanguage.ENGLISH, SupportedLanguage.SPANISH])
83+
get_mrbeam_definitions_for_mock.return_value = [MOCK_DEFINITION]
84+
burger_menu_model = self._burger_menu_service.get_burger_menu_model(MrBeamModel.MRBEAM2.value)
85+
self.assertIsNot(len(burger_menu_model.documents), 0)
86+
for document in burger_menu_model.documents:
87+
self.assertEquals(document.document_link.language, SupportedLanguage.SPANISH)
88+
self.assertEquals(document.title, None)

0 commit comments

Comments
 (0)