diff --git a/faker/generator.py b/faker/generator.py index 613c44dc4f..8e26c21a94 100644 --- a/faker/generator.py +++ b/faker/generator.py @@ -3,6 +3,8 @@ from typing import TYPE_CHECKING, Any, Callable, Dict, Hashable, List, Optional +from .typing import SeedType + if TYPE_CHECKING: from .providers import BaseProvider @@ -65,7 +67,7 @@ def random(self) -> random_module.Random: def random(self, value: random_module.Random) -> None: self.__random = value - def seed_instance(self, seed: Optional[Hashable] = None) -> "Generator": + def seed_instance(self, seed: Optional[SeedType] = None) -> "Generator": """Calls random.seed""" if self.__random == random: # create per-instance random obj when first time seed_instance() is @@ -76,7 +78,7 @@ def seed_instance(self, seed: Optional[Hashable] = None) -> "Generator": return self @classmethod - def seed(cls, seed: Optional[Hashable] = None) -> None: + def seed(cls, seed: Optional[SeedType] = None) -> None: random.seed(seed) cls._global_seed = seed cls._is_seeded = True diff --git a/faker/proxy.py b/faker/proxy.py index d3ebdf8abf..dff065b0f0 100644 --- a/faker/proxy.py +++ b/faker/proxy.py @@ -10,6 +10,7 @@ from .exceptions import UniquenessException from .factory import Factory from .generator import Generator, Sentinel, random +from .typing import SeedType from .utils.distribution import choices_distribution _UNIQUE_ATTEMPTS = 1000 @@ -153,7 +154,7 @@ def _select_factory(self, method_name: str) -> Factory: return factories[0] if Generator._global_seed is not Sentinel: - random.seed(Generator._global_seed) + random.seed(Generator._global_seed) # type: ignore if weights: factory = self._select_factory_distribution(factories, weights) else: @@ -200,7 +201,7 @@ def _map_provider_method(self, method_name: str) -> Tuple[List[Factory], Optiona return mapping @classmethod - def seed(cls, seed: Optional[Hashable] = None) -> None: + def seed(cls, seed: Optional[SeedType] = None) -> None: """ Hashables the shared `random.Random` object across all factories @@ -208,7 +209,7 @@ def seed(cls, seed: Optional[Hashable] = None) -> None: """ Generator.seed(seed) - def seed_instance(self, seed: Optional[Hashable] = None) -> None: + def seed_instance(self, seed: Optional[SeedType] = None) -> None: """ Creates and seeds a new `random.Random` object for each factory @@ -217,7 +218,7 @@ def seed_instance(self, seed: Optional[Hashable] = None) -> None: for factory in self._factories: factory.seed_instance(seed) - def seed_locale(self, locale: str, seed: Optional[Hashable] = None) -> None: + def seed_locale(self, locale: str, seed: Optional[SeedType] = None) -> None: """ Creates and seeds a new `random.Random` object for the factory of the specified locale diff --git a/faker/typing.py b/faker/typing.py index 0e68df628c..75be5a7bda 100644 --- a/faker/typing.py +++ b/faker/typing.py @@ -9,3 +9,4 @@ DateParseType = Union[date, datetime, timedelta, str, int] HueType = TypeVar("HueType", str, float, Sequence[int]) GenderType = TypeVar("GenderType", bound=Literal["M", "F"]) +SeedType = Union[int, float, str, bytes, bytearray, None]