diff --git a/q b/q deleted file mode 100644 index 11c0999..0000000 --- a/q +++ /dev/null @@ -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)