mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-01-17 19:00:58 +00:00
67 lines
1.8 KiB
Python
67 lines
1.8 KiB
Python
def format_amount(amount: int, decimals: int) -> str:
|
|
if amount < 0:
|
|
amount = -amount
|
|
sign = "-"
|
|
else:
|
|
sign = ""
|
|
d = pow(10, decimals)
|
|
s = (
|
|
("%s%d.%0*d" % (sign, amount // d, decimals, amount % d))
|
|
.rstrip("0")
|
|
.rstrip(".")
|
|
)
|
|
return s
|
|
|
|
|
|
def format_ordinal(number: int) -> str:
|
|
return str(number) + {1: "st", 2: "nd", 3: "rd"}.get(
|
|
4 if 10 <= number % 100 < 20 else number % 10, "th"
|
|
)
|
|
|
|
|
|
def format_plural(string: str, count: int, plural: str) -> str:
|
|
"""
|
|
Adds plural form to a string based on `count`.
|
|
!! Does not work with irregular words !!
|
|
|
|
Example:
|
|
>>> format_plural("We need {count} more {plural}", 3, "share")
|
|
'We need 3 more shares'
|
|
>>> format_plural("We need {count} more {plural}", 1, "share")
|
|
'We need 1 more share'
|
|
>>> format_plural("{count} {plural}", 4, "candy")
|
|
'4 candies'
|
|
"""
|
|
if not all(s in string for s in ("{count}", "{plural}")):
|
|
# string needs to have {count} and {plural} inside
|
|
raise ValueError
|
|
|
|
if count == 0 or count > 1:
|
|
if plural[-1] == "y":
|
|
plural = plural[:-1] + "ies"
|
|
elif plural[-1] in "hsxz":
|
|
plural = plural + "es"
|
|
else:
|
|
plural = plural + "s"
|
|
|
|
return string.format(count=count, plural=plural)
|
|
|
|
|
|
def format_duration_ms(milliseconds: int) -> str:
|
|
"""
|
|
Returns human-friendly representation of a duration. Truncates all decimals.
|
|
"""
|
|
units = (
|
|
("hour", 60 * 60 * 1000),
|
|
("minute", 60 * 1000),
|
|
("second", 1000),
|
|
)
|
|
for unit, divisor in units:
|
|
if milliseconds >= divisor:
|
|
break
|
|
else:
|
|
unit = "millisecond"
|
|
divisor = 1
|
|
|
|
return format_plural("{count} {plural}", milliseconds // divisor, unit)
|