mirror of
https://github.com/SeedSigner/seedsigner.git
synced 2026-10-05 15:08:25 +00:00
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:
+4
-1
@@ -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.*
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user