Browse Source

Merge JoinMarket-Org/joinmarket-clientserver#1463: Add typehints to `jmbitcoin/jmbitcoin/amount.py`

f6795e439f Add typehints to jmbitcoin/jmbitcoin/amount.py (Kristaps Kaupe)

Pull request description:

  Was working on some other stuff and got to this and I think we should use typehints in future for anything we change, so splitted this off, should be easy to review.

ACKs for top commit:
  AdamISZ:
    utACK f6795e439f

Tree-SHA512: c8af41383212c06dd8b54081a0f2521762573e2b901a35cbc61ddd3f0a6226b4e2b93c217c079b85084dcb9cefa2aab7e11c22ea580cc604d71cce5a68db0a3b
master
Kristaps Kaupe 3 years ago
parent
commit
2b415c53af
No known key found for this signature in database
GPG Key ID: 33E472FE870C7E5D
  1. 21
      jmbitcoin/jmbitcoin/amount.py
  2. 20
      jmbitcoin/test/test_amounts.py

21
jmbitcoin/jmbitcoin/amount.py

@ -1,12 +1,13 @@
from decimal import Decimal
from typing import Any, Tuple, Union
import re
def btc_to_sat(btc):
def btc_to_sat(btc: Union[int, str, Tuple, float, Decimal]) -> int:
return int(Decimal(btc) * Decimal('1e8'))
def sat_to_btc(sat):
def sat_to_btc(sat: int) -> Decimal:
return Decimal(sat) / Decimal('1e8')
# 1 = 0.00000001 BTC = 1sat
@ -19,7 +20,7 @@ def sat_to_btc(sat):
# 1btc = 1.00000000 BTC = 10000000sat
def amount_to_sat(amount_str):
def amount_to_sat(amount_str: str) -> int:
amount_str = str(amount_str).strip()
if re.compile(r"^[0-9]{1,8}(\.)?([0-9]{1,8})?(btc|sat)?$").match(
amount_str.lower()) is None:
@ -34,31 +35,31 @@ def amount_to_sat(amount_str):
return int(Decimal(amount_str))
def amount_to_btc(amount_str):
def amount_to_btc(amount_str: str) -> Decimal:
return amount_to_sat(amount_str) / Decimal('1e8')
def amount_to_sat_str(amount_str):
def amount_to_sat_str(amount_str: str) -> str:
return str(amount_to_sat(amount_str)) + " sat"
def amount_to_btc_str(amount_str):
def amount_to_btc_str(amount_str: str) -> str:
return '%.8f' % amount_to_btc(amount_str) + " BTC"
def amount_to_str(amount_str):
def amount_to_str(amount_str: str) -> str:
return (amount_to_btc_str(amount_str) + " (" +
amount_to_sat_str(amount_str) + ")")
def sat_to_str(sat):
def sat_to_str(sat: int) -> str:
return '%.8f' % sat_to_btc(sat)
def sat_to_str_p(sat):
def sat_to_str_p(sat: int) -> str:
return '%+.8f' % sat_to_btc(sat)
def fee_per_kb_to_str(feerate):
def fee_per_kb_to_str(feerate: Any) -> str:
return (str(int(feerate)) + " sat/vkB (" +
'%.1f' % (int(feerate / 100) / 10) + " sat/vB)")

20
jmbitcoin/test/test_amounts.py

@ -3,17 +3,17 @@ import pytest
from decimal import Decimal
def test_btc_to_sat():
def test_btc_to_sat() -> None:
assert(btc.btc_to_sat(Decimal("0.00000001")) == 1)
assert(btc.btc_to_sat(Decimal("1.00000000")) == 100000000)
def test_sat_to_btc():
def test_sat_to_btc() -> None:
assert(btc.sat_to_btc(1) == Decimal("0.00000001"))
assert(btc.sat_to_btc(100000000) == Decimal("1.00000000"))
def test_amount_to_sat():
def test_amount_to_sat() -> None:
assert(btc.amount_to_sat("1") == 1)
assert(btc.amount_to_sat("1sat") == 1)
assert(btc.amount_to_sat("1.123sat") == 1)
@ -30,7 +30,7 @@ def test_amount_to_sat():
btc.amount_to_sat("123inv")
def test_amount_to_btc():
def test_amount_to_btc() -> None:
assert(btc.amount_to_btc("1") == Decimal("0.00000001"))
assert(btc.amount_to_btc("1sat") == Decimal("0.00000001"))
assert(btc.amount_to_btc("1.123sat") == Decimal("0.00000001"))
@ -47,7 +47,7 @@ def test_amount_to_btc():
btc.amount_to_btc("123inv")
def test_amount_to_sat_str():
def test_amount_to_sat_str() -> None:
assert(btc.amount_to_sat_str("1") == "1 sat")
assert(btc.amount_to_sat_str("1sat") == "1 sat")
assert(btc.amount_to_sat_str("1.123sat") == "1 sat")
@ -64,7 +64,7 @@ def test_amount_to_sat_str():
btc.amount_to_sat_str("123inv")
def test_amount_to_btc_str():
def test_amount_to_btc_str() -> None:
assert(btc.amount_to_btc_str("1") == "0.00000001 BTC")
assert(btc.amount_to_btc_str("1sat") == "0.00000001 BTC")
assert(btc.amount_to_btc_str("1.123sat") == "0.00000001 BTC")
@ -81,7 +81,7 @@ def test_amount_to_btc_str():
btc.amount_to_btc_str("123inv")
def test_amount_to_str():
def test_amount_to_str() -> None:
assert(btc.amount_to_str("1") == "0.00000001 BTC (1 sat)")
assert(btc.amount_to_str("1sat") == "0.00000001 BTC (1 sat)")
assert(btc.amount_to_str("1.123sat") == "0.00000001 BTC (1 sat)")
@ -98,19 +98,19 @@ def test_amount_to_str():
btc.amount_to_str("123inv")
def test_sat_to_str():
def test_sat_to_str() -> None:
assert(btc.sat_to_str(1) == "0.00000001")
assert(btc.sat_to_str(100000000) == "1.00000000")
def test_sat_to_str_p():
def test_sat_to_str_p() -> None:
assert(btc.sat_to_str_p(1) == "+0.00000001")
assert(btc.sat_to_str_p(-1) == "-0.00000001")
assert(btc.sat_to_str_p(100000000) == "+1.00000000")
assert(btc.sat_to_str_p(-100000000) == "-1.00000000")
def test_fee_per_kb_to_str():
def test_fee_per_kb_to_str() -> None:
assert(btc.fee_per_kb_to_str(1000) == "1000 sat/vkB (1.0 sat/vB)")
assert(btc.fee_per_kb_to_str(1234) == "1234 sat/vkB (1.2 sat/vB)")
assert(btc.fee_per_kb_to_str(1999) == "1999 sat/vkB (1.9 sat/vB)")

Loading…
Cancel
Save