Skip to content

Commit 24401dc

Browse files
Jengahfcurella
authored andcommitted
Fix Faker.random_number intermittent exceptions #1074 (#1089)
* ensure max number of digits generated in random_number is > -1 when param is not passed and > 0 when fix_len is True * add additional tests for random_number functionality
1 parent 6c4fde4 commit 24401dc

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

faker/providers/__init__.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,15 @@ def random_number(self, digits=None, fix_len=False):
151151
fixed length number
152152
"""
153153
if digits is None:
154-
digits = self.random_digit()
154+
digits = self.random_digit_not_null()
155+
if digits < 0:
156+
raise ValueError("The digit parameter must be greater than or equal to 0.")
155157
if fix_len:
156-
return self.generator.random.randint(
157-
pow(10, digits - 1), pow(10, digits) - 1)
158+
if digits > 0:
159+
return self.generator.random.randint(
160+
pow(10, digits - 1), pow(10, digits) - 1)
161+
else:
162+
raise ValueError("A number of fixed length cannot have less than 1 digit in it.")
158163
else:
159164
return self.generator.random.randint(0, pow(10, digits) - 1)
160165

tests/test_factory.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -912,6 +912,14 @@ def test_random_number(self):
912912
number = provider.random_number(10, True)
913913
assert len(str(number)) == 10
914914

915+
# Digits parameter < 0
916+
with self.assertRaises(ValueError):
917+
number = provider.random_number(-1, True)
918+
919+
# Digits parameter < 1 with fix_len=True
920+
with self.assertRaises(ValueError):
921+
number = provider.random_number(0, True)
922+
915923
def test_instance_seed_chain(self):
916924
factory = Factory.create()
917925

0 commit comments

Comments
 (0)