Skip to content

Commit

Permalink
Format numbers in tx details screens
Browse files Browse the repository at this point in the history
  • Loading branch information
overcat committed Jun 6, 2023
1 parent 7120da0 commit 40aca55
Showing 1 changed file with 51 additions and 25 deletions.
76 changes: 51 additions & 25 deletions src/lumensigner/gui/screens/sign_tx_screens.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import base64
import locale
import math
from dataclasses import dataclass
from datetime import datetime
Expand Down Expand Up @@ -123,7 +124,9 @@ def build_tx_info_screens(te: TransactionEnvelope) -> List[GenericTxDetailsScree
items.append(Item(label=network_title, content=network_content))

# Max Fee
items.append(Item(label="Max Fee", content=f"{from_xdr_amount(tx.fee)} XLM"))
items.append(
Item(label="Max Fee", content=f"{format_number(from_xdr_amount(tx.fee))} XLM")
)

# Memo
if isinstance(tx.memo, NoneMemo):
Expand Down Expand Up @@ -247,7 +250,7 @@ class CreateAccountOperationScreen(GenericTxDetailsScreen):
tx_source: MuxedAccount = None

def __post_init__(self):
send_str = f"{self.op.starting_balance} XLM"
send_str = f"{format_number(self.op.starting_balance)} XLM"

items = [
Item(label="Send", content=send_str, auto_trim_content=False),
Expand All @@ -270,7 +273,7 @@ class PaymentOperationScreen(GenericTxDetailsScreen):
def __post_init__(self):
asset_str = format_asset(self.op.asset)

send_str = f"{self.op.amount} {asset_str}"
send_str = f"{format_number(self.op.amount)} {asset_str}"
items = [
Item(label="Send", content=send_str, auto_trim_content=False),
Item(label="To", content=self.op.destination.universal_account_id),
Expand All @@ -291,7 +294,7 @@ class PathPaymentStrictReceiveOperationScreen(GenericTxDetailsScreen):

def __post_init__(self):
send_asset_str = format_asset(self.op.send_asset)
send_str = f"{self.op.send_max} {send_asset_str}"
send_str = f"{format_number(self.op.send_max)} {send_asset_str}"

items = [
Item(label="Path Pay At Most", content=send_str, auto_trim_content=False),
Expand All @@ -313,7 +316,7 @@ class PathPaymentStrictSendOperationScreen(GenericTxDetailsScreen):

def __post_init__(self):
send_asset_str = format_asset(self.op.send_asset)
send_str = f"{self.op.send_amount} {send_asset_str}"
send_str = f"{format_number(self.op.send_amount)} {send_asset_str}"

items = [
Item(label="Path Pay", content=send_str, auto_trim_content=False),
Expand Down Expand Up @@ -343,7 +346,7 @@ def __post_init__(self):
op_type = f"Update Offer #{self.op.offer_id}"

sell_asset_str = format_asset(self.op.selling)
sell_str = f"{self.op.amount} {sell_asset_str}"
sell_str = f"{format_number(self.op.amount)} {sell_asset_str}"
buy_asset_str = format_asset(self.op.buying)

items = [
Expand All @@ -364,8 +367,8 @@ class ManageSellOfferOperationScreenPage2(GenericTxDetailsScreen):
tx_source: MuxedAccount = None

def __post_init__(self):
price = Decimal(self.op.price.n) / Decimal(self.op.price.d)
price_str = f"{price} {format_asset(self.op.buying, include_issuer=False)}/{format_asset(self.op.selling, include_issuer=False)}"
price = str(Decimal(self.op.price.n) / Decimal(self.op.price.d))
price_str = f"{format_number(price)} {format_asset(self.op.buying, include_issuer=False)}/{format_asset(self.op.selling, include_issuer=False)}"

items = [
Item(label="Price", content=price_str, auto_trim_content=False),
Expand Down Expand Up @@ -394,7 +397,7 @@ def __post_init__(self):
op_type = f"Update Offer #{self.op.offer_id}"

buy_asset_str = format_asset(self.op.buying)
buy_str = f"{self.op.amount} {buy_asset_str}"
buy_str = f"{format_number(self.op.amount)} {buy_asset_str}"
sell_asset_str = format_asset(self.op.selling)

items = [
Expand All @@ -415,8 +418,8 @@ class ManageBuyOfferOperationScreenPage2(GenericTxDetailsScreen):
tx_source: MuxedAccount = None

def __post_init__(self):
price = Decimal(self.op.price.n) / Decimal(self.op.price.d)
price_str = f"{price} {format_asset(self.op.selling, include_issuer=False)}/{format_asset(self.op.buying, include_issuer=False)}"
price = str(Decimal(self.op.price.n) / Decimal(self.op.price.d))
price_str = f"{format_number(price)} {format_asset(self.op.selling, include_issuer=False)}/{format_asset(self.op.buying, include_issuer=False)}"

items = [
Item(label="Price", content=price_str, auto_trim_content=False),
Expand All @@ -438,7 +441,7 @@ class CreatePassiveSellOfferOperationScreenPage1(GenericTxDetailsScreen):
def __post_init__(self):
op_type = "Create Passive Offer"
sell_asset_str = format_asset(self.op.selling)
sell_str = f"{self.op.amount} {sell_asset_str}"
sell_str = f"{format_number(self.op.amount)} {sell_asset_str}"
buy_asset_str = format_asset(self.op.buying)

items = [
Expand All @@ -459,8 +462,8 @@ class CreatePassiveSellOfferOperationScreenPage2(GenericTxDetailsScreen):
tx_source: MuxedAccount = None

def __post_init__(self):
price = Decimal(self.op.price.n) / Decimal(self.op.price.d)
price_str = f"{price} {format_asset(self.op.buying, include_issuer=False)}/{format_asset(self.op.selling, include_issuer=False)}"
price = str(Decimal(self.op.price.n) / Decimal(self.op.price.d))
price_str = f"{format_number(price)} {format_asset(self.op.buying, include_issuer=False)}/{format_asset(self.op.selling, include_issuer=False)}"

items = [
Item(label="Price", content=price_str, auto_trim_content=False),
Expand Down Expand Up @@ -490,9 +493,11 @@ def __post_init__(self):
op_type = "Add Trustline"
if isinstance(self.op.asset, LiquidityPoolAsset):
# TODO: check if this is correct
line = f"{self.op.limit} {self.op.asset.liquidity_pool_id}"
line = (
f"{format_number(self.op.limit)} {self.op.asset.liquidity_pool_id}"
)
else:
line = f"{self.op.limit} {format_asset(self.op.asset)}"
line = f"{format_number(self.op.limit)} {format_asset(self.op.asset)}"

items = [
Item(label="Operation Type", content=op_type),
Expand Down Expand Up @@ -660,7 +665,7 @@ class CreateClaimableBalanceOperationScreenPage2(GenericTxDetailsScreen):
tx_source: MuxedAccount = None

def __post_init__(self):
balance = f"{self.op.amount} {format_asset(self.op.asset)}"
balance = f"{format_number(self.op.amount)} {format_asset(self.op.asset)}"
items = [
Item(label="Balance", content=balance),
]
Expand Down Expand Up @@ -901,7 +906,7 @@ def __post_init__(self):
items = [
Item(label="Operation Type", content="Liquidity Pool Deposit"),
Item(label="Liquidity Pool ID", content=self.op.liquidity_pool_id),
Item(label="Max Amount A", content=self.op.max_amount_a),
Item(label="Max Amount A", content=format_number(self.op.max_amount_a)),
]

self.title = f"Operation {self.op_index + 1}"
Expand All @@ -916,15 +921,17 @@ class LiquidityPoolDepositOperationScreenPage2(GenericTxDetailsScreen):
tx_source: MuxedAccount = None

def __post_init__(self):
min_price = f"{self.op.min_price.n / self.op.min_price.d:.7f}"
max_price = f"{self.op.max_price.n / self.op.max_price.d:.7f}"
items = [
Item(label="Max Amount B", content=self.op.max_amount_b),
Item(label="Max Amount B", content=format_number(self.op.max_amount_b)),
Item(
label="Min Price",
content=f"{self.op.min_price.n / self.op.min_price.d:.7f}",
content=format_number(min_price),
),
Item(
label="Max Price",
content=f"{self.op.max_price.n / self.op.max_price.d:.7f}",
content=format_number(max_price),
),
]

Expand All @@ -944,7 +951,7 @@ def __post_init__(self):
items = [
Item(label="Operation Type", content="Liquidity Pool Withdraw"),
Item(label="Liquidity Pool ID", content=self.op.liquidity_pool_id),
Item(label="Amount", content=self.op.amount),
Item(label="Amount", content=format_number(self.op.amount)),
]

append_op_source_to_items(items, self.op.source, self.tx_source)
Expand All @@ -961,8 +968,8 @@ class LiquidityPoolWithdrawOperationScreenPage2(GenericTxDetailsScreen):

def __post_init__(self):
items = [
Item(label="Min Amount A", content=self.op.min_amount_a),
Item(label="Min Amount B", content=self.op.min_amount_b),
Item(label="Min Amount A", content=format_number(self.op.min_amount_a)),
Item(label="Min Amount B", content=format_number(self.op.min_amount_b)),
]

append_op_source_to_items(items, self.op.source, self.tx_source)
Expand Down Expand Up @@ -1094,7 +1101,10 @@ def __post_init__(self):
)
items = [
Item(label=network_title, content=network_content),
Item(label="Max Fee", content=f"{from_xdr_amount(max_fee)} XLM"),
Item(
label="Max Fee",
content=f"{format_number(from_xdr_amount(max_fee))} XLM",
),
Item(label="Fee Source", content=tx.fee_source.universal_account_id),
Item(
label="Inner Transaction Hash",
Expand Down Expand Up @@ -1304,3 +1314,19 @@ def format_network(network_passphrase: str) -> Tuple[str, str]:
network_title = "Network Passphrase"
network_content = network_passphrase
return network_title, network_content


def format_number(num_str: str) -> str:
try:
num = float(num_str)
except ValueError:
return num_str

locale.setlocale(locale.LC_ALL, "")
int_part = locale.format_string("%d", int(num), grouping=True)
dec_part = ""
if "." in num_str:
dec_part = num_str.split(".", 1)[1]
dec_part = "." + dec_part

return int_part + dec_part

0 comments on commit 40aca55

Please sign in to comment.