Skip to content

Commit 31ebc40

Browse files
committed
Added deduplication for strings with 'ref' property.
Bug fixing
1 parent 081a671 commit 31ebc40

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

python_twine/twine/formatters/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
from twine.twine_file import TwineFile, TwineDefinition, TwineSection
1313
from twine.output_processor import OutputProcessor
1414

15-
def flatten(input: List[List[str]]) -> List[str]:
15+
def flatten(input: Optional[List[List[str]]]) -> List[str]:
16+
if input is None:
17+
return []
1618
flat = []
1719
for group in input:
1820
flat += group

python_twine/twine/formatters/apple.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,13 @@ def match_default_lang_translation(self, key:str, lang:str, value:str):
109109
return False
110110
if default_lang == lang:
111111
return False
112-
return self.twine_file.definitions_by_key[key].translations[default_lang] == value
112+
definition = self.twine_file.definitions_by_key[key]
113+
if default_lang in definition.translations:
114+
return definition.translations[default_lang] == value
115+
elif definition.reference is not None:
116+
return definition.reference.translations[default_lang] == value
117+
else:
118+
raise Exception(f"Default language '{default_lang}' is not available for key [{key}]")
113119

114120
def format_file(self, lang: str) -> Optional[str]:
115121
"""Format file with trailing newline."""

python_twine/twine/twine_file.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,13 @@ def get_developer_language_code(self) -> Optional[str]:
199199
return None
200200

201201
def optimize_duplicates(self):
202+
# Check if translation matches value from 'ref' definition.
203+
for key, definition in self.definitions_by_key.items():
204+
if definition.reference is not None:
205+
ref = definition.reference
206+
definition.translations = {lang:value for lang, value in definition.translations.items()
207+
if lang not in ref.translations or ref.translations[lang] != value}
208+
202209
""" Some regional languages have common items. Such as 'en-GB' and 'en'.
203210
Deduplication: for each item and each language search the same translations
204211
within fallback languages. Not all languages have fallbacks.
@@ -217,7 +224,7 @@ def match_fallback_lang(self, translations: dict, lang:str, key:str, value: Any)
217224
return True
218225
return False
219226

220-
def fallback_languages(self, language: str) -> List[str]:
227+
def fallback_languages(self, language: str, include_default:bool = False) -> List[str]:
221228
fallbacks = []
222229

223230
# Check specific mapping
@@ -231,6 +238,9 @@ def fallback_languages(self, language: str) -> List[str]:
231238
generic_language = match.group(1)
232239
fallbacks.append(generic_language)
233240

241+
if include_default and language != self.get_developer_language_code():
242+
fallbacks.append(self.get_developer_language_code())
243+
234244
# Remove duplicates while preserving order
235245
seen = set()
236246
result = []

0 commit comments

Comments
 (0)