forked from LBRYCommunity/lbry-sdk
Implemented removal of float usage. Floats converted to int internally.
This commit is contained in:
parent
c753a5825a
commit
559afa465a
2 changed files with 32 additions and 10 deletions
|
@ -5,6 +5,7 @@ import requests
|
||||||
import urllib
|
import urllib
|
||||||
import json
|
import json
|
||||||
import textwrap
|
import textwrap
|
||||||
|
import re
|
||||||
|
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
from binascii import hexlify, unhexlify
|
from binascii import hexlify, unhexlify
|
||||||
|
@ -3325,17 +3326,12 @@ class Daemon(AuthJSONRPCServer):
|
||||||
raise ValueError("Couldn't find account: {}.".format(account_id))
|
raise ValueError("Couldn't find account: {}.".format(account_id))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_dewies_or_error(argument: str, amount: Union[str, int, float]):
|
def get_dewies_or_error(argument: str, amount: str):
|
||||||
if isinstance(amount, str):
|
if isinstance(amount, str):
|
||||||
if '.' in amount:
|
result = re.search(r'^(\d{1,10})\.(\d{1,8})$', amount)
|
||||||
try:
|
if result is not None:
|
||||||
return int(Decimal(amount) * COIN)
|
whole, fractional = result.groups()
|
||||||
except InvalidOperation:
|
return int(whole+fractional.ljust(8,"0"))
|
||||||
raise ValueError("Invalid decimal for '{}' argument: {}".format(argument, amount))
|
|
||||||
elif amount.isdigit():
|
|
||||||
amount = int(amount)
|
|
||||||
if isinstance(amount, (float, int)):
|
|
||||||
return int(amount * COIN)
|
|
||||||
raise ValueError("Invalid value for '{}' argument: {}".format(argument, amount))
|
raise ValueError("Invalid value for '{}' argument: {}".format(argument, amount))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -313,3 +313,29 @@ class TestFileListSorting(unittest.TestCase):
|
||||||
setattr(lbry_file, key, faked_attributes[key])
|
setattr(lbry_file, key, faked_attributes[key])
|
||||||
|
|
||||||
return lbry_file
|
return lbry_file
|
||||||
|
|
||||||
|
|
||||||
|
class TestDeweyInputOutput(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_input(self):
|
||||||
|
self.assertEqual(LBRYDaemon.get_dewies_or_error("", "1.0"), 100000000)
|
||||||
|
self.assertEqual(LBRYDaemon.get_dewies_or_error("", "2.00000000"), 200000000)
|
||||||
|
self.assertEqual(LBRYDaemon.get_dewies_or_error("", "2000000000.0"), 200000000000000000)
|
||||||
|
|
||||||
|
def test_invalid_input(self):
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
LBRYDaemon.get_dewies_or_error("", "1")
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
LBRYDaemon.get_dewies_or_error("", "-1.0")
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
LBRYDaemon.get_dewies_or_error("", "10000000000.0")
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
LBRYDaemon.get_dewies_or_error("", "1.000000000")
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
LBRYDaemon.get_dewies_or_error("", "-0")
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
LBRYDaemon.get_dewies_or_error("", "1")
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
LBRYDaemon.get_dewies_or_error("", ".1")
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
LBRYDaemon.get_dewies_or_error("", "1e-7")
|
||||||
|
|
Loading…
Add table
Reference in a new issue