From daa3815c3818cbcbfd7cf03c2f610487372d6fa0 Mon Sep 17 00:00:00 2001 From: SimplifiedPrivacy Date: Fri, 9 Oct 2026 15:13:39 -0400 Subject: [PATCH] Moved show error to be inherited from the parent --- gui/v2/ui/pages/Page.py | 33 +++++++++++++++++- gui/v2/ui/pages/payments2.py | 66 +++++++++++------------------------- 2 files changed, 51 insertions(+), 48 deletions(-) diff --git a/gui/v2/ui/pages/Page.py b/gui/v2/ui/pages/Page.py index acb30e1..367205e 100755 --- a/gui/v2/ui/pages/Page.py +++ b/gui/v2/ui/pages/Page.py @@ -1,10 +1,16 @@ from gui.v2.ui.popups.error_popup import ErrorPopup import os - +from typing import Any from PyQt6.QtWidgets import QWidget, QLabel, QPushButton from PyQt6.QtGui import QIcon from PyQt6 import QtCore +from enum import Enum + +# For formatting errors graphically: +class DataError(Enum): + FORMAT: "format" + BLANK: "blank" class Page(QWidget): @@ -117,3 +123,28 @@ class Page(QWidget): ) error_popup.show() + + + def display_error(self, whats_wrong: DataError, whats_it_called: str, the_thing: Any): + """Generic re-usable error prompt for various data related issues""" + + # Diagnosis + if whats_wrong == DataError.FORMAT: + error_msg = f"The {whats_it_called} is in the wrong format" + status_update = f'Error: Bad {whats_it_called} Format' + elif whats_wrong == DataError.BLANK: + error_msg = f"The {whats_it_called} is blank! But you need a {whats_it_called} to continue!" + status_update = f'Error: Blank {whats_it_called}' + else: + error_msg = f"The {whats_it_called} has unknown errors!" + status_update = f'Unknown Error with {whats_it_called}' + + # Display + if the_thing and isinstance(the_thing, str): + self.show_a_popup(f"{error_msg}: {the_thing}") + elif the_thing and isinstance(the_thing, dict): + message = the_thing.get('message', "!") + self.show_a_popup(f"{error_msg} {message}") + else: + self.show_a_popup(error_msg) + self.update_status.update_status(status_update) diff --git a/gui/v2/ui/pages/payments2.py b/gui/v2/ui/pages/payments2.py index 509ca90..0b060ad 100644 --- a/gui/v2/ui/pages/payments2.py +++ b/gui/v2/ui/pages/payments2.py @@ -6,7 +6,7 @@ from core.models.Result import Result # GUI from gui.v2.actions.payment_actions import save_and_begin_timer, gui_starts_invoice, stop_payment_timer -from gui.v2.ui.pages.Page import Page +from gui.v2.ui.pages.Page import Page, DataError from gui.v2.ui.popups.qrcode_dialog import QRCodeDialog from gui.v2.ui.styles.css.payment_styles import PAYMENT_STYLE_SHEET @@ -15,27 +15,25 @@ from gui.v2.infrastructure.ThreadSafetyTool import ThreadSafetyTool mainthread = ThreadSafetyTool() # generic +from typing import Optional import os -from typing import Any from PyQt6 import QtCore, QtWidgets from PyQt6.QtWidgets import ( QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, - QPushButton, QWidget, QApplication, QFrame, QSpacerItem, QSizePolicy + QPushButton, QWidget, QApplication, QFrame, QSpacerItem, QSizePolicy, QStackedWidget, QMainWindow ) from PyQt6.QtCore import Qt from PyQt6.QtGui import QIcon -from enum import Enum - -# For formatting errors graphically: -class DataError(Enum): - FORMAT: "format" - BLANK: "blank" - class PaymentDetailsPage(Page): - """Display Payment Details, fetch an invoice, and launch a repeat timer to check payment status.""" + """ + Display Payment Details, fetch an invoice, and launch a repeat timer to check payment status. + + From Page: Inherits display_error, show_a_popup + From Navigator: gets the functions navigate, get_cached, page_stack object + """ - def __init__(self, page_stack, main_window=None, parent=None): + def __init__(self, page_stack: QStackedWidget, main_window: Optional[QMainWindow] = None, parent: Optional[QWidget] = None): super().__init__("Payment Details", page_stack, main_window, parent) self.update_status = main_window @@ -140,7 +138,7 @@ class PaymentDetailsPage(Page): self.profile_id = int(self.update_status.current_profile_id) if not self.profile_id: - self._display_error(whats_wrong=DataError.BLANK, whats_it_called="Profile ID", the_thing=profile_id) + self.display_error(whats_wrong=DataError.BLANK, whats_it_called="Profile ID", the_thing=profile_id) return # this is not used here, but this is the right place to put it. Since we should have it by now: @@ -180,7 +178,6 @@ class PaymentDetailsPage(Page): self.begin_invoice() - def background_fetch_mode(self): """Continue checking if paid, but navigate back to the menu page""" if self.polling: @@ -190,31 +187,6 @@ class PaymentDetailsPage(Page): self.show_a_popup(message) - def _display_error(self, whats_wrong: DataError, whats_it_called: str, the_thing: Any): - """Generic re-usable error prompt for various data related issues""" - - # Diagnosis - if whats_wrong == DataError.FORMAT: - error_msg = f"The {whats_it_called} is in the wrong format" - status_update = f'Error: Bad {whats_it_called} Format' - elif whats_wrong == DataError.BLANK: - error_msg = f"The {whats_it_called} is blank! But you need a {whats_it_called} to continue!" - status_update = f'Error: Blank {whats_it_called}' - else: - error_msg = f"The {whats_it_called} has unknown errors!" - status_update = f'Unknown Error with {whats_it_called}' - - # Display - if the_thing and isinstance(the_thing, str): - self.show_a_popup(f"{error_msg}: {the_thing}") - elif the_thing and isinstance(the_thing, dict): - message = the_thing.get('message', "!") - self.show_a_popup(f"{error_msg} {message}") - else: - self.show_a_popup(error_msg) - self.update_status.update_status(status_update) - - def copy_text(self, key: str): """Copy/Paste fields and update the bottom status""" try: @@ -239,11 +211,11 @@ class PaymentDetailsPage(Page): """Callback for the background API thread to update the UI""" if not invoice_result: - self._display_error(whats_wrong=DataError.BLANK, whats_it_called="Backend Invoice Result", the_thing=invoice_result) + self.display_error(whats_wrong=DataError.BLANK, whats_it_called="Backend Invoice Result", the_thing=invoice_result) return if not isinstance(invoice_result, Result): - self._display_error(whats_wrong=DataError.FORMAT, whats_it_called="Backend Invoice Result", the_thing=invoice_result) + self.display_error(whats_wrong=DataError.FORMAT, whats_it_called="Backend Invoice Result", the_thing=invoice_result) return if not invoice_result.valid: @@ -255,11 +227,11 @@ class PaymentDetailsPage(Page): invoice = invoice_result.data if not invoice: - self._display_error(whats_wrong=DataError.BLANK, whats_it_called="invoice", the_thing=invoice) + self.display_error(whats_wrong=DataError.BLANK, whats_it_called="invoice", the_thing=invoice) return if not isinstance(invoice, SubscriptionInvoice): - self._display_error(whats_wrong=DataError.FORMAT, whats_it_called="invoice", the_thing=invoice) + self.display_error(whats_wrong=DataError.FORMAT, whats_it_called="invoice", the_thing=invoice) return self.fill_in_invoice_data(invoice) @@ -381,19 +353,19 @@ class PaymentDetailsPage(Page): """Get the currency from prior cached PaymentData""" if not self.profile_id or not isinstance(self.profile_id, int): - self._display_error(whats_wrong=DataError.FORMAT, whats_it_called="profile_id", the_thing=self.profile_id) + self.display_error(whats_wrong=DataError.FORMAT, whats_it_called="profile_id", the_thing=self.profile_id) billing_data = PaymentData(instance_id=self.profile_id) if not billing_data: - self._display_error(whats_wrong=DataError.BLANK, whats_it_called="Profile's Billing Data", the_thing=billing_data) + self.display_error(whats_wrong=DataError.BLANK, whats_it_called="Profile's Billing Data", the_thing=billing_data) currency = billing_data.currency if not currency: - self._display_error(whats_wrong=DataError.BLANK, whats_it_called="currency", the_thing=currency) + self.display_error(whats_wrong=DataError.BLANK, whats_it_called="currency", the_thing=currency) if not isinstance(currency, Currency): - self._display_error(whats_wrong=DataError.FORMAT, whats_it_called="currency", the_thing=currency) + self.display_error(whats_wrong=DataError.FORMAT, whats_it_called="currency", the_thing=currency) return currency