refactor: split in smaller functions

add protocol
This commit is contained in:
Ruidy 2021-07-05 19:56:56 +02:00
parent 021a856416
commit 6d890aedf0

View file

@ -1,17 +1,34 @@
import string
import random
import string
from typing import Protocol
def generate_password(seed: int, length: int = 8, symbols: bool = False) -> str:
characters = _build_characters(symbols)
random_generator = _new_random_generator(seed)
return "".join(random_generator.sample(characters, length))
class RandomSampler(Protocol):
def sample(self, population: str, k: int) -> list[str]:
... # pragma nocover
def _new_random_generator(seed: int) -> RandomSampler:
return random.Random(seed)
def _build_characters(symbols: bool) -> str:
lowercase = string.ascii_lowercase
uppercase = string.ascii_uppercase
digits = string.digits
punctuation = string.punctuation
letters = lowercase + uppercase + digits
characters = lowercase + uppercase + digits
if symbols:
letters += punctuation
characters += punctuation
random_generator = random.Random(seed)
return "".join(random_generator.sample(letters, length))
return characters