This commit is contained in:
Russell Ballestrini 2025-10-03 15:16:05 +00:00
parent fd267aec0f
commit 5fb40ba3d2

236
q
View file

@ -1,236 +0,0 @@
diff --git a/make_post_sell/models/crypto_payment.py b/make_post_sell/models/crypto_payment.py
index 0a25a83..b7f0ff3 100644
--- a/make_post_sell/models/crypto_payment.py
+++ b/make_post_sell/models/crypto_payment.py
@@ -533,6 +533,13 @@ class CryptoPayment(RBase, Base):
"""
return self.status in self.INITIAL_WAITING_STATUSES

+ def _format_amount(self, amount: int) -> str:
+ """Convert atomic units to display format for the coin type."""
+ if self.coin_type == "XMR":
+ return f"{amount / 1e12:.12f}".rstrip("0").rstrip(".")
+ else: # BTC, LTC, BCH, DOGE all use 8 decimals
+ return f"{amount / 1e8:.8f}".rstrip("0").rstrip(".")
+
def __str__(self) -> str:
"""
Human-readable string representation for logging and debugging.
@@ -540,45 +547,12 @@ class CryptoPayment(RBase, Base):
Returns:
str: Concise payment description for logs
"""
- return self._format_payment_summary()
-
- def __repr__(self) -> str:
- """
- Developer-oriented string representation for debugging.
-
- Returns:
- str: Detailed payment description for debugging
- """
- return (
- f"CryptoPayment(id={self.uuid_str[:8]}, "
- f"status={self.status}, "
- f"coin={self.coin_type}, "
- f"expected={self.expected_amount}, "
- f"received={self.received_amount}, "
- f"confirmations={self.current_confirmations or 0}/{self.confirmations_required}, "
- f"invoice_id={self.invoice_id.hex[:8] if self.invoice_id else None})"
- )
-
- def _format_payment_summary(self) -> str:
- """
- Format payment as a concise summary for logging.
-
- Returns:
- str: Payment summary with key details
- """
# Get amount information
- if self.coin_type == "XMR":
- expected_display = f"{self.expected_amount / 1e12:.6f}"
- received_display = f"{self.received_amount / 1e12:.6f}"
- elif self.coin_type == "DOGE":
- expected_display = f"{self.expected_amount / 1e8:.8f}"
- received_display = f"{self.received_amount / 1e8:.8f}"
- else: # BTC, LTC, BCH
- expected_display = f"{self.expected_amount / 1e8:.8f}"
- received_display = f"{self.received_amount / 1e8:.8f}"
+ expected_display = self._format_amount(self.expected_amount)
+ received_display = self._format_amount(self.received_amount)

# Build status description
- status_desc = self._get_status_description()
+ status_desc = self.status

# Format confirmations
conf_desc = f"{self.current_confirmations or 0}/{self.confirmations_required}"
@@ -601,59 +575,22 @@ class CryptoPayment(RBase, Base):
f"conf:{conf_desc} addr:{self.address[-8:]}{user_display}{shop_display}"
)

- def _get_status_description(self) -> str:
- """
- Get human-readable status description for logging.
-
- Returns:
- str: Human-readable status description
- """
- status_descriptions = {
- # Initial/waiting states
- self.STATUS_PENDING: "waiting",
- # Active processing states
- self.STATUS_RECEIVED: "received",
- self.STATUS_CONFIRMED: "confirmed",
- self.STATUS_CONFIRMED_OVERPAY: "overpaid",
- # Refund processing states
- self.STATUS_CONFIRMED_OVERPAY_REFUNDED: "overpay-refunding",
- self.STATUS_LATEPAY_REFUNDED: "late-refunding",
- self.STATUS_UNDERPAID_REFUNDED: "underpay-refunding",
- self.STATUS_OUT_OF_STOCK_REFUNDED: "oos-refunding",
- self.STATUS_DOUBLEPAY_REFUNDED: "duplicate-refunding",
- # Completed refund states
- self.STATUS_CONFIRMED_OVERPAY_REFUNDED_COMPLETE: "overpay-refunded",
- self.STATUS_LATEPAY_REFUNDED_COMPLETE: "late-refunded",
- self.STATUS_UNDERPAID_REFUNDED_COMPLETE: "underpay-refunded",
- self.STATUS_OUT_OF_STOCK_REFUNDED_COMPLETE: "oos-refunded",
- self.STATUS_DOUBLEPAY_REFUNDED_COMPLETE: "duplicate-refunded",
- # No-refund states
- self.STATUS_CONFIRMED_OVERPAY_NOT_REFUNDED: "overpay-no-refund",
- self.STATUS_LATEPAY_NOT_REFUNDED: "late-no-refund",
- self.STATUS_UNDERPAID_NOT_REFUNDED: "underpay-no-refund",
- self.STATUS_OUT_OF_STOCK_NOT_REFUNDED: "oos-no-refund",
- self.STATUS_DOUBLEPAY_NOT_REFUNDED: "duplicate-no-refund",
- # Terminal states
- self.STATUS_EXPIRED: "expired",
- self.STATUS_CANCELLED: "cancelled",
- }
-
- return status_descriptions.get(self.status, self.status)
-
- def format_transaction_log(self, context: str = "") -> str:
+ def __repr__(self) -> str:
"""
- Format payment for transaction logging with optional context.
-
- Args:
- context: Optional context (e.g., "processing", "refunding")
+ Developer-oriented string representation for debugging.

Returns:
- str: Formatted transaction log entry
+ str: Detailed payment description for debugging
"""
- base_msg = str(self)
- if context:
- return f"{context.capitalize()}: {base_msg}"
- return base_msg
+ return (
+ f"CryptoPayment(id={self.uuid_str[:8]}, "
+ f"status={self.status}, "
+ f"coin={self.coin_type}, "
+ f"expected={self.expected_amount}, "
+ f"received={self.received_amount}, "
+ f"confirmations={self.current_confirmations or 0}/{self.confirmations_required}, "
+ f"invoice_id={self.invoice_id.hex[:8] if self.invoice_id else None})"
+ )

def format_amount_details(self) -> str:
"""
@@ -662,18 +599,9 @@ class CryptoPayment(RBase, Base):
Returns:
str: Detailed amount breakdown
"""
- if self.coin_type == "XMR":
- expected = f"{self.expected_amount / 1e12:.6f}"
- received = f"{self.received_amount / 1e12:.6f}"
- due = f"{self.due_amount / 1e12:.6f}" if self.due_amount > 0 else "0"
- elif self.coin_type == "DOGE":
- expected = f"{self.expected_amount / 1e8:.8f}"
- received = f"{self.received_amount / 1e8:.8f}"
- due = f"{self.due_amount / 1e8:.8f}" if self.due_amount > 0 else "0"
- else: # BTC, LTC, BCH
- expected = f"{self.expected_amount / 1e8:.8f}"
- received = f"{self.received_amount / 1e8:.8f}"
- due = f"{self.due_amount / 1e8:.8f}" if self.due_amount > 0 else "0"
+ expected = self._format_amount(self.expected_amount)
+ received = self._format_amount(self.received_amount)
+ due = self._format_amount(self.due_amount) if self.due_amount > 0 else "0"

return f"expected:{expected} received:{received} due:{due} {self.coin_type}"

@@ -684,6 +612,5 @@ class CryptoPayment(RBase, Base):
Returns:
str: Confirmation status description
"""
- status = "confirmed" if self.is_fully_confirmed else "pending"
current = self.current_confirmations or 0
- return f"{status} ({current}/{self.confirmations_required})"
+ return f"{current}/{self.confirmations_required}"
diff --git a/make_post_sell/tests/test_models.py b/make_post_sell/tests/test_models.py
index d3101f7..fb97394 100644
--- a/make_post_sell/tests/test_models.py
+++ b/make_post_sell/tests/test_models.py
@@ -1499,49 +1499,6 @@ class TestCryptoPayment(unittest.TestCase):
self.assertIn("received=0", result)
self.assertIn("confirmations=0/10", result) # Should show 0 due to our fix

- def test_get_status_description_all_statuses(self):
- """Test _get_status_description for all status types."""
- status_mapping = {
- CryptoPayment.STATUS_PENDING: "waiting",
- CryptoPayment.STATUS_RECEIVED: "received",
- CryptoPayment.STATUS_CONFIRMED: "confirmed",
- CryptoPayment.STATUS_CONFIRMED_OVERPAY: "overpaid",
- CryptoPayment.STATUS_EXPIRED: "expired",
- CryptoPayment.STATUS_CANCELLED: "cancelled",
- CryptoPayment.STATUS_LATEPAY_REFUNDED: "late-refunding",
- CryptoPayment.STATUS_UNDERPAID_REFUNDED: "underpay-refunding",
- CryptoPayment.STATUS_DOUBLEPAY_REFUNDED: "duplicate-refunding",
- CryptoPayment.STATUS_LATEPAY_REFUNDED_COMPLETE: "late-refunded",
- CryptoPayment.STATUS_UNDERPAID_REFUNDED_COMPLETE: "underpay-refunded",
- CryptoPayment.STATUS_DOUBLEPAY_REFUNDED_COMPLETE: "duplicate-refunded",
- CryptoPayment.STATUS_LATEPAY_NOT_REFUNDED: "late-no-refund",
- CryptoPayment.STATUS_UNDERPAID_NOT_REFUNDED: "underpay-no-refund",
- CryptoPayment.STATUS_DOUBLEPAY_NOT_REFUNDED: "duplicate-no-refund",
- }
-
- for status, expected_desc in status_mapping.items():
- self.payment.status = status
- result = self.payment._get_status_description()
- self.assertEqual(
- result, expected_desc, f"Status {status} should map to {expected_desc}"
- )
-
- def test_format_transaction_log_with_context(self):
- """Test format_transaction_log method with context."""
- self.payment.status = CryptoPayment.STATUS_RECEIVED
-
- result = self.payment.format_transaction_log("processing")
-
- self.assertIn("Processing:", result)
- self.assertIn("[received]", result)
-
- def test_format_transaction_log_without_context(self):
- """Test format_transaction_log method without context."""
- result = self.payment.format_transaction_log()
-
- # Should be same as str() when no context
- self.assertEqual(result, str(self.payment))
-
def test_format_amount_details_xmr(self):
"""Test format_amount_details for XMR."""
self.payment.received_amount = 800000000000 # 0.8 XMR
diff --git a/make_post_sell/views/crypto.py b/make_post_sell/views/crypto.py
index 87f9b4b..37e493a 100644
--- a/make_post_sell/views/crypto.py
+++ b/make_post_sell/views/crypto.py
@@ -1332,8 +1332,6 @@ def crypto_debug_wallet_scan(request):
"If transfers found = 0, wallet has no transaction history or RPC issue"
)
debug_output.append("\n=== DEBUG COMPLETE ===")
-
return Response("\n".join(debug_output), content_type="text/plain")
-
except Exception as e:
return Response(f"Debug error: {e}", content_type="text/plain", status=500)