Source code for imednet.testing.data_generator

"""Internal utility for generating synthetic data without external dependencies."""

from __future__ import annotations

import random
import uuid
from datetime import datetime, timedelta, timezone
from typing import Any


[docs]class RandomDataGenerator: """A deterministic, standard-library based data generator replacement for Faker."""
[docs] def __init__(self, seed: int | None = None) -> None: """Return a mocked value.""" self._rng = random.Random(seed) # noqa: S311
[docs] def uuid4(self) -> str: """Return a mocked value.""" if self._rng is random._inst: return str(uuid.uuid4()) return str(uuid.UUID(int=self._rng.getrandbits(128), version=4))
[docs] def random_int(self, min: int = 0, max: int = 9999) -> int: """Return a mocked value.""" return self._rng.randint(min, max)
[docs] def pyfloat(self, left_digits: int = 2, right_digits: int = 2, positive: bool = True) -> float: """Return a mocked value.""" min_v = 0.0 if positive else -(10**left_digits) max_v = float(10**left_digits) return round(self._rng.uniform(min_v, max_v), right_digits)
[docs] def boolean(self) -> bool: """Return a mocked value.""" return self._rng.choice([True, False])
[docs] def random_element(self, elements: list[Any]) -> Any: """Return a mocked value.""" return self._rng.choice(elements)
[docs] def bothify(self, text: str) -> str: """Return a mocked value.""" out = [] for c in text: if c == '?': out.append(self._rng.choice('abcdefghijklmnopqrstuvwxyz')) elif c == '#': out.append(str(self._rng.randint(0, 9))) else: out.append(c) return "".join(out)
[docs] def lexify(self, text: str) -> str: """Return a mocked value.""" return self.bothify(text)
[docs] def company(self) -> str: """Return a mocked value.""" return self._rng.choice( ["Acme Corp", "Globex", "Initech", "Umbrella Corp", "Stark Industries"] )
[docs] def word(self) -> str: """Return a mocked value.""" return self._rng.choice(["test", "mock", "fake", "sample", "data", "example"])
[docs] def sentence(self, nb_words: int = 3) -> str: """Return a mocked value.""" words = [self.word() for _ in range(nb_words)] words[0] = words[0].title() return " ".join(words) + "."
[docs] def paragraph(self, nb_sentences: int = 3) -> str: """Return a mocked value.""" return " ".join(self.sentence(3) for _ in range(nb_sentences))
[docs] def user_name(self) -> str: """Return a mocked value.""" return self.lexify("?????") + str(self.random_int(10, 99))
[docs] def first_name(self) -> str: """Return a mocked value.""" return self._rng.choice(["Alice", "Bob", "Charlie", "Diana", "Eve", "Frank"])
[docs] def last_name(self) -> str: """Return a mocked value.""" return self._rng.choice(["Smith", "Johnson", "Williams", "Jones", "Brown", "Davis"])
[docs] def email(self) -> str: """Return a mocked value.""" return f"{self.first_name().lower()}.{self.last_name().lower()}@{self.lexify('????')}.com"
[docs] def date_time(self) -> datetime: """Return a mocked value.""" days = self._rng.randint(0, 365) return datetime.now(timezone.utc) - timedelta(days=days)
generator = RandomDataGenerator()