Adds --locale option to screenshot generator; DE translation update

* Filter out LANCZOS deprecation warnings from pytest output
* Prevent ScreenshotRenderer from attempting to capture background task rendering jobs.
* Bugfix to stop loading screen spinner if PSBTParser fails.
*
This commit is contained in:
kdmukai
2022-05-25 10:29:25 -05:00
parent 8bedaa29f3
commit 5f875fa5af
8 changed files with 84 additions and 55 deletions
+4 -1
View File
@@ -1,2 +1,5 @@
[pytest]
testpaths = tests
testpaths = tests
filterwarnings =
# LANCZOS is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.LANCZOS instead.
ignore::DeprecationWarning:qrcode.*
+4 -1
View File
@@ -34,7 +34,10 @@ class Renderer(ConfigurableSingleton):
renderer.draw = ImageDraw.Draw(renderer.canvas)
def show_image(self, image=None, alpha_overlay=None):
def show_image(self, image=None, alpha_overlay=None, is_background_thread: bool = False):
"""
is_background_thread: Only used by the ScreenshotRenderer.
"""
if alpha_overlay:
if image == None:
image = self.canvas
+1 -1
View File
@@ -187,7 +187,7 @@ class LoadingScreenThread(BaseThread):
width=GUIConstants.COMPONENT_PADDING
)
renderer.show_image()
renderer.show_image(is_background_thread=True)
position += arc_sweep
@@ -91,7 +91,7 @@ msgstr "{}..."
#: src/seedsigner/gui/screens/psbt_screens.py:136
msgid "self-transfer"
msgstr "selbst zahlung"
msgstr "selbst zahlungs"
#: src/seedsigner/gui/screens/psbt_screens.py:139
msgid "recipient 1"
@@ -144,7 +144,7 @@ msgstr[1] "Empfänger"
#. Denonination is inserted (e.g. your "btc change" or "sats change")
#: src/seedsigner/gui/screens/psbt_screens.py:566
msgid "{} change"
msgstr "{} change"
msgstr "{} wechselg."
#: src/seedsigner/gui/screens/psbt_screens.py:671
msgid "Address verified!"
@@ -166,7 +166,7 @@ msgstr "Signierte PSBT"
#. etc)
#: src/seedsigner/gui/screens/psbt_screens.py:713
msgid "Export as a QR code for:"
msgstr "Als QR Code exportieren, für::"
msgstr "QR Code exportieren für:"
#: src/seedsigner/gui/screens/scan_screens.py:22
msgid "Scan a QR code"
@@ -174,7 +174,7 @@ msgstr "Scanne einen QR Code"
#: src/seedsigner/gui/screens/scan_screens.py:138
msgid "Settings QR"
msgstr "Einstellungs QR"
msgstr "QR Konfig."
#: src/seedsigner/gui/screens/scan_screens.py:156
msgid "Settings imported successfully!"
@@ -218,7 +218,7 @@ msgstr "Fingerabruck"
#. Displays the page number and total: (e.g. page 1 of 6)
#: src/seedsigner/gui/screens/seed_screens.py:461
msgid "Seed Words: {}/{}"
msgstr "Seed-Phrase: {}/{}"
msgstr "Seed Wörter: {}/{}"
#: src/seedsigner/gui/screens/seed_screens.py:541
msgid "Verify Backup?"
@@ -261,7 +261,7 @@ msgstr "Xpub"
#: src/seedsigner/gui/screens/seed_screens.py:754
#: src/seedsigner/views/seed_views.py:217
msgid "Add Passphrase"
msgstr "Passphrase hinzufügen"
msgstr "Passphrase hinzufüg."
#: src/seedsigner/gui/screens/seed_screens.py:1106
msgid "Verify Passphrase"
@@ -311,8 +311,8 @@ msgid ""
"Optionally scan your transcribed SeedQR to confirm that it reads back "
"correctly."
msgstr ""
"Optional können Sie Ihren übersetzten SeedQR scannen um zu verifizieren, "
"dass er korrekt gelesen wird."
"Optional, übersetzten SeedQR scannen um zu verifizieren, dass er korrekt "
"gelesen wird."
#: src/seedsigner/gui/screens/seed_screens.py:1468
#: src/seedsigner/views/seed_views.py:1284
@@ -344,7 +344,7 @@ msgstr "Deskriptor geladen"
#. Label for the multisig wallet's signing policy (e.g. 2-of-3)
#: src/seedsigner/gui/screens/seed_screens.py:1568
msgid "Policy"
msgstr "Richtlinie"
msgstr "Policy"
#: src/seedsigner/gui/screens/seed_screens.py:1576
msgid "Signing Keys"
@@ -354,7 +354,7 @@ msgstr "Singnier Schlüssel"
#: src/seedsigner/views/main_menu_views.py:21
#: src/seedsigner/views/settings_views.py:36
msgid "Settings"
msgstr "Einst."
msgstr "Setup"
#. Short for "Input/Output"; screen to make sure the buttons and camera are
#. working properly
@@ -412,7 +412,7 @@ msgstr " < wiederholen | akzeptieren > "
#: src/seedsigner/gui/screens/tools_screens.py:120
#: src/seedsigner/gui/screens/tools_screens.py:245
msgid "Dice Roll {}/{}"
msgstr "Würfeln {}/{}"
msgstr "Wurf {}/{}"
#: src/seedsigner/gui/screens/tools_screens.py:274
msgid "12th Word"
@@ -526,7 +526,7 @@ msgstr "Koordinator Software"
#: src/seedsigner/models/settings_definition.py:383
msgid "Denomination display"
msgstr "Nennwertanzeige"
msgstr "Sats/Btc anzeige"
#: src/seedsigner/models/settings_definition.py:392
msgid "Bitcoin network"
@@ -534,7 +534,7 @@ msgstr "Bitcoin Netzwerk"
#: src/seedsigner/models/settings_definition.py:400
msgid "QR code density"
msgstr "QR Code Dichte"
msgstr "Auflösung QR Code"
#: src/seedsigner/models/settings_definition.py:408
msgid "Xpub export"
@@ -566,11 +566,11 @@ msgstr "Kompakt SeedQR"
#: src/seedsigner/models/settings_definition.py:458
msgid "Show privacy warnings"
msgstr "Zeige Privatsphäre Warnungen"
msgstr "Privatsphäre Warnungen"
#: src/seedsigner/models/settings_definition.py:464
msgid "Show dire warnings"
msgstr "Zeige dringliche Warnungen"
msgstr "dringliche Warnungen"
#: src/seedsigner/models/settings_definition.py:470
msgid "Show partner logos"
@@ -625,7 +625,7 @@ msgstr "Analysiert PSBT... "
#: src/seedsigner/views/psbt_views.py:155
msgid "Unsupported Script Type!"
msgstr "Nicht unterstützter Skipt Typ!"
msgstr "Skript nicht unterstützt!"
#: src/seedsigner/views/psbt_views.py:156
msgid ""
@@ -701,9 +701,7 @@ msgstr "Verifiziere Selbstzahlung..."
msgid ""
"PSBT's {} address could not be verified with your multisig wallet "
"descriptor."
msgstr ""
"PSBT Adresse {} konnte mit Ihrem Multisig-Wallet Deskriptor nicht "
"verifiziert werden."
msgstr "PSBT Adresse {} konnte mit Ihrem Deskriptor nicht verifiziert werden."
#: src/seedsigner/views/psbt_views.py:433
msgid "Suspicious PSBT"
@@ -711,7 +709,7 @@ msgstr "Verdächtige PSBT"
#: src/seedsigner/views/psbt_views.py:434
msgid "PSBT's {} address could not be generated from your seed."
msgstr "PSBT's {} Adresse konnte von Ihrem Seed nicht generiert werden."
msgstr "PSBT's {}. Adresse konnte vom Seed nicht generiert werden."
#: src/seedsigner/views/psbt_views.py:438
msgid "Address Verification Failed"
@@ -764,11 +762,11 @@ msgstr "Scanne einen SeedQR"
#: src/seedsigner/views/seed_views.py:78
msgid "Enter 24-word seed"
msgstr "24-Wort Seed Eingabe"
msgstr "24Wort Seed Eingabe"
#: src/seedsigner/views/seed_views.py:79
msgid "Enter 12-word seed"
msgstr "12-Wort Seed Eingabe"
msgstr "12Wort Seed Eingabe"
#: src/seedsigner/views/seed_views.py:80
msgid "Create a seed"
@@ -799,7 +797,7 @@ msgstr "Ungültiger Seed!"
#: src/seedsigner/views/seed_views.py:194
msgid "Checksum failure; not a valid seed phrase."
msgstr "Prüfsumme fehlerhaft, keine valide Seedphrase."
msgstr "Prüfsumme fehlerhaft, kein valider Seed."
#: src/seedsigner/views/seed_views.py:216
#: src/seedsigner/views/seed_views.py:268
@@ -866,7 +864,7 @@ msgstr "Generiere xpub..."
#: src/seedsigner/views/seed_views.py:771
msgid "You must keep your seed words private & away from all online devices."
msgstr ""
"Halten Sie Ihre Seed-Phrase privat & geben sie diese NIE in ein Gerät mit "
"Halten Sie Ihren Seed privat & geben sie diese NIE in ein Gerät mit "
"Internetzugang ein."
#: src/seedsigner/views/seed_views.py:836
@@ -931,24 +929,22 @@ msgstr "SeedQR Format"
#: src/seedsigner/views/seed_views.py:1052
msgid "SeedQR is your private key!"
msgstr "SeedQR ist Ihr privater Schlüssel!"
msgstr "Der SeedQR ist dein privater Schlüssel!"
#: src/seedsigner/views/seed_views.py:1053
msgid "Never photograph it or scan it into an online device."
msgstr ""
"Fotografieren Sie diesen niemals und scannen Sie Ihn auch niemals mit einem "
"Online-Gerät."
msgstr "Niemals mit einem online Gerät scannen bzw. fotografieren!"
#: src/seedsigner/views/seed_views.py:1145
#: src/seedsigner/views/seed_views.py:1189
#: src/seedsigner/views/seed_views.py:1200
#: src/seedsigner/views/seed_views.py:1212
msgid "Confirm SeedQR"
msgstr "SeedQR bestätigen"
msgstr "SeedQR verifizieren"
#: src/seedsigner/views/seed_views.py:1150
msgid "Confirm SeedQR?"
msgstr "SeedQR bestätigen?"
msgstr "SeedQR verifizieren?"
#: src/seedsigner/views/seed_views.py:1180
msgid "Scan your SeedQR"
@@ -1050,15 +1046,15 @@ msgstr "Entwickler Optionen"
#: src/seedsigner/views/tools_views.py:24
msgid " New seed"
msgstr "Neuer Seed"
msgstr "Generiere Seed"
#: src/seedsigner/views/tools_views.py:25
msgid "New seed"
msgstr "Neuer Seed"
msgstr "Würfle Seed"
#: src/seedsigner/views/tools_views.py:26
msgid "Calc 12th/24th word"
msgstr "Berechne 12./24. Wort"
msgstr "Ber. 12./24. Wort"
#: src/seedsigner/views/tools_views.py:102
#: src/seedsigner/views/tools_views.py:228
@@ -1076,16 +1072,16 @@ msgstr "Seedphrasen Länge?"
#: src/seedsigner/views/tools_views.py:174
msgid "12 words (50 rolls)"
msgstr "12 Wörter (50 würfe)"
msgstr "12 Wörter (50 Würfe)"
#: src/seedsigner/views/tools_views.py:175
msgid "24 words (99 rolls)"
msgstr "24 Wörter (99 würfe)"
msgstr "24 Wörter (99 Würfe)"
#: src/seedsigner/views/tools_views.py:179
#: src/seedsigner/views/tools_views.py:233
msgid "Mnemonic Length"
msgstr "Seedphrasen länge"
msgstr "Seedphrasen Länge"
#: src/seedsigner/views/tools_views.py:258
msgid "Load seed"
+10 -6
View File
@@ -87,11 +87,15 @@ class PSBTOverviewView(View):
if not self.controller.psbt_parser or self.controller.psbt_parser.seed != self.controller.psbt_seed:
# Must run the PSBTParser or re-parse
self.controller.psbt_parser = PSBTParser(
self.controller.psbt,
seed=self.controller.psbt_seed,
network=self.settings.get_value(SettingsConstants.SETTING__NETWORK)
)
try:
self.controller.psbt_parser = PSBTParser(
self.controller.psbt,
seed=self.controller.psbt_seed,
network=self.settings.get_value(SettingsConstants.SETTING__NETWORK)
)
except Exception as e:
self.loading_screen.stop()
raise e
def run(self):
@@ -260,7 +264,7 @@ class PSBTAddressDetailsView(View):
if selected_menu_num == 0:
if self.address_num < len(psbt_parser.destination_addresses) - 1:
# Show the next receive addr
return Destination(PSBTAddressDetailsView, view_args={"address_num": self.address_num + 1, "is_change": False})
return Destination(PSBTAddressDetailsView, view_args={"address_num": self.address_num + 1})
elif psbt_parser.change_amount > 0:
# Move on to display change
+11
View File
@@ -0,0 +1,11 @@
import pytest
def pytest_addoption(parser):
parser.addoption("--locale", action="store", default=None)
@pytest.fixture(scope='session')
def target_locale(request):
return request.config.option.locale
+18 -9
View File
@@ -20,7 +20,8 @@ from seedsigner.views.view import View
from .utils import ScreenshotComplete, ScreenshotRenderer
def test_generate_screenshots():
def test_generate_screenshots(target_locale):
"""
The `Renderer` class is mocked so that calls in the normal code are ignored
(necessary to avoid having it trying to wire up hardware dependencies).
@@ -157,22 +158,24 @@ def test_generate_screenshots():
"Settings Views": settings_views_list,
}
main_readme = """# SeedSigner Screenshots \n\n"""
for locale, display_name in SettingsConstants.ALL_LOCALES:
locales = []
if target_locale is None:
locales = SettingsConstants.ALL_LOCALES
else:
locales = [locale_tuple for locale_tuple in SettingsConstants.ALL_LOCALES if locale_tuple[0] == target_locale]
if not locales:
raise Exception(f"Invalid locale: {target_locale}")
for locale, display_name in locales:
Settings.get_instance().set_value(SettingsConstants.SETTING__LOCALE, value=locale)
screenshot_renderer.set_screenshot_path(os.path.join(screenshot_root, locale))
main_readme += f"* [{display_name}]({locale}/README.md)\n"
locale_readme = f"""# SeedSigner Screenshots: {display_name}\n"""
# Report the translation progress
if locale != SettingsConstants.LOCALE__ENGLISH:
# DEBUGGING
continue
# /DEBUGGING
translated_messages_path = os.path.join(pathlib.Path(__file__).parent.resolve().parent.resolve().parent.resolve(), "src", "seedsigner", "resources", "babel", locale, "LC_MESSAGES", "messages.po")
with open(translated_messages_path, 'r') as translation_file:
locale_translations = translation_file.read()
@@ -208,5 +211,11 @@ def test_generate_screenshots():
with open(os.path.join(screenshot_renderer.screenshot_path, "README.md"), 'w') as readme_file:
readme_file.write(locale_readme)
# Write the main README; ensure it writes all locales, not just the one that may
# have been specified for this run.
main_readme = """# SeedSigner Screenshots \n\n"""
for locale in SettingsConstants.ALL_LOCALES:
main_readme += f"* [{display_name}]({locale}/README.md)\n"
with open(os.path.join(screenshot_root, "README.md"), 'w') as readme_file:
readme_file.write(main_readme)
+4 -1
View File
@@ -35,7 +35,10 @@ class ScreenshotRenderer(Renderer):
self.screenshot_path = path
def show_image(self, image=None, alpha_overlay=None):
def show_image(self, image=None, alpha_overlay=None, is_background_thread: bool = False):
if is_background_thread:
return
if alpha_overlay:
if image == None:
image = self.canvas