Source code for fauxfactory.factories.numbers
"""Methods that generate random number values."""
from functools import partial
import random
import sys
from fauxfactory.helpers import base_repr
[docs]
def gen_integer(min_value=None, max_value=None):
"""Return a random integer value based on the current platform.
:param int min_value: The minimum allowed value.
:param int max_value: The maximum allowed value.
:raises: ``ValueError`` if arguments are not integers or if they are
less or greater than the system's allowed range for integers.
:returns: Returns a random integer value.
:rtype: int
"""
# Platform-specific value range for integers
_min_value = -sys.maxsize - 1
_max_value = sys.maxsize
if min_value is None:
min_value = _min_value
if max_value is None:
max_value = _max_value
integer_types = (int,)
# Perform some validations
if not isinstance(min_value, integer_types) or min_value < _min_value:
raise ValueError(f'"{min_value}" is not a valid minimum.')
if not isinstance(max_value, integer_types) or max_value > _max_value:
raise ValueError(f'"{max_value}" is not a valid maximum.')
random.seed()
value = random.randint(min_value, max_value)
return value
[docs]
def gen_negative_integer():
"""Return a random negative integer based on the current platform.
:returns: Returns a random negative integer value.
:rtype: int
"""
max_value = 0
return gen_integer(max_value=max_value)
[docs]
def gen_positive_integer():
"""Return a random positive integer based on the current platform.
:returns: A random positive integer value.
:rtype: int
"""
min_value = 0
return gen_integer(min_value=min_value)
[docs]
def gen_number(min_value=None, max_value=None, base=10):
"""Return a random number (with <base> representation).
:returns: A random number with base of <base>.
:rtype: str
"""
return base_repr(
gen_integer(
int(str(min_value), base=base) if min_value is not None else min_value,
int(str(max_value), base=base) if max_value is not None else max_value,
),
base,
)
gen_octagonal = partial(gen_number, base=8)
gen_hexadecimal = partial(gen_number, base=16)
__all__ = tuple(name for name in locals() if name.startswith("gen_"))
def __dir__():
return __all__