aboutsummaryrefslogtreecommitdiff
path: root/src/utils
diff options
context:
space:
mode:
authorGravatar jesopo2018-10-12 11:28:14 +0100
committerGravatar jesopo2018-10-12 11:28:14 +0100
commitd46037562945fe3ebe5418299651575ced0b5323 (patch)
treee1dc94d813695d1386786c63b2ca6fd41355d110 /src/utils
parentActually pass format args to ValueErrors in utils.parse_number (diff)
signature
Use decimal.Decimal in utils.parse_number
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/__init__.py21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/utils/__init__.py b/src/utils/__init__.py
index 6792ee1f..ab67ba86 100644
--- a/src/utils/__init__.py
+++ b/src/utils/__init__.py
@@ -1,7 +1,6 @@
-from . import irc, http
-
-import io, re
+import decimal, io, re
from src import ModuleManager
+from . import irc, http
TIME_SECOND = 1
TIME_MINUTE = TIME_SECOND*60
@@ -86,21 +85,25 @@ def to_pretty_time(total_seconds, minimum_unit=UNIT_SECOND, max_units=6):
return out
def parse_number(s):
- if s.isdigit():
+ try:
+ decimal.Decimal(s)
return s
+ except:
+ pass
unit = s[-1].lower()
number = s[:-1]
- if not number.isdigit():
+ try:
+ number = decimal.Decimal(number)
+ except:
raise ValueError("Invalid format '%s' passed to parse_number" % number)
- number = int(number)
if unit == "k":
- number *= 1_000
+ number *= decimal.Decimal("1_000")
elif unit == "m":
- number *= 1_000_000
+ number *= decimal.Decimal("1_000_000")
elif unit == "b":
- number *= 1_000_000_000
+ number *= decimal.Decimal("1_000_000_000")
else:
raise ValueError("Unknown unit '%s' given to parse_number" % unit)
return str(number)