From 6d890aedf083c5a1ebebf65609695fbd2d87023b Mon Sep 17 00:00:00 2001 From: Ruidy Date: Mon, 5 Jul 2021 19:56:56 +0200 Subject: [PATCH] refactor: split in smaller functions add protocol --- app/pass_gen.py | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/app/pass_gen.py b/app/pass_gen.py index f7cb810..23783f8 100644 --- a/app/pass_gen.py +++ b/app/pass_gen.py @@ -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