Supports new EUR/USD amount string format
Adds support for parsing direct EUR/USD amount strings in the format "37.22 EUR" or "12.34 USD".
It also retrieves the SATS equivalent from the metadata if present, for the new amount format. This ensures compatibility with both the old "SATS {EUR}" format and the newer, direct fiat formats.
This commit is contained in:
parent
476e9dec4b
commit
313265b185
1 changed files with 23 additions and 10 deletions
33
views_api.py
33
views_api.py
|
|
@ -390,19 +390,32 @@ async def api_get_user_entries(
|
|||
if isinstance(first_posting, dict):
|
||||
amount_str = first_posting.get("amount", "")
|
||||
|
||||
# Parse amount string format: "36791 SATS {33.33 EUR, 2025-11-09}" or "36791 SATS"
|
||||
# Parse amount string: can be EUR/USD directly (new format) or "SATS {EUR}" (old format)
|
||||
if isinstance(amount_str, str) and amount_str:
|
||||
import re
|
||||
# Extract SATS amount (before " SATS")
|
||||
sats_match = re.match(r'^(-?\d+)\s+SATS', amount_str)
|
||||
if sats_match:
|
||||
amount_sats = abs(int(sats_match.group(1)))
|
||||
# Try EUR/USD format first (new format: "37.22 EUR")
|
||||
fiat_match = re.match(r'^(-?[\d.]+)\s+([A-Z]{3})$', amount_str)
|
||||
if fiat_match and fiat_match.group(2) in ('EUR', 'USD', 'GBP'):
|
||||
# Direct fiat amount (new approach)
|
||||
fiat_amount = abs(float(fiat_match.group(1)))
|
||||
fiat_currency = fiat_match.group(2)
|
||||
|
||||
# Extract fiat from cost syntax: {33.33 EUR, ...}
|
||||
cost_match = re.search(r'\{([\d.]+)\s+([A-Z]+)', amount_str)
|
||||
if cost_match:
|
||||
fiat_amount = float(cost_match.group(1))
|
||||
fiat_currency = cost_match.group(2)
|
||||
# Get SATS from metadata
|
||||
posting_meta = first_posting.get("meta", {})
|
||||
sats_equiv = posting_meta.get("sats-equivalent")
|
||||
if sats_equiv:
|
||||
amount_sats = abs(int(sats_equiv))
|
||||
else:
|
||||
# Old format: "36791 SATS {33.33 EUR, 2025-11-09}" or "36791 SATS"
|
||||
sats_match = re.match(r'^(-?\d+)\s+SATS', amount_str)
|
||||
if sats_match:
|
||||
amount_sats = abs(int(sats_match.group(1)))
|
||||
|
||||
# Extract fiat from cost syntax: {33.33 EUR, ...}
|
||||
cost_match = re.search(r'\{([\d.]+)\s+([A-Z]+)', amount_str)
|
||||
if cost_match:
|
||||
fiat_amount = float(cost_match.group(1))
|
||||
fiat_currency = cost_match.group(2)
|
||||
|
||||
# Extract reference from links (first non-castle link)
|
||||
reference = None
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue